Terraform cloud free-tier (無料版)にはTeamという概念がありません。よって複数のメンバーで使用するときにアクセス制御をつける事ができません。
その問題を解決するために、Terraform cloud及びEnterpriseにはRoles / Team managermentという機能が準備されています。 この機能は以下のTerraform offeringで利用可能です。
- Terraform cloud team
- Terraform cloud team & governance
- Terraform Enterprise
Teamに対する権限はOrganizationレベルとWorkspaceレベルの2段階で設定できます。
ここでのエクササイズでは、organization及びWorkspaceに対してTeamを作成し、アクセス権限を付与してみます。
まず、Terraform cloudへアクセスし、OrganizationのSetting >> Teamsへ行きます。
Teamには以下のような3つの権限をつけることが出来ます。ここでの権限はOrganizationレベルの権限であり、Workspaceレベルの権限ではありません。
- Managed Policies
- Manage workspaces
- Manage VCS setting
Create a New Teamから以下の3つのチームを1つづつ作成します。
- admin
- adminには3つ全ての権限をつけて下さい。
- developers
- 権限は何もつけなくてよいです。(Organizationレベルの権限は付与しない)
- managers
- 権限は何もつけなくてよいです。(Organizationレベルの権限は付与しない)
次にWorkspaceレベルのTeamの作成を行います。
Workspaceを開き、Settings > Team Accessへナビゲートしてください。
ここで先程作成したTeamに、以下のようにWorkspaceレベルのPermissionsを付与してください。
- admin
- admin
- developers
- write
- managers
- read
以下のように表示されればOKです。
このPermissionについては詳細はドキュメントを参照いただければと思います。簡単にまとめますと:
- Read
- Stateファイルの参照
- Run履歴の参照
- セキュア変数の参照
- Stateファイルに変更の加わる処理はできない
- Plan
- Read権限の全て
- Runの作成(Planの実行可、Applyの実行不可)
- Write
- Plan権限の全て
- Stateファイルへの変更(Applyの実行)
- Run実行の承認
- セキュア変数の変更
- WorkspaceのLock/Unlock
- Admin
- Write権限の全て
- Workspaceの削除
- Workspaceへのメンバーの追加・変更
- Workspace設定(VCSなど)の変更
となります。
Teamが設定されたら、admins権限のあるユーザーはチームメンバーをTeamにアサインします。
既にOrganizationに追加されているユーザーであれば、organizationレベルのSettings >> Teams からTeamを選択し、Add a New Team Memberでユーザーを追加します。
これからユーザーを追加する場合は、organizationレベルのSettings >> UsersのInvite a userボタンからユーザーのTeamを選択してインバイトします。
Terraform cloud free-tierではWorkspaceへのアクセスがあれば誰でもStateファイルへ変更(Applyの実効)が可能ですが、Terraform cloud paid及びEnterpriseでは、様々な処理に対しアクセス制限を付けることができます。複数のチームメンバーに対し、それぞれ役割に応じた権限を割り当てることで、ルールに応じたワークフローを実現できるのではないでしょうか。
Teamとアクセス制限を駆使してTerraform Cloud/EnterpriseではRBAC(Role based access control)を実現します。