RBAC in Terraform Cloud is built around Teams across three tiers: organization, project, and workspace. Understanding which permissions belong on which tier — and how multiple grants combine into the effective permission — is essential for both stable operations and passing the exam.
This article walks through the common pitfalls — inheritance into new workspaces under a project, the sweeping power of Owners, the nuances of the Plan permission — and organizes the key points you need for Terraform Cloud Pro-level exam questions.
Teams are groups of users and the unit on which Terraform Cloud applies RBAC. A Team can be granted organization-level permissions (e.g. policy management, VCS provider management) as well as project- or workspace-level access (e.g. Admin / Write / Plan / Read).
When a team has multiple grants on the same resource (via project access and an individual workspace grant), the stronger permission wins — the effective permission is the maximum of all grants. Organization-level permissions, on the other hand, do not directly grant workspace execution rights: manage_workspaces allows create/delete, but it does NOT automatically give the team Write on those workspaces.
Skeleton tfe provider configuration (later sections add the detailed grants)
terraform {
required_providers {
tfe = {
source = "hashicorp/tfe"
version = ">= 0.50"
}
}
}
provider "tfe" {
hostname = "app.terraform.io"
token = var.tfc_token
}
variable "org" { type = string }
Think about Terraform Cloud access along two axes: the scope of the grant and the strength of the permission. Project access propagates to every workspace under the project, including ones created later. Workspace-level access, in contrast, sets an explicit permission on that single workspace only.
Precedence is simple: when a team has multiple grants by different paths, the stronger permission wins. For example, Read on a project plus Write on a specific workspace gives an effective permission of Write on that workspace. Organization-level permissions such as manage_workspaces do not directly grant workspace execution rights (like Apply).
How auto-inheritance works for workspaces created under a project (pseudo-flow)
# Project TeamAccess: Team X -> Project A (Read)
# Existing WS: A1, A2 receive Read
# New WS: A3 created under Project A -> automatically receives Read
# Exception: A2 alone gets Write granted individually to Team X -> effective permission on A2 is Write (max wins)
Terraform Cloud offers Admin / Write / Read as the main permission sets for Workspace/Project access (plus Plan in some environments). The summary below covers the operation-to-permission mapping you are most likely to be tested on.
Plan cannot apply changes; it is limited to running and viewing plans (especially speculative plans). Write allows queuing runs and applying. Admin extends to dangerous operations such as workspace settings changes and deletion. Read is limited to viewing state and logs.
| Operation / Capability | Admin | Write | Plan (some environments) |
|---|---|---|---|
| Queue a run | Yes | Yes | Yes (no apply) |
| Execute Apply | Yes | Yes | No |
| View state / logs | Yes | Yes | Yes |
| Create / update variables | Yes | Yes | No |
| Change / delete workspace settings | Yes | No | No |
| Lock / unlock | Yes | No | No |
Least-privilege grant examples (pseudo policy)
# Operating policy derived from the table above
# - CI/CD team: Write on the project, Plan-only on production workspaces individually (cannot apply)
# - Admin team: Admin on a limited set of projects
# - Audit team: Read only
A team token is a shared token used for automation via the API. Its scope is strictly limited to the organization-, project-, and workspace-level permissions granted to that team, which reduces operational risk compared with user tokens.
A safe pattern in production is to register the token of a team with Write on a project to CI, and handle the few workspaces that need Admin through a separate team or individual grants. Operate the token with periodic rotation, regular review of granted permissions, and audit-log checks.
Declaring Teams and RBAC with tfe resources (HCL example)
resource "tfe_team" "ci" {
name = "ci-writers"
organization = var.org
# Grant org-level permissions only when needed, and keep them narrow
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
}
# Grant Write at the project level (inherited by new workspaces)
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 (depending on env)
}
# Exception: downgrade (or upgrade) a specific workspace to Plan
resource "tfe_team_access" "ci_app_dev_override" {
team_id = tfe_team.ci.id
workspace_id = tfe_workspace.app_dev.id
access = "plan"
}
# Team token (registered in 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 = "Mask immediately after registration and apply a rotation strategy"
}
On business-tier features, SAML SSO and SCIM let you map IdP groups to Terraform Cloud Teams. This removes the burden of manually updating team membership for every joiner / leaver / org change and produces a much clearer audit trail.
Avoid using Owners day to day. Design teams along three axes from IdP groups: environment (dev / stg / prod), function (operations / audit / platform), and product. Use project access as the default and override at the workspace level only when necessary.
Managing team membership as code (example when SCIM is not in use)
resource "tfe_team" "ops" {
name = "ops-admins"
organization = var.org
}
# Explicit member list (interim approach when SCIM is not yet adopted)
resource "tfe_team_members" "ops_members" {
team_id = tfe_team.ops.id
usernames = [
"[email protected]",
"[email protected]"
]
}
Exam questions frequently focus on the permission-combination logic (max wins), the difference between Owners and normal teams, the fact that organization-level permissions do not directly grant workspace execution rights, and the nature of the Plan permission (no apply). Make sure you also have project-access inheritance and per-workspace overrides down cold.
In production, the typical incident causes are: over-broad Admin grants, everyday use of Owners, reusing user tokens in CI, indiscriminately granting Admin via project access, and never rotating team tokens. It is also easy to forget that managing variable sets and policy sets requires the matching org-level permissions.
Managing and attaching a variable set (requires org-level permissions)
resource "tfe_variable_set" "shared" {
name = "shared-networking"
organization = var.org
variable {
key = "TF_VAR_region"
value = "us-east-1"
category = "env"
description = "Default region"
sensitive = false
}
}
resource "tfe_variable_set_attachment" "attach_project" {
variable_set_id = tfe_variable_set.shared.id
project_id = tfe_project.app.id
}
# CRUD on variable sets requires org-level permissions such as manage_variable_sets
Pro
問題 1
Team A has been granted Read on Project X. Additionally, Team A has been granted Write individually on Workspace W (which is under Project X). What is Team A's effective permission on Workspace W?
正解: A
When a team has multiple grants on the same resource via different paths (project / workspace), the stronger permission wins. The individually granted Write therefore becomes the effective permission.
If I belong to the Owners team, am I automatically an Admin on every workspace?
Owners hold organization-wide administrative privileges, but workspace execution rights still follow normal RBAC. Even Owners need explicit project- or workspace-level access grants to operate on a workspace.
Is the Plan permission always available?
Visibility and availability of the Plan permission can be restricted depending on your environment or pricing plan. Even when available, it cannot apply changes — it is limited to running and viewing plans (especially speculative plans).
Can a team token modify organization-level settings such as VCS providers or policy sets?
Only if the team has been granted the required organization-level permissions (e.g. manage_vcs, manage_policies, manage_variable_sets). These are evaluated independently from workspace execution rights such as Write.
Practice with certification-focused question sets
無料で問題を解いてみるNicheeLab Editorial Team
NicheeLab editorial team focused on data engineering and cloud certification learning. Content is structured around practical study needs and official exam domains.
HCL Syntax: Terraform's Configuration Language (2026)
HCL2 fundamentals for Terraform — blocks, attributes, expres...
Terraform Authoring & Operations Pro: Complete Guide (2026)
Tactics for the Terraform Pro exam — module authoring, works...
Terraform Providers: Plugin Management Fundamentals (2026)
Provider mechanics — required_providers, versions, mirrors, ...
Terraform Resource Blocks: Declarative Infra Units (2026)
Resource block fundamentals — addresses, references, common ...
Terraform Data Sources: Read-Only External Data (2026)
Data source basics — declaration, refresh behavior, dependen...