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.

RoleWhat it grantsCited in
roles/accessapproval.approverApprove or dismiss Access Approval requests§3.29
roles/accessapproval.configEditorConfigure Access Approval settings and notifications§3.29
roles/billing.adminFull control of a billing account§2.5, §3.23
roles/billing.costsManagerManage budgets and cost views, not payment§2.5
roles/billing.creatorCreate billing accounts§2.3, §2.5, §2.28
roles/billing.projectManagerAttach and detach projects from a billing account§2.5
roles/billing.userLink a project to a billing account§2.5, §2.9, §2.26
roles/billing.viewerRead billing account data and budgets§2.5, §3.4
roles/cloudasset.viewerRead and export the asset inventory§3.37
roles/iam.denyAdminCreate and manage IAM deny policies§3.23, §3.37
roles/iam.securityAdminRead and set IAM policy on a resource§3.23, §3.37
roles/iam.serviceAccountAdminCreate, delete, and manage service accounts§3.23
roles/orgpolicy.policyAdminSet organization policies; the baseline is not delegated§2.30, §2.31, §2.33
roles/orgpolicy.policyViewerRead organization policies without setting them§3.37
roles/recommender.iamViewerRead IAM Recommender findings§3.37
roles/resourcemanager.folderAdminAdminister a folder subtree; the BU delegation grant§2.33, §2.34
roles/resourcemanager.folderCreatorCreate folders under the organization§2.4
roles/resourcemanager.organizationAdminAdminister the organization node§2.4, §2.34, §2.35
roles/resourcemanager.projectCreatorCreate projects; paired with the project factory§2.3, §2.4, §2.9
roles/resourcemanager.tagUserAttach 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.

RoleWhat it grantsCited in
roles/cloudkms.adminFull key administration, including destruction§2.20, §14.1, §14.8
roles/cloudkms.cryptoKeyDecrypterDecrypt only; the read half of an envelope§14.1, §14.6, §15.5
roles/cloudkms.cryptoKeyEncrypterEncrypt only; the write half of an envelope§14.1
roles/cloudkms.cryptoKeyEncrypterDecrypterThe CMEK grant for a service agent§2.20, §2.21, §3.11
roles/cloudkms.signerSign with an asymmetric key§14.1, §14.7
roles/cloudkms.signerVerifierSign and verify; the attestation signing grant§14.7, §25.11, §25.14
roles/cloudkms.verifierVerify a signature without signing§14.7
roles/cloudkms.viewerRead key metadata, never key material§14.1
roles/dlp.adminAdminister Sensitive Data Protection templates and jobs§15.4, §15.11
roles/dlp.userRun inspection and de-identification jobs§15.4, §15.11
roles/iam.securityReviewerRead IAM policy estate-wide without changing it§3.4, §3.11, §3.34
roles/secretmanager.adminFull control of secrets, including their IAM§13.4
roles/secretmanager.secretAccessorRead secret payloads; the workload grant§3.11, §3.13, §3.14
roles/secretmanager.secretVersionAdderAdd a version without reading existing ones§13.4
roles/secretmanager.secretVersionManagerRotate versions without reading payloads§13.4
roles/securitycenter.adminFull Security Command Center administration§16.1
roles/securitycenter.adminViewerOrganization-wide read of SCC§3.37
roles/securitycenter.assetSecurityMarksWriterWrite security marks on assets§16.2
roles/securitycenter.assetsViewerRead the SCC asset view§16.1
roles/securitycenter.complianceReportsViewerRead compliance reports§16.13
roles/securitycenter.complianceSnapshotsViewerRead compliance snapshots§16.13
roles/securitycenter.findingSecurityMarksWriterMark findings for triage workflow§16.2
roles/securitycenter.findingsMuteSetterMute and unmute findings§16.1
roles/securitycenter.findingsViewerRead findings; the analyst grant§16.1
roles/securitycenter.resourceValueConfigsEditorConfigure resource value for attack exposure§16.11
roles/securitycenter.resourceValueConfigsViewerRead resource value configuration§16.11
roles/securitycenter.riskReportsViewerRead attack exposure risk reports§16.11
roles/securitycenter.valuedResourcesViewerRead 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.

