Access control (IAM vs ACLs) in GCP - Performance Comparison
Start learning this pattern below
Jump into concepts and practice - no test required
When managing access in cloud systems, it is important to understand how the time to check permissions grows as more users or resources are added.
We want to know how the system handles many access checks efficiently.
Analyze the time complexity of checking access permissions using IAM roles versus ACLs.
// Pseudocode for access check
function checkAccess(user, resource) {
// IAM check
roles = getUserRoles(user)
permissions = getPermissionsFromRoles(roles, resource)
if (permissions.allow) return true
// ACL check
aclEntries = getAclEntries(resource)
for (entry in aclEntries) {
if (entry.user == user && entry.permission == 'allow') {
return true
}
}
return false
}
This sequence checks if a user has access to a resource first by IAM roles, then by ACL entries.
Identify the API calls, resource provisioning, data transfers that repeat.
- Primary operation: Access permission checks per user-resource pair.
- How many times: Once per access request, repeated for many users or resources.
- Dominant operation: Iterating over ACL entries for the resource.
As the number of users or resources grows, IAM checks stay efficient because roles are limited, but ACL checks grow with the number of entries.
| Input Size (n) | Approx. Api Calls/Operations |
|---|---|
| 10 | IAM: ~10 role lookups, ACL: ~10 entry checks |
| 100 | IAM: ~10 role lookups, ACL: ~100 entry checks |
| 1000 | IAM: ~10 role lookups, ACL: ~1000 entry checks |
Pattern observation: IAM role checks remain small due to limited roles; ACL checks grow linearly with the number of entries, which can be large.
Time Complexity: O(n)
This means the time to check access grows linearly with the number of users or ACL entries involved.
[X] Wrong: "Access checks always take the same time regardless of the number of users or entries."
[OK] Correct: ACL checks require scanning entries, so more entries mean more time. IAM roles limit this growth, making checks faster.
Understanding how access control scales helps you design secure and efficient cloud systems, a valuable skill in real-world projects.
"What if we replaced ACLs with a database index for entries? How would the time complexity change?"
Practice
Solution
Step 1: Understand IAM scope
IAM controls access broadly by assigning roles to users or groups at resource levels like projects or services.Step 2: Understand ACL scope
ACLs control access more narrowly, typically at the object or bucket level in storage services.Final Answer:
IAM manages access at resource levels using roles, while ACLs manage access at object or bucket levels. -> Option DQuick Check:
IAM = broad roles, ACLs = fine-grained object permissions [OK]
- Confusing IAM with network controls
- Thinking ACLs control passwords
- Assuming IAM and ACLs are identical
Solution
Step 1: Identify IAM command syntax
The correct gcloud command to grant IAM roles uses 'add-iam-policy-binding' with member and role flags.Step 2: Verify role and member format
The role 'roles/storage.objectViewer' and member format 'user:email@example.com' are correct for granting read access to storage objects.Final Answer:
Use the command: gcloud projects add-iam-policy-binding my-project --member='user:email@example.com' --role='roles/storage.objectViewer' -> Option CQuick Check:
IAM role grant uses gcloud add-iam-policy-binding [OK]
- Confusing ACL changes with IAM commands
- Editing passwords instead of roles
- Using firewall rules for access control
{
"bindings": [
{
"role": "roles/storage.objectAdmin",
"members": ["user:alice@example.com"]
}
]
}Solution
Step 1: Identify the role assigned
The role 'roles/storage.objectAdmin' allows full control over objects in the bucket, including create, delete, and update.Step 2: Confirm member access
The member 'user:alice@example.com' is assigned this role, so Alice has these permissions.Final Answer:
Alice can create, delete, and update objects in the bucket. -> Option BQuick Check:
roles/storage.objectAdmin = full object control [OK]
- Confusing objectAdmin with read-only roles
- Assuming no access without explicit bucket ACL
- Mixing IAM roles with IAM policy management
Solution
Step 1: Understand uniform bucket-level access
When uniform bucket-level access is enabled, ACLs are disabled and only IAM controls access.Step 2: Check ACL effect
Adding users to ACLs has no effect if uniform bucket-level access is on, so the user cannot access objects despite ACL changes.Final Answer:
The bucket has uniform bucket-level access enabled, which disables ACLs. -> Option AQuick Check:
Uniform bucket-level access disables ACLs [OK]
- Assuming ACLs always work regardless of bucket settings
- Blaming user typos without verification
- Thinking user restart affects cloud permissions
Solution
Step 1: Understand access scope needs
The third-party service needs access only to specific objects, not the whole project.Step 2: Choose fine-grained control method
ACLs allow granting permissions on specific objects or buckets, ideal for limited access.Step 3: Evaluate other options
IAM roles at project level are too broad; storage.admin is too powerful; firewall rules do not control storage access.Final Answer:
Add the service account to the bucket's ACL with READER permission on specific objects. -> Option AQuick Check:
Use ACLs for fine-grained object access [OK]
- Granting overly broad IAM roles
- Confusing firewall rules with access control
- Using storage.admin role unnecessarily
