Cloud

Agent IAM Policies in GCP

When you run rpk cloud byoc gcp apply to create a BYOC cluster, you grant these permissions to the Redpanda Cloud agent service account. The agent uses them to call the GCP API and manage cluster resources on your behalf. The permissions follow the principle of least privilege. They are not required by Redpanda Cloud end users, and your GCP account does not need them for the initial Terraform bootstrap.

This page covers the permissions the Redpanda agent service account uses to manage BYOC cluster resources. It does not apply to BYOVPC clusters.

These permissions are granted to the Redpanda agent service account within the Redpanda-managed GCP project. Two capabilities are granted as predefined roles rather than individual permissions: Kubernetes Engine Admin (full management of the GKE cluster) and Storage Object Admin (object access, scoped to the cluster management bucket). The agent service account also carries two transitional predefined role bindings, roles/iam.serviceAccountDeleter and roles/resourcemanager.projectIamAdmin. These bindings ease the migration to the custom role and do not grant any permissions beyond it.

How to read this page

The agent’s permissions are granted through a single custom role, plus the predefined roles noted above. The custom role’s permissions are organized into functional groups (compute, networking, storage, identity, secrets, service enablement, and monitoring). Each group lists the permissions it includes and why they are needed. The full role definition appears in a collapsible Terraform block at the end of this page.

Access level Meaning

Read

get/list actions. Cannot modify or delete resources.

Write

Creates, updates, or uses resources.

Delete

Removes resources.

Compute and Kubernetes

Manages the Compute Engine instances, instance groups and templates, autoscalers, and disks that run the Redpanda data plane, plus the operations and zone/region metadata needed to provision them. Kubernetes cluster management is granted through the Kubernetes Engine Admin role.

Permission Access Why it is needed

compute.autoscalers.get

Read

Required to read autoscaler configuration so Redpanda Cloud can safely scale the compute backing your cluster.

compute.autoscalers.list

Read

Required to enumerate autoscalers when managing the compute that runs your Redpanda cluster.

compute.disks.get

Read

Required to read details of the persistent disks attached to your cluster’s brokers (used when applying labels and validating storage).

compute.disks.list

Read

Required to enumerate the persistent disks belonging to your cluster.

compute.disks.setLabels

Write

Required to apply Redpanda-managed labels to your cluster’s persistent disks for identification, cost tracking, and lifecycle management.

compute.globalOperations.get

Read

Required to check the status of long-running GCP operations initiated on your cluster’s behalf.

compute.globalOperations.list

Read

Required to inspect long-running GCP operations so Redpanda Cloud can detect quota exhaustion, capacity stockouts, and other provisioning errors affecting your cluster.

compute.instanceGroupManagers.create

Write

Required to create the managed instance groups that run the compute nodes of your Redpanda cluster.

compute.instanceGroupManagers.delete

Delete

Required to delete managed instance groups when nodes or the cluster are being removed.

compute.instanceGroupManagers.get

Read

Required to read managed instance group configuration to validate and reconcile the state of your cluster’s compute.

compute.instanceGroupManagers.list

Read

Required to enumerate managed instance groups belonging to your Redpanda cluster.

compute.instanceGroupManagers.update

Write

Required to update managed instance groups when scaling, upgrading, or reconfiguring your cluster.

compute.instanceGroups.create

Write

Required to create the instance groups that back your Redpanda cluster’s compute.

compute.instanceGroups.delete

Delete

Required to delete instance groups during cluster changes or teardown.

compute.instanceGroups.get

Read

Required to read instance group details when managing your cluster’s compute.

compute.instanceGroups.update

Write

Required to update instance groups as your cluster is scaled or reconfigured.

compute.instanceTemplates.create

Write

Required to create the instance templates that define how your Redpanda cluster’s nodes are provisioned.

compute.instanceTemplates.delete

Delete

Required to delete obsolete instance templates during upgrades and teardown.

compute.instanceTemplates.get

Read

Required to read instance template details when validating and provisioning your cluster.

compute.instances.create

Write

Required to provision the compute instances (VMs) that host your Redpanda cluster’s brokers and supporting workloads.

compute.instances.delete

Delete

Required to deprovision compute instances when nodes are replaced, scaled down, or the cluster is torn down.

compute.instances.get

Read

Required to read instance details for health checks, validation, and reconciliation of your cluster’s compute.

compute.instances.list

Read

Required to enumerate the instances that make up your Redpanda cluster.

compute.instances.reset

Write

Required to reset (hard-reboot) an instance during recovery when a node becomes unresponsive.

compute.instances.setDeletionProtection

Write