RoleWhat it grantsCited in
roles/accesscontextmanager.policyAdminAdminister access levels and service perimeters§20.11
roles/accesscontextmanager.vpcScTroubleshooterViewerRead VPC Service Controls troubleshooter output§20.9, §20.11
roles/compute.networkAdminManage networks and routes, not firewall rules§2.23, §3.4, §3.11
roles/compute.networkUserUse a Shared VPC subnet from a service project§2.23, §2.34, §3.11
roles/compute.networkViewerRead network configuration§3.11, §5.28
roles/compute.securityAdminManage firewall policies and SSL certificates§2.23, §3.4, §5.28
roles/dns.adminAdminister Cloud DNS zones and records§5.25, §7.9
roles/iap.httpsResourceAccessorReach a web resource through IAP§4.16, §4.19, §7.17
roles/iap.tunnelResourceAccessorReach 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.

RoleWhat it grantsCited in
roles/compute.adminFull Compute Engine control; rarely the right grant§8.28
roles/compute.imageUserLaunch from images in another project§8.28
roles/compute.instanceAdminManage instances; superseded by the .v1 form§20.3
roles/compute.instanceAdmin.v1Create and manage instances and disks§3.9, §3.11, §3.18
roles/compute.osAdminLoginOS Login with administrator privileges§4.18, §8.19, §8.21
roles/compute.osLoginOS Login as an unprivileged user§4.18, §8.19, §8.21
roles/compute.storageAdminManage disks, images, and snapshots§8.23, §8.26, §8.28
roles/compute.viewerRead Compute Engine resources§3.34, §3.36, §8.1
roles/run.adminFull Cloud Run control, including IAM§3.34, §3.36, §10.1
roles/run.developerDeploy revisions without changing service IAM§10.1, §10.3, §10.29
roles/run.invokerCall a Cloud Run service§10.1, §10.12, §10.13
roles/run.jobsExecutorExecute a Cloud Run job§10.3, §10.28, §10.29
roles/run.jobsExecutorWithOverridesExecute a job with argument overrides§10.3
roles/run.viewerRead Cloud Run services and revisions§3.35, §10.1
roles/storage.adminFull bucket and object control, including IAM§3.11, §11.8, §16.16
roles/storage.insightsCollectorServiceStorage Insights inventory report generation§11.21
roles/storage.legacyBucketOwnerLegacy ACL-era bucket control; a finding, not a grant§11.9
roles/storage.objectAdminFull object control within a bucket§11.8, §26.14, §26.15
roles/storage.objectCreatorWrite objects without reading or deleting them§11.8, §17.9, §29.2
roles/storage.objectUserRead and write objects; the modern workload grant§3.11, §11.8, §11.23
roles/storage.objectViewerRead 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).

RoleWhat it grantsCited in
roles/container.adminFull GKE cluster and Kubernetes API control§9.2, §9.13
roles/container.clusterViewerRead cluster metadata and get credentials§9.2
roles/container.developerFull Kubernetes API access, no cluster management§3.36, §9.2, §9.13
roles/container.viewerRead Kubernetes objects across the cluster§3.35, §3.36, §9.2
roles/gkebackup.backupAdminCreate and manage GKE backup plans§9.40
roles/gkebackup.restoreAdminCreate and manage restores§9.40
roles/gkebackup.viewerRead backup and restore state§9.40
roles/gkehub.adminAdminister fleet membership§9.37
roles/gkehub.gatewayAdminFull cluster access through the Connect gateway§9.37
roles/gkehub.gatewayReaderRead-only access through the Connect gateway§9.37
roles/gkehub.viewerRead fleet configuration§9.37
roles/stackdriver.resourceMetadata.writerNode 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.

RoleWhat it grantsCited in
roles/alloydb.clientConnect to an AlloyDB instance§12.21
roles/alloydb.databaseUserAuthenticate to AlloyDB as an IAM principal§12.21
roles/bigquery.dataEditorWrite to a dataset or table§17.9
roles/bigquery.dataViewerRead table data§17.15, §17.18
roles/cloudsql.adminFull Cloud SQL instance administration§3.19, §3.36, §12.1
roles/cloudsql.clientConnect through the Cloud SQL Auth Proxy§10.23, §10.26, §10.27
roles/cloudsql.instanceUserAuthenticate to the database as an IAM principal§12.1, §12.7, §12.9
roles/datamigration.adminAdminister Database Migration Service jobs§12.19
roles/spanner.adminFull Spanner instance and database control§12.23
roles/spanner.databaseReaderRead Spanner data§12.23
roles/spanner.databaseUserRead 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.

