Least privilege for Terraform service accounts - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
We want to understand how the number of permission checks and API calls grows when Terraform uses service accounts with least privilege.
How does limiting permissions affect the number of operations Terraform performs?
Analyze the time complexity of Terraform applying permissions with least privilege.
resource "google_project_iam_member" "terraform_sa_role" {
for_each = toset(var.roles)
project = var.project_id
role = each.value
member = "serviceAccount:${var.terraform_sa_email}"
}
This code assigns specific roles to the Terraform service account for each role it needs.
Identify the API calls, resource provisioning, data transfers that repeat.
- Primary operation: Assigning IAM roles to the service account for each role.
- How many times: Once per role in the input list.
Each role requires a separate permission assignment, so the number of API calls grows directly with the number of roles.
| Input Size (n) | Approx. Api Calls/Operations |
|---|---|
| 10 | 10 |
| 100 | 100 |
| 1000 | 1000 |
Pattern observation: The operations increase one-to-one with the number of roles.
Time Complexity: O(n)
This means the number of permission assignments grows directly with the number of roles assigned.
[X] Wrong: "Assigning one broad role once is faster and simpler than many specific roles."
[OK] Correct: While fewer assignments happen, broad roles can cause security risks and may trigger more permission checks during operations, increasing hidden costs.
Understanding how permission assignments scale helps you design secure and efficient infrastructure automation, a valuable skill in cloud roles.
"What if we grouped resources to share roles instead of assigning per resource? How would the time complexity change?"
Practice
Solution
Step 1: Understand least privilege concept
Least privilege means giving only the minimum permissions needed to perform a task.Step 2: Apply to Terraform service accounts
Terraform service accounts should have only the permissions required to manage infrastructure, nothing more.Final Answer:
Give only the permissions Terraform needs to do its job -> Option AQuick Check:
Least privilege = minimal needed permissions [OK]
- Giving Terraform full admin rights unnecessarily
- Sharing credentials widely
- Setting time-based access without need
Solution
Step 1: Identify the role for compute instance management
The role "roles/compute.admin" allows managing compute instances specifically.Step 2: Match the role to the service account in Terraform
The snippet assigns "roles/compute.admin" to the service account, limiting permissions to compute resources only.Final Answer:
The snippet assigning roles/compute.admin to the service account -> Option AQuick Check:
Assign specific roles, not broad ones [OK]
- Using broad roles like editor or admin unnecessarily
- Assigning unrelated roles like storage.admin
- Using viewer role which is read-only
resource "google_project_iam_member" "sa_role" {
project = "my-project"
role = "roles/storage.objectViewer"
member = "serviceAccount:terraform-sa@my-project.iam.gserviceaccount.com"
}Solution
Step 1: Understand the role assigned
The role "roles/storage.objectViewer" grants read-only access to storage objects.Step 2: Determine permission scope
This role does not allow writing or bucket management, only viewing objects.Final Answer:
Read-only access to storage objects only -> Option DQuick Check:
roles/storage.objectViewer = read-only object access [OK]
- Confusing viewer with admin or editor roles
- Assuming bucket write permissions
- Thinking full storage access is granted
resource "google_project_iam_member" "sa_role" {
project = var.project_id
role = "roles/compute.viewer"
member = "serviceAccount:${var.service_account_email}"
member = "serviceAccount:extra@domain.com"
}
What is the problem?Solution
Step 1: Check Terraform resource syntax
Terraform resource blocks cannot have duplicate keys; 'member' is repeated twice here.Step 2: Understand correct way to assign multiple members
To assign multiple members, use 'google_project_iam_binding' or multiple resources, not duplicate keys.Final Answer:
Duplicate 'member' keys cause a syntax error -> Option BQuick Check:
Duplicate keys in resource block = syntax error [OK]
- Using duplicate keys instead of lists or multiple resources
- Assuming role name is invalid without checking
- Ignoring variable definitions
Solution
Step 1: Identify the role for network management
The role 'roles/compute.networkAdmin' grants permissions to manage network resources only.Step 2: Apply least privilege principle
Assigning only this role limits the service account to network tasks, avoiding broad permissions.Step 3: Avoid broad or no permissions
Roles like 'editor' or 'owner' are too broad; no roles means no access.Final Answer:
Assign the role 'roles/compute.networkAdmin' to the service account only -> Option CQuick Check:
Least privilege = specific role only [OK]
- Using broad roles like editor or owner
- Not assigning any role and expecting access
- Assigning multiple unrelated roles