Required to apply deletion protection to cluster instances so they cannot be accidentally destroyed.

compute.instances.setLabels

Write

Required to apply Redpanda-managed labels to your cluster’s instances for identification, cost tracking, and lifecycle management.

compute.instances.update

Write

Required to update instance configuration as part of scaling, upgrades, or reconfiguration of your cluster.

compute.instances.use

Write

Required so Redpanda Cloud can attach instances to networking resources (such as Private Service Connect network endpoint groups) that provide connectivity to your cluster.

compute.projects.get

Read

Required to read basic GCP project metadata (such as default network settings) needed to provision resources for your cluster.

compute.regionOperations.get

Read

Required to check the status of regional operations initiated on your cluster’s behalf (including Private Service Connect operations).

compute.regionOperations.list

Read

Required to list regional operations so Redpanda Cloud can monitor asynchronous provisioning and Private Service Connect changes and detect failures.

compute.regions.get

Read

Required to read region metadata when provisioning resources for your cluster.

compute.regions.list

Read

Required to enumerate available regions when placing and validating your cluster.

compute.zoneOperations.get

Read

Required to check the status of zonal operations so Redpanda Cloud can detect quota exhaustion, capacity stockouts, and other provisioning errors affecting your cluster.

compute.zoneOperations.list

Read

Required to inspect zonal operations for detecting quota and capacity issues that affect your cluster’s health.

compute.zones.get

Read

Required to read zone metadata when placing your cluster’s compute resources.

compute.zones.list

Read

Required to enumerate available zones when provisioning and validating your cluster.

Networking and connectivity

Manages the VPC network, firewall rules, forwarding rules and Private Service Connect endpoints, backend services, network endpoint groups, service attachments, subnetworks, and Cloud DNS zones and records.

Permission Access Why it is needed

compute.addresses.get

Read

Required to read static IP address details when provisioning and managing the network endpoints used by your Redpanda cluster.

compute.firewalls.create

Write

Required so Redpanda Cloud can create the firewall rules that protect your cluster’s network and allow only intended traffic.

compute.firewalls.delete

Delete

Required so Redpanda Cloud can remove firewall rules it created when they are no longer needed (for example, cluster changes or teardown).

compute.firewalls.get

Read

Required to inspect existing firewall rules to validate cluster networking and detect drift from the expected configuration.

compute.firewalls.update

Write

Required so Redpanda Cloud can update firewall rules as your cluster’s networking requirements change.

compute.forwardingRules.create

Write

Required to create the forwarding rules that establish Private Service Connect (PSC) endpoints so you can privately reach your Redpanda cluster.

compute.forwardingRules.delete

Delete

Required to remove PSC forwarding rules when endpoints or the cluster are torn down.

compute.forwardingRules.get

Read

Required to read PSC forwarding rule details when validating and reconciling private connectivity to your cluster.

compute.forwardingRules.pscCreate

Write

Required to create Private Service Connect forwarding rules that let you privately reach your Redpanda cluster.

compute.forwardingRules.pscDelete

Delete

Required to delete Private Service Connect forwarding rules when private connectivity is being removed.

compute.forwardingRules.pscSetLabels

Write

Required to apply Redpanda-managed labels to PSC forwarding rules for identification, cost tracking, and lifecycle management.

compute.forwardingRules.pscSetTarget

Write

Required to configure the target of PSC forwarding rules so private connections resolve to your Redpanda cluster.

compute.forwardingRules.pscUpdate

Write

Required to update PSC forwarding rules as your private connectivity configuration changes.

compute.forwardingRules.setLabels

Write

Required to apply Redpanda-managed labels to forwarding rules for identification, cost tracking, and lifecycle management.

compute.forwardingRules.setTarget

Write

Required to configure forwarding rule targets so traffic is directed to the correct components of your Redpanda cluster.

compute.forwardingRules.use

Write

Required so Redpanda Cloud can attach forwarding rules to your cluster’s networking resources.

compute.networks.create

Write

Required to create the VPC network resources that carry your Redpanda cluster’s traffic (when Redpanda Cloud manages the network).

compute.networks.delete

Delete

Required to remove VPC network resources that Redpanda Cloud created when they are no longer needed.

compute.networks.getEffectiveFirewalls

Read

Required to inspect the effective firewall rules on your VPC so Redpanda Cloud can validate that cluster networking is correctly configured.

compute.networks.update

Write

Required to update VPC network configuration on networks that Redpanda Cloud manages for your cluster.

compute.networks.updatePolicy

Write

Required to update network-level policies applied to the VPC hosting your cluster.

compute.networks.use

