Skip to content

IAM policy concepts

An IAM policy is a container with three parts:

ComponentDescription
Permission rulesWhich API resource types and actions are allowed (for example, cloud_vpc + read, list)
BindingsWhich principals (users, service accounts, OIDC clients) receive the policy
Access conditions (optional)IP and time-of-day restrictions on when the policy applies

Use IAM policies when you need per-project, per-team, or per-environment access — for example, giving the DBA team read access to DBaaS clusters only in the production project, while developers get broader access in staging.

IAM policies work alongside organisation roles, not instead of them.

How effective permissions work

When a principal calls an API with a project context set:

  1. The platform checks organisation role rules (org-wide).
  2. It also checks IAM policy bindings on the active project.
  3. If either source grants the required permission on the resource (and resource identity, if scoped), access is allowed.

Important behaviours:

  • IAM policies add access within a project; they do not remove organisation role permissions.
  • Permission rules can target all instances of a resource type (empty resourceIdentities) or specific resources (for example, one KMS key identity or one secret path).
  • For Secrets Manager, the resource identity is the secret path (for example, /app/prod/db/password). For most other resources, the identity is the resource’s platform identity or slug.
  • Escalation prevention: When adding a permission rule, the caller must already hold the permissions being granted. You cannot delegate access you do not have.

Policy object reference

FieldCustomer meaning
identity / slugAPI identifiers
systemBuilt-in platform policy
isReadOnlyCannot modify (system or inherited replica)
replicateToChildrenSource policy propagates to descendants
conditionalsOptional IP/time access conditions
rulesPermission rules
bindingsPrincipal attachments
sourceIamPolicyPresent on replicas when loaded (points to parent source)
systemisReadOnlyreplicateToChildrenType
truetruefalseBuilt-in default
falsefalsetrueEditable source (replicates downstream)
falsetruefalseInherited replica

Required headers

HeaderIAM policy APIsResource APIs
AuthorizationRequiredRequired
X-Organisation-IdentityRequiredRequired
X-Project-IdentityRequiredOptional (scopes to project resources)

Project resolution order on resource APIs: OIDC claim projectX-Project-Identity?project= query parameter.

Related documentation