RoleWhat it grantsCited in
roles/cloudtrace.userRead traces§3.35, §18.10
roles/errorreporting.viewerRead error groups and events§3.35
roles/logging.adminFull logging control, including sinks and buckets§17.12, §17.20
roles/logging.bucketWriterWrite into a specific log bucket§17.9
roles/logging.configWriterCreate and manage sinks, buckets, and views§17.11, §17.20, §17.21
roles/logging.fieldAccessorRead fields restricted by field-level access§17.7
roles/logging.logWriterWrite log entries; the workload and node grant§8.29, §9.31, §23.7
roles/logging.privateLogViewerRead Data Access logs and private log views§3.11, §3.35, §3.37
roles/logging.viewAccessorRead a specific log view§17.8
roles/logging.viewerRead logs excluding Data Access entries§2.22, §3.4, §3.11
roles/monitoring.alertPolicyEditorManage alerting policies§18.1
roles/monitoring.editorManage dashboards, alerts, and uptime checks§3.36, §18.1
roles/monitoring.metricWriterWrite metrics; the workload and node grant§8.29, §9.31, §18.1
roles/monitoring.viewerRead metrics and dashboards§3.4, §3.35, §18.1
roles/pubsub.publisherPublish to a topic; the sink and notification grant§3.5, §4.12, §13.5
roles/pubsub.subscriberConsume 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.

RoleWhat it grantsCited in
roles/artifactregistry.adminFull registry control, including repository IAM§24.4
roles/artifactregistry.readerPull images; the node and runtime grant§2.20, §3.11, §9.25
roles/artifactregistry.repoAdminManage a repository's contents and settings§23.10, §24.4
roles/artifactregistry.writerPush images and tags§3.11, §23.7, §23.10
roles/cloudbuild.builds.approverApprove a build awaiting manual approval§23.2
roles/cloudbuild.builds.editorCreate and cancel builds§23.15
roles/clouddeploy.approverApprove a rollout to a gated target§25.4, §25.13, §25.14
roles/clouddeploy.jobRunnerExecute Cloud Deploy jobs§25.13
roles/containeranalysis.notes.attacherAttach an occurrence to an attestation note§37.7
roles/iam.serviceAccountKeyAdminManage service account keys; disabled by policy here§23.7
roles/iam.serviceAccountOpenIdTokenCreatorMint OIDC ID tokens for a service account§3.24
roles/iam.serviceAccountTokenCreatorMint access tokens for a service account§3.5, §3.11, §3.23
roles/iam.serviceAccountUserAttach a service account to a resource§3.5, §3.24, §3.34
roles/iam.workloadIdentityUserImpersonate through Workload Identity Federation§3.5, §3.24, §4.3

§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 rolePurposePermissions
rc.artifactTagPromoterMove a release tag onto an existing image; cannot push a new image.12
rc.attestationSignerSign an attestation and attach the occurrence; cannot create attestors or policy.9
rc.buildTriggerRunnerRun an existing build trigger; cannot edit the build definition.4
rc.computeInstanceOperatorStart, stop, and reset instances; cannot create, delete, or change them.7
rc.snapshotRestorerCreate a disk from an existing snapshot and attach it; cannot delete snapshots.11
rc.gkeNodePoolUpgraderUpdate an existing cluster's node pools; cannot create or delete clusters.6
rc.sqlFailoverOperatorTrigger a failover or restart; cannot change configuration or delete.5
rc.sqlBackupRestorerRestore from an existing backup run; cannot delete the instance.6
rc.kmsKeyDestroyerSchedule and cancel key version destruction; cannot create or use keys.9
rc.evidenceCollectorOrganization-wide read of inventory, findings, policy, and role definitions.14
rc.firewallAuditorRead 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.kmsKeyDestroyerroles/cloudkms.admin is 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.v1 adds creation and deletion (§3.36).
  • rc.buildTriggerRunnerroles/cloudbuild.builds.editor lets 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.firewallAuditorroles/compute.networkViewer omits 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 §