Write

Required so Redpanda Cloud can attach your cluster’s resources (instances, service attachments, endpoints) to the VPC network.

compute.regionBackendServices.create

Write

Required to create the regional backend services that route Private Service Connect traffic to your Redpanda cluster.

compute.regionBackendServices.delete

Delete

Required to delete regional backend services when PSC connectivity or the cluster is being torn down.

compute.regionBackendServices.get

Read

Required to read regional backend service details when validating and reconciling private connectivity.

compute.regionBackendServices.use

Write

Required so Redpanda Cloud can attach backend services to forwarding rules and service attachments serving your cluster.

compute.regionNetworkEndpointGroups.attachNetworkEndpoints

Write

Required to attach your cluster’s broker instances to the network endpoint groups that back Private Service Connect.

compute.regionNetworkEndpointGroups.create

Write

Required to create the network endpoint groups that expose your cluster’s brokers through Private Service Connect.

compute.regionNetworkEndpointGroups.delete

Delete

Required to delete network endpoint groups when PSC connectivity or the cluster is being torn down.

compute.regionNetworkEndpointGroups.detachNetworkEndpoints

Write

Required to detach broker instances from network endpoint groups during scaling, replacement, or teardown.

compute.regionNetworkEndpointGroups.get

Read

Required to read network endpoint group details when validating and reconciling PSC connectivity.

compute.regionNetworkEndpointGroups.use

Write

Required so Redpanda Cloud can attach network endpoint groups to the backend services and forwarding rules serving your cluster.

compute.routers.get

Read

Required to read Cloud Router configuration when validating VPC networking used by your cluster.

compute.serviceAttachments.create

Write

Required to create the Private Service Connect service attachments that publish your Redpanda cluster for private consumption.

compute.serviceAttachments.delete

Delete

Required to delete PSC service attachments when private connectivity or the cluster is being torn down.

compute.serviceAttachments.get

Read

Required to read PSC service attachment details when validating and reconciling private connectivity.

compute.serviceAttachments.list

Read

Required to enumerate PSC service attachments belonging to your cluster.

compute.serviceAttachments.update

Write

Required to update PSC service attachments as private connectivity settings (such as allow-lists) change.

compute.subnetworks.get

Read

Required to read subnetwork details when validating and placing your cluster’s resources on the correct subnets.

compute.subnetworks.use

Write

Required so Redpanda Cloud can place your cluster’s instances and endpoints in the appropriate subnets.

dns.changes.create

Write

Required to publish DNS record changes so clients can resolve the endpoints of your Redpanda cluster (including external-DNS updates from the underlying GKE cluster).

dns.changes.get

Read

Required to check the status of pending DNS record changes for your cluster’s endpoints.

dns.changes.list

Read

Required to enumerate DNS record changes when reconciling the DNS state for your cluster.

dns.managedZones.create

Write

Required to create the managed DNS zones that host your Redpanda cluster’s endpoint records.

dns.managedZones.delete

Delete

Required to delete managed DNS zones created by Redpanda Cloud when they are no longer needed.

dns.managedZones.get

Read

Required to read managed DNS zone details when reconciling your cluster’s DNS configuration.

dns.managedZones.list

Read

Required to enumerate managed DNS zones associated with your cluster (used by external-DNS and by Redpanda’s validation).

dns.managedZones.update

Write

Required to update managed DNS zone configuration as your cluster’s DNS needs change.

dns.projects.get

Read

Required to read Cloud DNS project settings when managing DNS for your cluster.

dns.resourceRecordSets.create

Write

Required to create DNS records so clients can resolve your Redpanda cluster’s endpoints (used by external-DNS).

dns.resourceRecordSets.delete

Delete

Required to remove DNS records when endpoints are decommissioned or the cluster is torn down.

dns.resourceRecordSets.get

Read

Required to read DNS record details when reconciling your cluster’s DNS state.

dns.resourceRecordSets.list

Read

Required to enumerate DNS records associated with your cluster.

dns.resourceRecordSets.update

Write

Required to update DNS records as your cluster’s endpoints change.

Storage

Reads bucket metadata and manages the IAM policy on the Tiered Storage bucket. Object-level access is granted through the Storage Object Admin role, scoped to the cluster management bucket.

Permission Access Why it is needed

storage.buckets.get

Read

Required to read storage bucket details for the buckets used by your cluster (for example, Tiered Storage).

storage.buckets.getIamPolicy

Read

Required to inspect IAM bindings on your cluster’s storage buckets to validate access is correctly configured.

storage.buckets.setIamPolicy

Write

