Terraform Cloud の RBAC は、Teams を軸に「組織」「プロジェクト」「ワークスペース」の3階層で成立します。どの層にどの権限を与えるか、そして権限がどのように合成(最終的に有効化)されるかを理解することが、運用の安定性と試験合格の双方に直結します。
本稿では、実務で踏む落とし穴(プロジェクト配下の新規ワークスペースへの継承や、Owners の強大権限、Plan権限の扱いなど)を具体的に解説しつつ、Terraform Cloud Proレベルの出題に対応できる要点を体系化します。
Teams はユーザの集合であり、Terraform Cloud のRBAC適用単位です。Teamsに対して、組織レベル権限(例: ポリシー管理、VCSプロバイダ管理)と、プロジェクト/ワークスペースへのアクセス(例: Admin/Write/Plan/Read)を付与します。
最終的な有効権限は、同一チームに対して設定された複数のアクセス(プロジェクト経由、ワークスペース個別付与)が存在する場合、より強い権限が優先されます(最大権限が有効)。一方、組織レベル権限はワークスペースの実行権限を直接は付与しません(例: manage_workspaces は作成/削除を許可しますが、そのチームに自動でWrite権限は付与されない)。
tfe プロバイダ設定のスケルトン(後続セクションの例で詳細付与)
terraform {
required_providers {
tfe = {
source = "hashicorp/tfe"
version = ">= 0.50"
}
}
}
provider "tfe" {
hostname = "app.terraform.io"
token = var.tfc_token
}
variable "org" { type = string }
Terraform Cloud のアクセスは「付与先スコープ」と「権限の強さ」の2軸で理解します。まず、プロジェクトアクセスは配下の全ワークスペースに波及し、将来作られるワークスペースにも自動適用されます。次に、個別のワークスペースアクセスは、そのワークスペースだけに対して明示的に権限を設定します。
優先度はシンプルで、同じチームに対して複数経路で権限が与えられる場合、より強い権限が最終的に有効化されます。たとえば、プロジェクトで Read、個別ワークスペースで Write を与えると、有効権限は Write です。なお、組織レベル権限(例: manage_workspaces)は、ワークスペースの実行権限(Applyなど)を直接は与えません。
プロジェクト配下の作成時に自動で継承されるアクセスの確認(擬似フロー)
# プロジェクトTeamAccess: Team X -> Project A (Read)
# 既存WS: A1, A2 にRead適用
# 新規WS: A3をProject Aに作成 -> 自動でRead適用
# 例外: A2のみ Team X に対し Write を個別付与 -> A2の有効権限はWrite(最大権限が有効)
Terraform Cloud では、Workspace/Project に対する代表的な権限セットとして Admin / Write / Read(および一部環境では Plan)が用意されています。以下は実務・試験で問われやすい操作と権限対応の要点です。
Plan は適用不可で、計画実行(特にスペキュレイティブプランの実行・閲覧)に限定されます。Write は実行キュー投入と適用を許可し、Admin はワークスペース設定の変更や削除など運用上の危険操作も可能です。Read は状態やログの参照のみに限定されます。
| 操作/能力 | Admin | Write | Plan(一部環境) |
|---|---|---|---|
| Runのキュー投入 | 可 | 可 | 可(適用不可) |
| Applyの実行 | 可 | 可 | 不可 |
| State/ログの閲覧 | 可 | 可 | 可 |
| 変数の作成・更新 | 可 | 可 | 不可 |
| ワークスペース設定変更/削除 | 可 | 不可 | 不可 |
| ロック/アンロック | 可 | 不可 | 不可 |
最小権限の観点での付与例(擬似ポリシー)
# 本テーブルに基づく運用方針例
# - CI/CD用チーム: Project = Write, 本番WSのみ個別で Plan(適用させない)
# - 管理者チーム: 限定プロジェクトに Admin
# - 監査チーム: Read のみ
チームトークンはAPI経由の自動化で利用する共有トークンです。スコープは当該チームに付与された組織/プロジェクト/ワークスペース権限に厳密に制限され、ユーザトークンより運用リスクを抑えられます。
実務では、プロジェクトに Write を付与したチームのトークンをCIに登録し、個別に Admin が必要な一部ワークスペースのみ別チームか個別付与で扱うのが安全です。トークンは定期ローテーション・利用権限の棚卸しと監査ログの確認を組み合わせて運用します。
tfe リソースによる Teams/RBAC の宣言例(HCL)
resource "tfe_team" "ci" {
name = "ci-writers"
organization = var.org
# 必要な場合のみ組織レベル権限を限定付与
organization_access {
manage_workspaces = true
manage_variable_sets = true
}
}
resource "tfe_project" "app" {
name = "app-project"
organization = var.org
}
resource "tfe_workspace" "app_dev" {
name = "app-dev"
organization = var.org
project_id = tfe_project.app.id
}
# プロジェクト全体に Write を付与(新規WSにも継承)
resource "tfe_team_project_access" "ci_app" {
team_id = tfe_team.ci.id
project_id = tfe_project.app.id
access = "write" # admin|write|read|plan(環境により)
}
# 例外: 特定WSのみ Plan に下げる(または上げる)
resource "tfe_team_access" "ci_app_dev_override" {
team_id = tfe_team.ci.id
workspace_id = tfe_workspace.app_dev.id
access = "plan"
}
# チームトークン(CIに登録)
resource "tfe_team_token" "ci_token" {
team_id = tfe_team.ci.id
}
output "ci_token" {
value = tfe_team_token.ci_token.token
sensitive = true
description = "登録後は即時にマスク/ローテーション戦略を適用"
}
ビジネスプラン相当の機能では、SAML SSO と SCIM によりIdPグループを Terraform Cloud の Teams にマッピングできます。入退社や組織変更のたびに手作業でチームメンバーを更新する負担を減らし、監査証跡も明確になります。
Owners の日常利用は避け、IdPグループをもとに「環境別(dev/stg/prod)」「職務別(運用/監査/プラットフォーム)」「プロダクト別」の3軸でチームを設計し、プロジェクトアクセスを既定に、ワークスペース個別で最小限上書きするパターンが扱いやすいです。
チームメンバ管理のIaC化(SCIM未利用時の例)
resource "tfe_team" "ops" {
name = "ops-admins"
organization = var.org
}
# メンバ明示(SCIM未導入時の暫定)
resource "tfe_team_members" "ops_members" {
team_id = tfe_team.ops.id
usernames = [
"[email protected]",
"[email protected]"
]
}
試験では、権限の合成ロジック(最大権限が有効)、Owners と通常チームの違い、組織レベル権限がワークスペース実行権限を直接付与しない点、Plan 権限の性質(適用不可)あたりが頻出です。プロジェクトアクセスの継承と、個別ワークスペースでの上書きも押さえてください。
実務では、Admin の広範権限、Owners 常用、ユーザトークンのCI流用、プロジェクトアクセスの無差別Admin化、チームトークンの未ローテーションが典型的な事故要因です。変数セットやポリシーセットの管理も組織レベル権限が必要になる点を忘れがちです。
変数セット管理と付与の例(組織レベル権限が必要)
resource "tfe_variable_set" "shared" {
name = "shared-networking"
organization = var.org
variable {
key = "TF_VAR_region"
value = "us-east-1"
category = "env"
description = "標準リージョン"
sensitive = false
}
}
resource "tfe_variable_set_attachment" "attach_project" {
variable_set_id = tfe_variable_set.shared.id
project_id = tfe_project.app.id
}
# 変数セットのCRUDには manage_variable_sets 等の組織権限が関与
Pro
問題 1
Team A は Project X に Read を付与されています。さらに、Workspace W(Project X 配下)に対して Team A に Write を個別付与しました。このとき、Team A の Workspace W に対する有効権限はどれですか?
正解: A
同一チームに対し複数経路(プロジェクト/ワークスペース)で権限が与えられる場合、より強い権限が有効化されます。よって個別付与の Write が有効権限になります。
Owners に属していれば、すべてのワークスペースで自動的に Admin になりますか?
Owners は組織全体の管理権限を持ちますが、ワークスペースの実行権限は通常のRBACに従います。Owners であっても、ワークスペースへのアクセスはプロジェクト/ワークスペース単位での付与に基づきます。
Plan 権限は常に使用できますか?
Plan 権限は環境やプランにより表示/利用が制限される場合があります。利用可能な場合でも適用は不可で、計画(特にスペキュレイティブプラン)の実行・閲覧に限定されます。
チームトークンで組織設定(VCSプロバイダやポリシーセット)を変更できますか?
当該チームに必要な組織レベル権限(例: manage_vcs, manage_policies, manage_variable_sets など)が付与されている場合に限り可能です。ワークスペース実行権限(Write など)とは別軸で評価されます。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Terraform HCL 構文の基礎:Block / Attribute / Expression を正しく使い分ける
Terraform Associate で頻出の HCL 構文を、ブロック・属性・式の3視点で整理。実務で迷いがちな書き...
Terraform Authoring & Ops Pro: 上位資格の範囲と対策
上位レベルを想定したTerraformの設計・運用ドメインを整理し、実務で通用する対策を提示。モジュール設計、ステート運...
Terraform Providers の基本: プラグイン型アーキテクチャを正しく使いこなす
Associate レベルで押さえるべき Provider の基礎、インストール、バージョニング、認証、エイリアス運用を...
Terraform Resourceブロック徹底ガイド: 最小単位のリソース定義
Associateレベルで押さえるべきResourceブロックの構造、依存関係、メタ引数、ライフサイクル制御を実務目線で...
Terraform Data Source徹底理解:既存リソースの参照で壊さず足す
Terraform Associate向けに、Data Sourceを用いた既存リソース参照の基本、選択基準、評価順序、...