Appendix B
IAM Role Reference
Scope. Every predefined IAM role this book grants, grouped by function, with the sections that grant it, plus a catalog of recommended custom roles. It is an index into the book, not a survey of the role catalog. Prerequisites. Chapter 3 for the IAM model, role types, and custom role mechanics. Verified against. Google Cloud console and API surface as of 2026-09, Cloud SDK 583.0.0; every role ID verified against the predefined role reference and every custom-role permission against its service reference page; see sources at end.
Google publishes over nineteen hundred predefined roles. This book grants 131 of them, and those are what follows — each with a short statement of what it grants and the sections that use it, so a role encountered in a policy can be traced back to the chapter that explains why it is there. Roles absent from this appendix are absent from the book; that is not a judgment about them.
Every identifier here is verified against the role reference. §3.9 owns predefined roles as a concept, §3.12 owns custom roles, and §3.11 owns the least-privilege method these tables serve — this appendix repeats none of it.
B.1 Administrative Roles §
Roles that administer the hierarchy itself — the organization node, folders, projects, billing, and IAM policy. These are the grants that create and destroy the structures every other role operates inside, so they belong to named groups at the organization and never to a workload identity.
The basic roles are the exception this section has to name and not use. §3.10 covers all six — the legacy trio and the three newer ones whose launch stage it records — and the reason none of them is granted anywhere in this book. They are omitted from the table below because the table is a list of grants and they are never granted; §33.4 carries the query that finds them in an existing estate.
| Role | What it grants | Cited in |
|---|---|---|
roles/accessapproval.approver | Approve or dismiss Access Approval requests | §3.29 |
roles/accessapproval.configEditor | Configure Access Approval settings and notifications | §3.29 |
roles/billing.admin | Full control of a billing account | §2.5, §3.23 |
roles/billing.costsManager | Manage budgets and cost views, not payment | §2.5 |
roles/billing.creator | Create billing accounts | §2.3, §2.5, §2.28 |
roles/billing.projectManager | Attach and detach projects from a billing account | §2.5 |
roles/billing.user | Link a project to a billing account | §2.5, §2.9, §2.26 … |
roles/billing.viewer | Read billing account data and budgets | §2.5, §3.4 |
roles/cloudasset.viewer | Read and export the asset inventory | §3.37 |
roles/iam.denyAdmin | Create and manage IAM deny policies | §3.23, §3.37 |
roles/iam.securityAdmin | Read and set IAM policy on a resource | §3.23, §3.37 |
roles/iam.serviceAccountAdmin | Create, delete, and manage service accounts | §3.23 |
roles/orgpolicy.policyAdmin | Set organization policies; the baseline is not delegated | §2.30, §2.31, §2.33 … |
roles/orgpolicy.policyViewer | Read organization policies without setting them | §3.37 |
roles/recommender.iamViewer | Read IAM Recommender findings | §3.37 |
roles/resourcemanager.folderAdmin | Administer a folder subtree; the BU delegation grant | §2.33, §2.34 |
roles/resourcemanager.folderCreator | Create folders under the organization | §2.4 |
roles/resourcemanager.organizationAdmin | Administer the organization node | §2.4, §2.34, §2.35 … |
roles/resourcemanager.projectCreator | Create projects; paired with the project factory | §2.3, §2.4, §2.9 … |
roles/resourcemanager.tagUser | Attach and detach tag values on resources | §2.13, §3.20, §3.38 … |
B.2 Security Roles §
Roles for the security estate: key management, secrets, data protection, and Security Command Center. The split that matters throughout is between administering a key or secret and using one — an application needs the use half and never the administration half.
Note that roles/secretmanager.secretVersionManager rotates versions without secretmanager.versions.access, so rotation automation never needs to read the payload it replaces.
| Role | What it grants | Cited in |
|---|---|---|
roles/cloudkms.admin | Full key administration, including destruction | §2.20, §14.1, §14.8 … |
roles/cloudkms.cryptoKeyDecrypter | Decrypt only; the read half of an envelope | §14.1, §14.6, §15.5 … |
roles/cloudkms.cryptoKeyEncrypter | Encrypt only; the write half of an envelope | §14.1 |
roles/cloudkms.cryptoKeyEncrypterDecrypter | The CMEK grant for a service agent | §2.20, §2.21, §3.11 … |
roles/cloudkms.signer | Sign with an asymmetric key | §14.1, §14.7 |
roles/cloudkms.signerVerifier | Sign and verify; the attestation signing grant | §14.7, §25.11, §25.14 … |
roles/cloudkms.verifier | Verify a signature without signing | §14.7 |
roles/cloudkms.viewer | Read key metadata, never key material | §14.1 |
roles/dlp.admin | Administer Sensitive Data Protection templates and jobs | §15.4, §15.11 |
roles/dlp.user | Run inspection and de-identification jobs | §15.4, §15.11 |
roles/iam.securityReviewer | Read IAM policy estate-wide without changing it | §3.4, §3.11, §3.34 … |
roles/secretmanager.admin | Full control of secrets, including their IAM | §13.4 |
roles/secretmanager.secretAccessor | Read secret payloads; the workload grant | §3.11, §3.13, §3.14 … |
roles/secretmanager.secretVersionAdder | Add a version without reading existing ones | §13.4 |
roles/secretmanager.secretVersionManager | Rotate versions without reading payloads | §13.4 |
roles/securitycenter.admin | Full Security Command Center administration | §16.1 |
roles/securitycenter.adminViewer | Organization-wide read of SCC | §3.37 |
roles/securitycenter.assetSecurityMarksWriter | Write security marks on assets | §16.2 |
roles/securitycenter.assetsViewer | Read the SCC asset view | §16.1 |
roles/securitycenter.complianceReportsViewer | Read compliance reports | §16.13 |
roles/securitycenter.complianceSnapshotsViewer | Read compliance snapshots | §16.13 |
roles/securitycenter.findingSecurityMarksWriter | Mark findings for triage workflow | §16.2 |
roles/securitycenter.findingsMuteSetter | Mute and unmute findings | §16.1 |
roles/securitycenter.findingsViewer | Read findings; the analyst grant | §16.1 |
roles/securitycenter.resourceValueConfigsEditor | Configure resource value for attack exposure | §16.11 |
roles/securitycenter.resourceValueConfigsViewer | Read resource value configuration | §16.11 |
roles/securitycenter.riskReportsViewer | Read attack exposure risk reports | §16.11 |
roles/securitycenter.valuedResourcesViewer | Read the valued resource set | §16.11 |
B.3 Network Roles §
Network roles are the smallest group in this appendix, and that is a finding rather than an omission: most of the book's network control surface is organization policy (Appendix C), firewall policy, and VPC Service Controls, almost none of which is granted through a network IAM role.
The one grant that appears constantly is roles/compute.networkUser, which is how a service project consumes a Shared VPC subnet (§5.27). Scope it to the specific subnetwork, never to the host project.
| Role | What it grants | Cited in |
|---|---|---|
roles/accesscontextmanager.policyAdmin | Administer access levels and service perimeters | §20.11 |
roles/accesscontextmanager.vpcScTroubleshooterViewer | Read VPC Service Controls troubleshooter output | §20.9, §20.11 |
roles/compute.networkAdmin | Manage networks and routes, not firewall rules | §2.23, §3.4, §3.11 … |
roles/compute.networkUser | Use a Shared VPC subnet from a service project | §2.23, §2.34, §3.11 … |
roles/compute.networkViewer | Read network configuration | §3.11, §5.28 |
roles/compute.securityAdmin | Manage firewall policies and SSL certificates | §2.23, §3.4, §5.28 … |
roles/dns.admin | Administer Cloud DNS zones and records | §5.25, §7.9 |
roles/iap.httpsResourceAccessor | Reach a web resource through IAP | §4.16, §4.19, §7.17 |
roles/iap.tunnelResourceAccessor | Reach a VM through IAP TCP forwarding | §3.36, §4.16, §4.18 … |
B.4 Compute Roles §
Compute Engine, Cloud Run, and Cloud Storage — the roles attached to workloads and to the people who operate them. The recurring hazard is the administrative form of each: roles/compute.admin, roles/run.admin, and roles/storage.admin each carry setIamPolicy for their surface, so granting one to an operator hands them the ability to widen their own access.
roles/storage.legacyBucketOwner predates uniform bucket-level access and appears here because §11.9 treats it as something to find and remove, not something to grant.
| Role | What it grants | Cited in |
|---|---|---|
roles/compute.admin | Full Compute Engine control; rarely the right grant | §8.28 |
roles/compute.imageUser | Launch from images in another project | §8.28 |
roles/compute.instanceAdmin | Manage instances; superseded by the .v1 form | §20.3 |
roles/compute.instanceAdmin.v1 | Create and manage instances and disks | §3.9, §3.11, §3.18 … |
roles/compute.osAdminLogin | OS Login with administrator privileges | §4.18, §8.19, §8.21 … |
roles/compute.osLogin | OS Login as an unprivileged user | §4.18, §8.19, §8.21 … |
roles/compute.storageAdmin | Manage disks, images, and snapshots | §8.23, §8.26, §8.28 |
roles/compute.viewer | Read Compute Engine resources | §3.34, §3.36, §8.1 |
roles/run.admin | Full Cloud Run control, including IAM | §3.34, §3.36, §10.1 … |
roles/run.developer | Deploy revisions without changing service IAM | §10.1, §10.3, §10.29 |
roles/run.invoker | Call a Cloud Run service | §10.1, §10.12, §10.13 … |
roles/run.jobsExecutor | Execute a Cloud Run job | §10.3, §10.28, §10.29 |
roles/run.jobsExecutorWithOverrides | Execute a job with argument overrides | §10.3 |
roles/run.viewer | Read Cloud Run services and revisions | §3.35, §10.1 |
roles/storage.admin | Full bucket and object control, including IAM | §3.11, §11.8, §16.16 |
roles/storage.insightsCollectorService | Storage Insights inventory report generation | §11.21 |
roles/storage.legacyBucketOwner | Legacy ACL-era bucket control; a finding, not a grant | §11.9 |
roles/storage.objectAdmin | Full object control within a bucket | §11.8, §26.14, §26.15 … |
roles/storage.objectCreator | Write objects without reading or deleting them | §11.8, §17.9, §29.2 |
roles/storage.objectUser | Read and write objects; the modern workload grant | §3.11, §11.8, §11.23 |
roles/storage.objectViewer | Read objects only | §3.11, §3.13, §11.8 … |
B.5 GKE Roles §
GKE roles divide along the boundary between the cluster as a Google Cloud resource and the objects inside it. roles/container.clusterViewer is enough to obtain credentials; what happens after that is decided by Kubernetes RBAC (§9.13). Granting roles/container.admin to reach the Kubernetes API is the common over-grant, and roles/container.developer is usually what was meant.
roles/stackdriver.resourceMetadata.writer keeps a legacy product name in its identifier; the product is Cloud Monitoring, and the role belongs to the node service account set (§9.31).
| Role | What it grants | Cited in |
|---|---|---|
roles/container.admin | Full GKE cluster and Kubernetes API control | §9.2, §9.13 |
roles/container.clusterViewer | Read cluster metadata and get credentials | §9.2 |
roles/container.developer | Full Kubernetes API access, no cluster management | §3.36, §9.2, §9.13 … |
roles/container.viewer | Read Kubernetes objects across the cluster | §3.35, §3.36, §9.2 … |
roles/gkebackup.backupAdmin | Create and manage GKE backup plans | §9.40 |
roles/gkebackup.restoreAdmin | Create and manage restores | §9.40 |
roles/gkebackup.viewer | Read backup and restore state | §9.40 |
roles/gkehub.admin | Administer fleet membership | §9.37 |
roles/gkehub.gatewayAdmin | Full cluster access through the Connect gateway | §9.37 |
roles/gkehub.gatewayReader | Read-only access through the Connect gateway | §9.37 |
roles/gkehub.viewer | Read fleet configuration | §9.37 |
roles/stackdriver.resourceMetadata.writer | Node metadata write; part of the node identity | §9.31 |
B.6 Database Roles §
Database roles separate instance administration from data access, and both from the connection itself. For Cloud SQL the connection grant is roles/cloudsql.client and IAM database authentication adds roles/cloudsql.instanceUser (§12.7); neither implies the ability to read a backup or change a flag.
An application should hold the client and user roles and nothing else. roles/cloudsql.admin includes deletion of the instance.
| Role | What it grants | Cited in |
|---|---|---|
roles/alloydb.client | Connect to an AlloyDB instance | §12.21 |
roles/alloydb.databaseUser | Authenticate to AlloyDB as an IAM principal | §12.21 |
roles/bigquery.dataEditor | Write to a dataset or table | §17.9 |
roles/bigquery.dataViewer | Read table data | §17.15, §17.18 |
roles/cloudsql.admin | Full Cloud SQL instance administration | §3.19, §3.36, §12.1 |
roles/cloudsql.client | Connect through the Cloud SQL Auth Proxy | §10.23, §10.26, §10.27 … |
roles/cloudsql.instanceUser | Authenticate to the database as an IAM principal | §12.1, §12.7, §12.9 … |
roles/datamigration.admin | Administer Database Migration Service jobs | §12.19 |
roles/spanner.admin | Full Spanner instance and database control | §12.23 |
roles/spanner.databaseReader | Read Spanner data | §12.23 |
roles/spanner.databaseUser | Read and write Spanner data | §12.23 |
B.7 Logging Roles §
Logging, monitoring, and the transport between them. The distinction the estate depends on is roles/logging.viewer against roles/logging.privateLogViewer: the first excludes Data Access log entries, which is what makes it safe to grant broadly, and the second includes them (§17.2).
roles/logging.logWriter and roles/monitoring.metricWriter are workload grants that belong on service accounts, including the GKE node service account (§9.31), not on people.
| Role | What it grants | Cited in |
|---|---|---|
roles/cloudtrace.user | Read traces | §3.35, §18.10 |
roles/errorreporting.viewer | Read error groups and events | §3.35 |
roles/logging.admin | Full logging control, including sinks and buckets | §17.12, §17.20 |
roles/logging.bucketWriter | Write into a specific log bucket | §17.9 |
roles/logging.configWriter | Create and manage sinks, buckets, and views | §17.11, §17.20, §17.21 |
roles/logging.fieldAccessor | Read fields restricted by field-level access | §17.7 |
roles/logging.logWriter | Write log entries; the workload and node grant | §8.29, §9.31, §23.7 |
roles/logging.privateLogViewer | Read Data Access logs and private log views | §3.11, §3.35, §3.37 … |
roles/logging.viewAccessor | Read a specific log view | §17.8 |
roles/logging.viewer | Read logs excluding Data Access entries | §2.22, §3.4, §3.11 … |
roles/monitoring.alertPolicyEditor | Manage alerting policies | §18.1 |
roles/monitoring.editor | Manage dashboards, alerts, and uptime checks | §3.36, §18.1 |
roles/monitoring.metricWriter | Write metrics; the workload and node grant | §8.29, §9.31, §18.1 |
roles/monitoring.viewer | Read metrics and dashboards | §3.4, §3.35, §18.1 |
roles/pubsub.publisher | Publish to a topic; the sink and notification grant | §3.5, §4.12, §13.5 … |
roles/pubsub.subscriber | Consume a subscription; the export grant | §16.15, §17.16, §17.17 |
B.8 CI/CD Roles §
Registry, build, deploy, and the impersonation roles that let a pipeline act without a key. roles/iam.workloadIdentityUser is what a federated external identity holds (§4.3); roles/iam.serviceAccountTokenCreator mints tokens for an already-authenticated principal; roles/iam.serviceAccountUser only attaches an account to a resource. They are routinely confused and grant different things.
roles/iam.serviceAccountKeyAdmin appears because the estate forbids the keys it manages — constraints/iam.managed.disableServiceAccountKeyCreation makes it inert (§31.4), and it is listed so the grant is recognized when found.
| Role | What it grants | Cited in |
|---|---|---|
roles/artifactregistry.admin | Full registry control, including repository IAM | §24.4 |
roles/artifactregistry.reader | Pull images; the node and runtime grant | §2.20, §3.11, §9.25 … |
roles/artifactregistry.repoAdmin | Manage a repository's contents and settings | §23.10, §24.4 |
roles/artifactregistry.writer | Push images and tags | §3.11, §23.7, §23.10 … |
roles/cloudbuild.builds.approver | Approve a build awaiting manual approval | §23.2 |
roles/cloudbuild.builds.editor | Create and cancel builds | §23.15 |
roles/clouddeploy.approver | Approve a rollout to a gated target | §25.4, §25.13, §25.14 |
roles/clouddeploy.jobRunner | Execute Cloud Deploy jobs | §25.13 |
roles/containeranalysis.notes.attacher | Attach an occurrence to an attestation note | §37.7 |
roles/iam.serviceAccountKeyAdmin | Manage service account keys; disabled by policy here | §23.7 |
roles/iam.serviceAccountOpenIdTokenCreator | Mint OIDC ID tokens for a service account | §3.24 |
roles/iam.serviceAccountTokenCreator | Mint access tokens for a service account | §3.5, §3.11, §3.23 … |
roles/iam.serviceAccountUser | Attach a service account to a resource | §3.5, §3.24, §3.34 … |
roles/iam.workloadIdentityUser | Impersonate through Workload Identity Federation | §3.5, §3.24, §4.3 … |
B.9 Recommended Custom Roles §
§3.12 owns the custom role model — the per-organization cap, the fact that custom roles can be created at an organization or a project but not at a folder, permission support levels, and the maintenance burden that makes a custom role a liability as well as a control. This section is the catalog only.
The convention is fixed: custom role IDs are rc.<domain><Action>, defined at the organization so one definition serves every project (§2.10). Each role below exists because the narrowest predefined alternative grants something the task does not need — usually deletion, usually setIamPolicy. The permission counts are given rather than the full lists; the lists are recorded in this unit's research notes with the reference page each permission was verified against.
| Custom role | Purpose | Permissions |
|---|---|---|
rc.artifactTagPromoter | Move a release tag onto an existing image; cannot push a new image. | 12 |
rc.attestationSigner | Sign an attestation and attach the occurrence; cannot create attestors or policy. | 9 |
rc.buildTriggerRunner | Run an existing build trigger; cannot edit the build definition. | 4 |
rc.computeInstanceOperator | Start, stop, and reset instances; cannot create, delete, or change them. | 7 |
rc.snapshotRestorer | Create a disk from an existing snapshot and attach it; cannot delete snapshots. | 11 |
rc.gkeNodePoolUpgrader | Update an existing cluster's node pools; cannot create or delete clusters. | 6 |
rc.sqlFailoverOperator | Trigger a failover or restart; cannot change configuration or delete. | 5 |
rc.sqlBackupRestorer | Restore from an existing backup run; cannot delete the instance. | 6 |
rc.kmsKeyDestroyer | Schedule and cancel key version destruction; cannot create or use keys. | 9 |
rc.evidenceCollector | Organization-wide read of inventory, findings, policy, and role definitions. | 14 |
rc.firewallAuditor | Read firewall policies, rules, routes, and networks; no write of any kind. | 12 |
Where the gap is widest, and why these are worth the maintenance:
rc.kmsKeyDestroyer—roles/cloudkms.adminis create, destroy, and set-IAM-policy in one grant. Destruction is the least reversible action in the estate and belongs behind Privileged Access Manager (§3.27).rc.computeInstanceOperator— The on-call grant.roles/compute.instanceAdmin.v1adds creation and deletion (§3.36).rc.buildTriggerRunner—roles/cloudbuild.builds.editorlets the runner rewrite the steps it is about to execute.rc.evidenceCollector— An auditor needs breadth without any write. No predefined role spans asset, SCC, and org policy read (§29.2).rc.firewallAuditor—roles/compute.networkVieweromits firewall policy resources, which is the object of the audit (§33.9).
rc.deployReleaser (§3.12) is defined in Chapter 3 as the worked example and is not repeated here. A proposed rc.secretRotator was rejected during this appendix's preparation: roles/secretmanager.secretVersionManager already adds, disables, destroys, and rotates versions without granting secretmanager.versions.access, so the custom role would have carried no privilege the predefined one lacks.
Pitfall. A custom role is not automatically narrower than a predefined one. Copying a predefined role and editing it — the console's default offer — usually produces a role with the same breadth and none of the maintenance Google performs when a service adds permissions (§3.12).
Sources §
- https://cloud.google.com/iam/docs/roles-overview (last validated 2026-09-04)
- https://cloud.google.com/iam/docs/roles-permissions (last validated 2026-09-04)