Required to grant your cluster’s service accounts access to the storage buckets it uses (for example, Tiered Storage).

Identity and access

Creates and manages the custom role, service accounts, and project-level IAM bindings the cluster components need.

Permission Access Why it is needed

iam.roles.create

Write

Required to create the custom IAM roles that grant Redpanda Cloud components least-privilege access needed to operate your cluster.

iam.roles.delete

Delete

Required to delete custom IAM roles created by Redpanda Cloud when they are no longer needed.

iam.roles.get

Read

Required to read custom IAM role definitions to validate that the correct permissions are in place for your cluster.

iam.roles.list

Read

Required to enumerate IAM roles when validating and reconciling the permissions granted for your cluster.

iam.roles.undelete

Write

Required to restore an accidentally deleted custom IAM role so your cluster’s operation is not disrupted.

iam.roles.update

Write

Required to update custom IAM role definitions as Redpanda Cloud’s required permissions evolve.

iam.serviceAccounts.actAs

Write

Required to attach Redpanda-managed service accounts to the GCP resources that run your cluster workloads, so those resources run with the service account’s identity.

iam.serviceAccounts.create

Write

Required to create the service accounts used by the various components that run your Redpanda cluster.

iam.serviceAccounts.delete

Delete

Required to delete service accounts created by Redpanda Cloud when they are no longer needed.

iam.serviceAccounts.get

Read

Required to read service account details to validate that your cluster’s components have the correct identities.

iam.serviceAccounts.getIamPolicy

Read

Required to inspect service account IAM bindings when validating and reconciling permissions for your cluster.

iam.serviceAccounts.setIamPolicy

Write

Required to grant the necessary IAM bindings on service accounts so cluster components can act on their behalf.

iam.serviceAccounts.update

Write

Required to update service account configuration as your cluster evolves.

resourcemanager.projects.get

Read

Required to read basic project metadata used by all Redpanda Cloud components (cluster provisioning, connectors, and application services) that run in your project.

resourcemanager.projects.getIamPolicy

Read

Required to inspect your project’s IAM policy to validate that the necessary bindings for Redpanda Cloud are correctly in place.

resourcemanager.projects.setIamPolicy

Write

Required to grant the project-level IAM bindings needed for Redpanda Cloud to operate your cluster.

Secrets management

Lists and deletes the Secret Manager secrets Redpanda creates for your cluster.

Permission Access Why it is needed

secretmanager.secrets.delete

Delete

Required to remove Redpanda-managed secret resources associated with your cluster during reconfiguration or teardown.

secretmanager.secrets.list

Read

Required to find Redpanda-managed secret resources during reconciliation and cleanup. This permission does not grant access to secret values.

Service enablement

Enables and reads the state of the GCP APIs (services) that your cluster depends on.

Permission Access Why it is needed

serviceusage.services.enable

Write

Required to enable the Google Cloud APIs used to provision and operate your cluster.

serviceusage.services.get

Read

Required to verify that the Google Cloud APIs needed by your cluster are enabled.

serviceusage.services.list

Read

Required to list the Google Cloud APIs enabled in your project when reconciling the services your cluster depends on.

Monitoring

Writes log entries for the agent and cluster components.

Permission Access Why it is needed

logging.logEntries.create

Write

Required so your Redpanda cluster and the underlying GKE cluster can write operational logs to Cloud Logging in your project.

Optional feature permissions

The following permissions support Redpanda SQL. They are granted through a separate custom role (internally named for oxla, the legacy name for Redpanda SQL).

Manage Redpanda SQL storage buckets

Creates and manages the Cloud Storage bucket that holds Redpanda SQL metadata.

Permission Access Why it is needed

storage.buckets.create

Write

Required to create the Cloud Storage buckets used by Redpanda SQL.

storage.buckets.delete

Delete

Required to remove Redpanda SQL buckets when the feature or cluster is decommissioned.

storage.buckets.update

Write

Required to configure security, lifecycle, and other settings on the Cloud Storage buckets used by Redpanda SQL.

storage.objects.delete

Delete

Required to remove Redpanda SQL objects during lifecycle operations or before deleting a bucket.

storage.objects.list

Read

Required to enumerate Redpanda SQL objects during reconciliation and cleanup.

Full role definition

The complete set of permissions in the Redpanda agent custom role:

