こんにちは、ACS 事業部の埜下です。
本記事では HCP Terraform の権限管理の一つの「ワークスペース権限」について紹介します。
ワークスペース権限の概要
HCP Terraform には「Free」「Standard」「Plus」の 3 つのプランがあります。 このうち、有償プランの「Standard」と「Plus」を利用している場合は「チーム管理」機能が使えるようになります。 「チーム管理」とは、HCP Terraform にログインしたユーザをチームに所属させて、チームが持つ権限をユーザに割り当てることができる機能です。
無償の「Free」プランの場合は owners
という Organization 全体の管理権限を持つ特別なチームだけ有効な状態で、全ユーザが owners
チームに所属します。そのため、全ユーザが Organization に対して強い権限を持つことになります。
また、HCP Terraform は「ワークスペース」という単位で Terraform 構成を管理しており、ワークスペースごとに Terraform Plan や Apply、変数の設定などができます。 これらの作業の権限をチームごとに割り当てることができます。 これが「ワークスペース権限」になります。
そのため、本記事で紹介するワークスペース権限は「Standard」または「Plus」のプランを利用していることが前提となります。
設定方法
ワークスペース権限は [Workspace Settings] の [Team Access] から設定できます。
初期状態では権限が設定されていないため次のような画面になっています。 [Add team and permissions] から権限を追加します。
権限設定画面では「どのチームに対して」「どの権限を割り当てるか」を選択していきます。 左側の [Permission groups] の選択に連動して右側の [Custom Permissions] の選択状態は変わります。
権限一覧
それでは、ワークスペース権限で割り当て可能な権限を見てみましょう。
下表は権限設定画面の右側の権限情報をまとめたものです。 上 3 つは必要な強さの権限を選択、下 3 つは対象権限の割り当て有無を選択する形式です。
権限 | 設定値 |
---|---|
実行アクセス (Run access) | - Read - Plan - Apply |
変数アクセス (Variable access) | - No access - Read - Read and write |
ステート アクセス (State access) | - No access - Read outputs only - Read - Read and write |
Sentinel モックのダウンロード (Download Sentinel mocks) | on / off |
ワークスペース実行タスクの管理 (Manage Workspace Run Tasks) | on / off |
ワークスペースのロック/ロック解除 (Lock/unlock workspace) | on / off |
各権限の内容は次のようになっています。
実行アクセス (Run access)
Read - ワークスペースの Terraform の実行に関する情報を表示できます。表示できる項目には実行履歴、ステータス、各ステージのログ出力 (Plan、Apply、コスト見積もり、ポリシー チェック) などがあります。
Plan - Read 権限に加えてワークスペースの Terraform Plan を実行できます。Plan & Apply という実行をした場合、Plan 完了後(またはコスト見積もり後)に Apply 権限を持つユーザの承認待ち状態となって中断されます。
Apply - Plan 権限に加えてワークスペースの Terraform Apply を実行できます。Plan 権限を持つユーザが実行して承認待ちとなっている実行の承認も可能です。
変数アクセス (Variable access)
ワークスペースにある変数に対する権限です。 変数には「Terraform 変数」と「環境変数」の 2 種類ありますが、ワークスペース権限でどちらか一方を対象にすることはできません。
No access - ワークスペースの変数にはアクセスできません。メニューにも表示されません。
Read - ワークスペースの変数の値を表示できます。ただし
sensitive
としてマークされた変数は表示できません。Read and write - Read 権限に加えてワークスペースの変数の追加と削除、値の編集ができます。ただし
sensitive
としてマークされた変数は表示できず、上書きしかできません。
ステート アクセス (Stage access)
ワークスペースには Terraform のステート ファイル (ローカル環境では terraform.tfstate
という名前のファイル) が格納されています。
No access - ワークスペースからステート ファイルにはアクセスできません。
Read outputs only - 明示的に
output
ブロックで指定されたステート ファイルの値にアクセスできます。ステート ファイル全体は公開したくないけど一部の値は共有したい場合に選択します。また、State Version Outputs API エンドポイントにアクセスするためにも必要な権限です。Read - Read outputs only 権限に加えてワークスペースのステート ファイル全体を読み取ることができます。ステート ファイルには機密情報が含まれていることがあるため、この権限を付与する場合は十分に注意してください。
Read and write - Read 権限に加えてワークスペースのステート ファイルを直接編集(実際はステートの新しいバージョンを作成)できます。ステート ファイルの編集とは
terraform import
やterraform taint
、terraform state サブコマンド
などのコマンドをワークスペースに対して実行することです。また、実行モード (Execution Mode) が「Local」に設定されているワークスペースに対してローカル実行する場合は Read and write 権限が必要です。
Sentinel モックのダウンロード (Download Sentinel mocks)
Sentinel は HCP Terraform でポリシー管理する際に利用する言語です。 Sentinel ポリシーを展開する前にポリシーの内容をテストすることが望ましく、HCP Terraform では Sentinel で利用できるモックデータを出力する機能が提供されています。
「Sentinel モックのダウンロード」権限を付与されたユーザはワークスペースの Plan 実行結果をモックデータとしてダウンロードできます。このモックデータには機密情報が含まれてる場合があるので、この権限を付与する場合は十分に注意してください。
ワークスペース実行タスクの管理 (Manage Workspace Run Tasks)
HCP Terraform は実行タスク (Run Tasks) という機能によって Plan や Apply の前後に任意のアクションを実行できます。 実行タスクは Organization 全体に適用することも、ワークスペース個別に適用することもできます。
「ワークスペース実行タスクの管理」権限が付与されたユーザはワークスペースに実行タスクを関連付けたり、関連付けを解除したりできます。 実行タスク自体は Organization レベルで作成されるため、この権限では実行タスクを作成できないことに注意してください。
ワークスペースのロック/ロック解除 (Lock/unlock workspace)
HCP Terraform ではワークスペースをロックして Apply の実行を阻止できます。
「ワークスペースのロック/ロック解除」権限が付与されたユーザはワークスペースを手動でロックして一時的に実行を防止できます。 実行モード (Execution Mode) が「Local」に設定されているワークスペースに対してローカル実行する場合はこの権限が必要です。
注意点としては、この権限を持っていても他のユーザがロックしたワークスペースはロック解除できないようです。 強制的にロック解除するためにはワークスペース権限とは異なる「ワークスペースの管理者権限」が必要です。
固定権限セット
固定権限セットという組み込みの権限設定があります。 権限設定画面の左側 [Permission groups] に権限セットが表示されていて、選択した権限セットに連動して各権限が割り当てられます。
権限セット | Read | Plan | Write | Admin |
---|---|---|---|---|
実行アクセス (Run access) | Read | Plan | Apply | Apply |
変数アクセス (Variable access) | Read | Read | Read and write | Read and write |
ステート アクセス (State access) | Read | Read | Read and write | Read and write |
Sentinel モックのダウンロード (Download Sentinel mocks) | off | off | on | on |
ワークスペース実行タスクの管理 (Manage Workspace Run Tasks) | off | off | off | on |
ワークスペースのロック/ロック解除 (Lock/unlock workspace) | off | off | on | on |
通常はこれらの権限セットでも十分かと思いますが、個別の要件が出てくることもありますよね。 例えば「変数を設定して Apply までして欲しいけどステート ファイルは見られたくないチーム」に対しては権限をカスタムして割り当てるのが良いのではないでしょうか。
まとめ
今回は HCP Terraform のワークスペース権限を整理しました。 ワークスペースの Terraform Plan/Apply の実行やステート ファイルのアクセスなど、必要な権限管理は提供されています。 また今回は紹介していませんが、HCP Terraform ではワークスペースだけでなく「プロジェクト」という単位でも権限管理が可能となっています。
HCP Terraform の権限管理は有料プランでしか使えない機能ですが、HCP Terraform の利用規模が増えていくと細かい権限設定も必要になってきます。 無償プランは 500 リソースまでしか管理できませんので、HCP Terraform の利用が拡大していく場合は Standard プラン、または便利な機能が備わった Plus プランをご検討ください。
【PR】
私達ACS事業部はAzure・AKSなどのクラウドネイティブ技術を活用した内製化のご支援をしております。
一緒に働いていただける仲間も募集中です!
まだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。
我々の事業部のCultureDeckはコチラ。