Terraform
permissions = [
  "compute.addresses.get",
  "compute.autoscalers.get",
  "compute.autoscalers.list",
  "compute.firewalls.create",
  "compute.firewalls.delete",
  "compute.firewalls.get",
  "compute.firewalls.update",
  "compute.forwardingRules.use",
  "compute.globalOperations.get",
  "compute.globalOperations.list",
  "compute.instanceGroupManagers.create",
  "compute.instanceGroupManagers.delete",
  "compute.instanceGroupManagers.get",
  "compute.instanceGroupManagers.list",
  "compute.instanceGroupManagers.update",
  "compute.instanceGroups.create",
  "compute.instanceGroups.delete",
  "compute.instanceGroups.get",
  "compute.instanceGroups.update",
  "compute.instances.create",
  "compute.instances.delete",
  "compute.instances.get",
  "compute.instances.list",
  "compute.instances.reset",
  "compute.instances.setDeletionProtection",
  "compute.instances.update",
  "compute.instanceTemplates.create",
  "compute.instanceTemplates.delete",
  "compute.instanceTemplates.get",
  "compute.instances.setLabels",
  "compute.disks.get",
  "compute.disks.list",
  "compute.disks.setLabels",
  "compute.networks.create",
  "compute.networks.delete",
  "compute.networks.getEffectiveFirewalls",
  "compute.networks.update",
  "compute.networks.updatePolicy",
  "compute.projects.get",
  "compute.regionOperations.get",
  "compute.regionOperations.list",
  "compute.regions.get",
  "compute.regions.list",
  "compute.routers.get",
  "compute.serviceAttachments.create",
  "compute.serviceAttachments.delete",
  "compute.serviceAttachments.get",
  "compute.serviceAttachments.list",
  "compute.serviceAttachments.update",
  "compute.subnetworks.get",
  "compute.subnetworks.use",
  "compute.zoneOperations.get",
  "compute.zoneOperations.list",
  "compute.zones.get",
  "compute.zones.list",
  "dns.changes.create",
  "dns.changes.get",
  "dns.changes.list",
  "dns.managedZones.create",
  "dns.managedZones.delete",
  "dns.managedZones.get",
  "dns.managedZones.list",
  "dns.managedZones.update",
  "dns.projects.get",
  "dns.resourceRecordSets.create",
  "dns.resourceRecordSets.delete",
  "dns.resourceRecordSets.get",
  "dns.resourceRecordSets.list",
  "dns.resourceRecordSets.update",
  "iam.roles.create",
  "iam.roles.delete",
  "iam.roles.get",
  "iam.roles.list",
  "iam.roles.undelete",
  "iam.roles.update",
  "iam.serviceAccounts.actAs",
  "iam.serviceAccounts.create",
  "iam.serviceAccounts.delete",
  "iam.serviceAccounts.get",
  "iam.serviceAccounts.getIamPolicy",
  "iam.serviceAccounts.setIamPolicy",
  "iam.serviceAccounts.update",
  "logging.logEntries.create",
  "resourcemanager.projects.get",
  "resourcemanager.projects.getIamPolicy",
  "resourcemanager.projects.setIamPolicy",
  "storage.buckets.get",
  "storage.buckets.getIamPolicy",
  "storage.buckets.setIamPolicy",
  "compute.forwardingRules.create",
  "compute.forwardingRules.delete",
  "compute.forwardingRules.get",
  "compute.forwardingRules.setLabels",
  "compute.forwardingRules.setTarget",
  "compute.forwardingRules.pscCreate",
  "compute.forwardingRules.pscDelete",
  "compute.forwardingRules.pscSetLabels",
  "compute.forwardingRules.pscSetTarget",
  "compute.forwardingRules.pscUpdate",
  "compute.instances.use",
  "compute.networks.use",
  "compute.regionBackendServices.create",
  "compute.regionBackendServices.delete",
  "compute.regionBackendServices.get",
  "compute.regionBackendServices.use",
  "compute.regionNetworkEndpointGroups.attachNetworkEndpoints",
  "compute.regionNetworkEndpointGroups.create",
  "compute.regionNetworkEndpointGroups.delete",
  "compute.regionNetworkEndpointGroups.detachNetworkEndpoints",
  "compute.regionNetworkEndpointGroups.get",
  "compute.regionNetworkEndpointGroups.use",
  "secretmanager.secrets.list",
  "secretmanager.secrets.delete",
  "serviceusage.services.enable",
  "serviceusage.services.get",
  "serviceusage.services.list",
]

Service account credential rotation

To rotate service account credentials for your BYOC cluster, contact Redpanda Support with your cluster ID, the service accounts that require rotation, and your target timeline.

GCP service account credential rotation for BYOC clusters is not self-service. Rotating these credentials without coordinating with Redpanda can disrupt agent connectivity, monitoring, and Tiered Storage uploads, and can leave the cluster stuck and unable to complete future operations.