Cloud

Agent IAM Policies in AWS

When you run rpk cloud byoc aws apply to create a BYOC cluster, you grant IAM permissions to the Redpanda Cloud agent. The agent uses these permissions to call the AWS API to create and manage cluster resources on your behalf. The permissions follow the principle of least privilege. Where possible, they are scoped to the resources Redpanda provisions for your cluster; some statements grant actions with an account-wide (*) resource scope, as noted in each section. These permissions are not required by Redpanda Cloud end users, and they do not grant human access to your cluster.

This page lists the permissions Redpanda needs to create and manage BYOC clusters. It does not apply to BYOVPC clusters.

How to read this page

The agent’s IAM policy is a set of scoped statements. Statements are organized into functional groups (compute, networking, storage, identity, secrets, monitoring, and coordination state). Each statement lists the actions it allows and why they are needed, the resource scope that constrains them, and the exact Terraform in a collapsible block.

Access level Meaning

Read

Describe, Get, or List actions. Cannot modify or delete resources.

Write

Creates or modifies resources.

Delete

Removes resources.

Full

Service-wide (*) action, constrained by the statement’s resource scope. See Service-wide actions.

Service-wide actions

A few statements use a service-wide action (*) rather than listing individual actions. In every case the action is constrained by the statement’s resource scope, so the grant is not account-wide:

Action Constrained to

eks:*

A single EKS cluster and its add-ons and node groups: cluster/redpanda-<redpanda-id>, addon/redpanda-<redpanda-id>/*, nodegroup/redpanda-<redpanda-id>/*.

s3:*

The cluster management bucket only.

autoscaling:*

Auto Scaling groups named redpanda-<redpanda-id>* and redpanda-agent-<redpanda-id>*.

Compute and Kubernetes

Provisions and operates the EKS cluster, EC2 nodes, launch templates, and Auto Scaling groups that run the Redpanda data plane. The service-wide actions here (eks:*, autoscaling:*) are each scoped to your cluster’s resources.

Manage the EKS cluster

Scope: Restricted to your cluster’s EKS resources: arn:aws:eks:*:${local.aws_account_id}:cluster/redpanda-${var.redpanda_id}, its add-ons, and its node groups.

Permission Access Why it is needed

eks:*

Full

Required to manage the full lifecycle of the EKS cluster that hosts your Redpanda data plane, including cluster creation, upgrades, node group management, and decommissioning. Required to configure EKS add-ons, access entries, and identity mappings that Redpanda Cloud needs to operate the managed service.

Terraform
statement {
  sid    = "RedpandaAgentEKSCluster"
  effect = "Allow"
  actions = [
    "eks:*",
  ]
  resources = [
    "arn:aws:eks:*:${local.aws_account_id}:cluster/redpanda-${var.redpanda_id}",
    "arn:aws:eks:*:${local.aws_account_id}:addon/redpanda-${var.redpanda_id}/*",
    "arn:aws:eks:*:${local.aws_account_id}:nodegroup/redpanda-${var.redpanda_id}/*",
  ]
}

Read the EKS node group service-linked role

Scope: Restricted to the AWS-managed service-linked role for EKS node groups: arn:aws:iam::${local.aws_account_id}:role/aws-service-role/eks-nodegroup.amazonaws.com/AWSServiceRoleForAmazonEKSNodegroup.

Permission Access Why it is needed

iam:GetRole

Read

Required to read the AWS service-linked role that EKS uses to create managed node groups. Without it, node group creation fails with a permission error.

Terraform
statement {
  sid    = "RedpandaAgentEKSNodegroupRoleCreation"
  effect = "Allow"
  actions = [
    "iam:GetRole",
  ]
  resources = [
    "arn:aws:iam::${local.aws_account_id}:role/aws-service-role/eks-nodegroup.amazonaws.com/AWSServiceRoleForAmazonEKSNodegroup",
  ]
}

Manage Auto Scaling groups

Scope: Restricted to Auto Scaling groups named for your cluster: arn:aws:autoscaling:*:${local.aws_account_id}:autoScalingGroup:*:autoScalingGroupName/redpanda-${var.redpanda_id}* and .../redpanda-agent-${var.redpanda_id}*.

Permission Access Why it is needed

autoscaling:*

Full

Required to manage the full lifecycle of the Auto Scaling groups that provide compute capacity for your Redpanda cluster, including creating, scaling, updating, refreshing, and tearing down node groups.

Terraform
statement {
  sid    = "RedpandaAgentAutoscaling"
  effect = "Allow"
  actions = [
    "autoscaling:*",
  ]
  resources = [
    "arn:aws:autoscaling:*:${local.aws_account_id}:autoScalingGroup:*:autoScalingGroupName/redpanda-${var.redpanda_id}*",
    "arn:aws:autoscaling:*:${local.aws_account_id}:autoScalingGroup:*:autoScalingGroupName/redpanda-agent-${var.redpanda_id}*"
  ]
}

Read and tag Auto Scaling resources

Scope: Account-wide (*). These describe and tag actions are granted with an account-wide resource scope.

Permission Access Why it is needed

autoscaling:DescribeScalingActivities

Read

Required to monitor scaling activity for the Auto Scaling groups that back your Redpanda cluster’s node groups.

autoscaling:DescribeAutoScalingGroups

Read

Required to read the Auto Scaling groups that manage your Redpanda cluster’s compute nodes.

autoscaling:DescribeTags

Read

Required to read tags on the Auto Scaling groups managing your Redpanda cluster’s nodes.

autoscaling:CreateOrUpdateTags

Write

Required to apply Redpanda-managed tags used to identify, reconcile, and clean up the Auto Scaling groups that belong to your cluster.

autoscaling:DeleteTags

Delete

Required to remove obsolete Redpanda-managed tags when your cluster’s Auto Scaling groups are updated or removed.

autoscaling:DescribeTerminationPolicyTypes

Read

Required to configure appropriate node termination policies for your Redpanda cluster’s Auto Scaling groups.

autoscaling:DescribeInstanceRefreshes

Read

Required to monitor instance refresh operations during upgrades and rolling updates of your Redpanda cluster nodes.

autoscaling:DescribeLaunchConfigurations

Read

Required to read the launch configurations associated with your Redpanda cluster’s Auto Scaling groups.

Terraform
statement {
  sid    = "RedpandaAgentAutoScaling"
  effect = "Allow"
  actions = [
    "autoscaling:DescribeScalingActivities",
    "autoscaling:DescribeAutoScalingGroups",
    "autoscaling:DescribeTags",
    "autoscaling:CreateOrUpdateTags",
    "autoscaling:DeleteTags",
    "autoscaling:DescribeTerminationPolicyTypes",
    "autoscaling:DescribeInstanceRefreshes",
    "autoscaling:DescribeLaunchConfigurations",
  ]
  resources = [
    "*",
  ]
}

Launch EC2 instances

Scope: Restricted to EC2 instance, network interface, volume, security group, subnet, launch template, and image resources in your account.

Permission Access Why it is needed

ec2:RunInstances

Write

Required to provision the EC2 instances that run your Redpanda broker and worker nodes.

Terraform
statement {
  sid    = "RedpandaAgentEC2RunInstances"
  effect = "Allow"
  actions = [
    "ec2:RunInstances",
  ]
  resources = [
    "arn:aws:ec2:*:${local.aws_account_id}:instance/*",
    "arn:aws:ec2:*:${local.aws_account_id}:network-interface/*",
    "arn:aws:ec2:*:${local.aws_account_id}:volume/*",
    "arn:aws:ec2:*:${local.aws_account_id}:security-group/*",
    "arn:aws:ec2:*:${local.aws_account_id}:subnet/*",
    "arn:aws:ec2:*:${local.aws_account_id}:launch-template/*",
    "arn:aws:ec2:*::image/*",
  ]
}

Manage launch templates

Scope: Restricted to launch templates in your account: arn:aws:ec2:*:${local.aws_account_id}:launch-template/*, further restricted by a condition on the redpanda-id resource tag.

Permission Access Why it is needed

ec2:DeleteLaunchTemplate

Delete

Required to clean up launch templates when you decommission your Redpanda cluster.

ec2:ModifyLaunchTemplate

Write

Required to update launch template settings, such as the default version, when cluster nodes are upgraded or reconfigured.

Terraform
statement {
  sid    = "RedpandaAgentLaunchTemplateDeletion"
  effect = "Allow"
  actions = [
    "ec2:DeleteLaunchTemplate",
    "ec2:ModifyLaunchTemplate",
  ]
  resources = [
    "arn:aws:ec2:*:${local.aws_account_id}:launch-template/*",
  ]
  condition {
    test     = "StringEquals"
    variable = "ec2:ResourceTag/redpanda-id"
    values = [
      var.redpanda_id,
    ]
  }
}

Terminate EC2 instances

Scope: Account-wide (*), restricted by a condition on the redpanda-id resource tag so only instances belonging to your Redpanda cluster can be terminated.

Permission Access Why it is needed

ec2:TerminateInstances

Delete

Required to remove unhealthy, replaced, or scaled-down cluster nodes and to clean up nodes when the cluster is decommissioned.

Terraform
statement {
  sid    = "RedpandaAgentTerminateInstances"
  effect = "Allow"
  actions = [
    "ec2:TerminateInstances",
  ]
  condition {
    test     = "StringEquals"
    variable = "ec2:ResourceTag/redpanda-id"
    values = [
      var.redpanda_id,
    ]
  }
  resources = [
    "*",
  ]
}

Reboot EC2 instances

Scope: Account-wide (*), restricted by a condition on the redpanda-id resource tag so only instances belonging to your Redpanda cluster can be rebooted.

Permission Access Why it is needed

ec2:RebootInstances

Write

Required to restart a cluster node during recovery or maintenance.

Terraform
statement {
  sid    = "RedpandaAgentRebootInstances"
  effect = "Allow"
  actions = [
    "ec2:RebootInstances",
  ]
  condition {
    test     = "StringEquals"
    variable = "ec2:ResourceTag/redpanda-id"
    values = [
      var.redpanda_id,
    ]
  }
  resources = [
    "*",
  ]
}

Read-only, tagging, and provisioning actions (wildcard resources)

Scope: Account-wide (*). These are read-only describe calls, tag operations, launch-template creation, and service-linked role and placement-group actions, granted with an account-wide resource scope.

Permission Access Why it is needed

ec2:CreateTags

Write

Required to tag AWS resources Redpanda Cloud provisions on your behalf so they are clearly identifiable as belonging to your Redpanda cluster.

ec2:DeleteTags

Delete

Required to remove obsolete Redpanda-managed tags from resources that belong to your cluster.

ec2:DescribeTags

Read

Required to inspect resource tags so Redpanda Cloud can identify cluster resources and reconcile their ownership and lifecycle.

ec2:DescribeAccountAttributes

Read

Required to validate your AWS account supports the configuration needed to run your Redpanda cluster.

ec2:DescribeImages

Read

Required to look up the approved machine images used for Redpanda broker and worker nodes.

ec2:DescribeInstances

Read

Required to monitor the EC2 instances that run your Redpanda cluster and reconcile their state during operations.

ec2:DescribeInstanceTypes

Read

Required to validate that the requested instance types are available in your region before provisioning your Redpanda cluster.

ec2:DescribeVolumes

Read

Required to inspect the EBS volumes attached to cluster nodes when reconciling storage configuration.

ec2:DescribeNetworkInterfaces

Read

Required to inspect the network interfaces attached to cluster nodes and endpoints when reconciling network configuration.

ec2:CreateLaunchTemplate

Write

Required to manage the launch templates that define how compute nodes for your Redpanda cluster are provisioned.

ec2:CreateLaunchTemplateVersion

Write

Required to update launch template versions when your Redpanda cluster is upgraded or reconfigured.

ec2:DescribeLaunchTemplateVersions

Read

Required to read launch template versions when reconciling or updating your Redpanda cluster’s compute configuration.

ec2:DescribeLaunchTemplates

Read

Required to read the launch templates associated with your Redpanda cluster’s compute nodes.

iam:ListPolicies

Read

Required to discover existing IAM policies when provisioning or reconciling your Redpanda cluster’s IAM configuration.

iam:ListRoles

Read

Required to discover existing IAM roles when provisioning or reconciling your Redpanda cluster’s IAM configuration.

iam:GetRole

Read

Required to inspect existing IAM roles before Redpanda Cloud creates or updates the roles used by your cluster.

iam:GetOpenIDConnectProvider

Read

Required to read the OIDC provider used to federate Redpanda workloads (such as EKS service accounts) with AWS IAM.

iam:DeleteOpenIDConnectProvider

Delete

Required to clean up the OIDC provider when you decommission your Redpanda cluster.

iam:CreateServiceLinkedRole

Write

Required to create the AWS service-linked roles needed by services (such as EKS and Auto Scaling) that run your Redpanda cluster.

ec2:CreatePlacementGroup

Write

Required to manage placement groups that optimize network performance and availability for your Redpanda broker nodes.

ec2:DeletePlacementGroup

Delete

Required to clean up placement groups when you decommission your Redpanda cluster.

ec2:DescribePlacementGroups

Read

Required to read placement groups used by your Redpanda cluster’s compute nodes.

eks:DescribeNodegroup

Read

Required to read the EKS node groups that host your Redpanda cluster’s workloads.

eks:DeleteNodegroup

Delete

Required to remove EKS node groups when scaling down or decommissioning your Redpanda cluster.

Terraform
statement {
  sid    = "RedpandaAgentActionsOnlyAllowedWithWildcardResources"
  effect = "Allow"
  actions = [
    "ec2:CreateTags",
    "ec2:DeleteTags",
    "ec2:DescribeTags",
    "ec2:DescribeAccountAttributes",
    "ec2:DescribeImages",
    "ec2:DescribeInstances",
    "ec2:DescribeInstanceTypes",
    "ec2:DescribeVolumes",
    "ec2:DescribeNetworkInterfaces",
    "ec2:CreateLaunchTemplate",
    "ec2:CreateLaunchTemplateVersion",
    "ec2:DescribeLaunchTemplateVersions",
    "ec2:DescribeLaunchTemplates",
    "iam:ListPolicies",
    "iam:ListRoles",
    "iam:GetRole",
    "iam:GetOpenIDConnectProvider",
    "iam:DeleteOpenIDConnectProvider",
    "iam:CreateServiceLinkedRole",
    "ec2:CreatePlacementGroup",
    "ec2:DeletePlacementGroup",
    "ec2:DescribePlacementGroups",
    "eks:DescribeNodegroup",
    "eks:DeleteNodegroup"
  ]
  resources = [
    "*",
  ]
}

Networking and connectivity

Creates and manages the VPC, subnets, routes, gateways, security groups, VPC endpoints and endpoint services, load balancers, VPC peering, and Route 53 DNS that isolate cluster traffic and provide connectivity.

Manage the VPC

Scope: Account-wide (*). These VPC networking actions are granted with an account-wide resource scope.

Permission Access Why it is needed

ec2:DescribeVpcs

Read

Required to read the VPC that hosts your Redpanda cluster and validate its configuration.

ec2:DescribeVpcAttribute

Read

Required to read VPC attributes (such as DNS settings) needed to run your Redpanda cluster.

ec2:DescribeSecurityGroups

Read

Required to read the security groups protecting your Redpanda cluster’s network traffic.

ec2:DescribeSecurityGroupRules

Read

Required to inspect individual security group rules and reconcile them with the network access configured for your cluster.

ec2:CreateInternetGateway

Write

Required to provision the internet gateway used for public connectivity to your Redpanda cluster when applicable.

ec2:DeleteInternetGateway

Delete

Required to remove the internet gateway when you decommission your Redpanda cluster.

ec2:AttachInternetGateway

Write

Required to attach the internet gateway to your Redpanda cluster’s VPC.

ec2:DescribeInternetGateways

Read

Required to read the internet gateways associated with your Redpanda cluster’s VPC.

ec2:CreateNatGateway

Write

Required to provision NAT gateways so private subnets in your Redpanda cluster’s VPC can reach AWS APIs and other required services.

ec2:DeleteNatGateway

Delete

Required to remove NAT gateways when you decommission your Redpanda cluster.

ec2:DescribeNatGateways

Read

Required to read NAT gateways used by your Redpanda cluster’s VPC.

ec2:CreateRoute

Write

Required to manage the network routes that direct traffic within and out of your Redpanda cluster’s VPC.

ec2:DeleteRoute

Delete

Required to remove routes when reconfiguring or decommissioning your Redpanda cluster’s network.

ec2:CreateRouteTable

Write

Required to manage the route tables that control traffic flow in your Redpanda cluster’s VPC.

ec2:DeleteRouteTable

Delete

Required to remove route tables when you decommission your Redpanda cluster.

ec2:DescribeRouteTables

Read

Required to read the route tables in your Redpanda cluster’s VPC.

ec2:AssociateRouteTable

Write

Required to associate route tables with subnets in your Redpanda cluster’s VPC.

ec2:CreateSubnet

Write

Required to provision the subnets that host your Redpanda cluster’s nodes across availability zones.

ec2:DeleteSubnet

Delete

Required to remove subnets when you decommission your Redpanda cluster.

ec2:DescribeSubnets

Read

Required to read the subnets that host your Redpanda cluster.

ec2:DescribeVpcPeeringConnections

Read

Required to read VPC peering connections between your network and your Redpanda cluster’s VPC.

ec2:ModifyVpcPeeringConnectionOptions

Write

Required to configure DNS resolution and other options on VPC peering connections that link your network to your Redpanda cluster.

ec2:DescribeNetworkAcls

Read

Required to read the network ACLs in your Redpanda cluster’s VPC.

ec2:DescribeNetworkInterfaces

Read

Required to read the network interfaces used by your Redpanda cluster’s nodes and endpoints.

ec2:AttachNetworkInterface

Write

Required to attach network interfaces to your Redpanda cluster’s compute nodes.

ec2:DetachNetworkInterface

Write

Required to detach network interfaces during reconfiguration or decommissioning of your Redpanda cluster.

ec2:DescribeAvailabilityZones

Read

Required to determine which availability zones are available for placing your Redpanda cluster’s nodes.

Terraform
statement {
  sid    = "RedpandaAgentVPCManagement"
  effect = "Allow"
  actions = [
    "ec2:DescribeVpcs",
    "ec2:DescribeVpcAttribute",
    "ec2:DescribeSecurityGroups",
    "ec2:DescribeSecurityGroupRules",
    "ec2:CreateInternetGateway",
    "ec2:DeleteInternetGateway",
    "ec2:AttachInternetGateway",
    "ec2:DescribeInternetGateways",
    "ec2:CreateNatGateway",
    "ec2:DeleteNatGateway",
    "ec2:DescribeNatGateways",
    "ec2:CreateRoute",
    "ec2:DeleteRoute",
    "ec2:CreateRouteTable",
    "ec2:DeleteRouteTable",
    "ec2:DescribeRouteTables",
    "ec2:AssociateRouteTable",
    "ec2:CreateSubnet",
    "ec2:DeleteSubnet",
    "ec2:DescribeSubnets",
    "ec2:DescribeVpcPeeringConnections",
    "ec2:ModifyVpcPeeringConnectionOptions",
    "ec2:DescribeNetworkAcls",
    "ec2:DescribeNetworkInterfaces",
    "ec2:AttachNetworkInterface",
    "ec2:DetachNetworkInterface",
    "ec2:DescribeAvailabilityZones",
  ]
  resources = [
    "*",
  ]
}

Manage VPC endpoints, endpoint services, and load balancers

Scope: Account-wide (*). These VPC endpoint, endpoint service, and Elastic Load Balancing actions are granted with an account-wide resource scope. They support private connectivity (such as PrivateLink) to your Redpanda cluster.

Permission Access Why it is needed

ec2:CreateVpcEndpoint

Write

Required to provision VPC endpoints (such as PrivateLink) so clients can connect privately to your Redpanda cluster and so your cluster can reach AWS services privately.

ec2:ModifyVpcEndpoint

Write

Required to update VPC endpoint configuration as your Redpanda cluster’s private connectivity requirements evolve.

ec2:DeleteVpcEndpoints

Delete

Required to remove VPC endpoints when you decommission your Redpanda cluster or disable private connectivity.

ec2:DescribeVpcEndpoints

Read

Required to read the VPC endpoints associated with your Redpanda cluster.

ec2:DescribeVpcEndpointServices

Read

Required to discover VPC endpoint services when configuring private connectivity for your Redpanda cluster.

ec2:AcceptVpcEndpointConnections

Write

Required to approve authorized interface endpoint connection requests when the cluster’s PrivateLink service requires acceptance.

ec2:CreateVpcEndpointConnectionNotification

Write

Required to configure notifications for endpoint connection events so Redpanda Cloud can detect and reconcile private connectivity changes.

ec2:CreateVpcEndpointServiceConfiguration

Write

Required to create the PrivateLink endpoint service that exposes your cluster’s endpoints for private connections.

ec2:DescribeVpcEndpointServiceConfigurations

Read

Required to inspect the state and configuration of the PrivateLink endpoint service that exposes your cluster.

ec2:ModifyVpcEndpointServiceConfiguration

Write

Required to update the cluster’s PrivateLink endpoint service as its load balancers, availability, or private connectivity settings change.

ec2:DeleteVpcEndpointServiceConfigurations

Delete

Required to remove the cluster’s PrivateLink endpoint service when private connectivity is disabled or the cluster is decommissioned.

ec2:DeleteVpcEndpointConnectionNotifications

Delete

Required to remove endpoint connection notification configurations during reconfiguration or cleanup.

ec2:DescribeVpcEndpointConnectionNotifications

Read

Required to inspect the notification configurations used to track endpoint connection events.

ec2:DescribeVpcEndpointConnections

Read

Required to inspect endpoint connection requests and their current states when reconciling private connectivity.

ec2:DescribeVpcEndpointServicePermissions

Read

Required to inspect which AWS principals are allowed to request connections to the cluster’s PrivateLink endpoint service.

ec2:ModifyVpcEndpointConnectionNotification

Write

Required to update which endpoint connection events generate notifications and where those notifications are sent.

ec2:ModifyVpcEndpointServicePayerResponsibility

Write

Required to manage the payer responsibility setting on the cluster’s PrivateLink endpoint service.

ec2:ModifyVpcEndpointServicePermissions

Write

Required to add or remove the AWS principals allowed to request connections to the cluster’s PrivateLink endpoint service.

ec2:RejectVpcEndpointConnections

Write

Required to reject unauthorized or obsolete endpoint connection requests to the cluster’s PrivateLink service.

ec2:StartVpcEndpointServicePrivateDnsVerification

Write

Required to verify ownership of the private DNS name before clients use it to access the cluster’s PrivateLink endpoint service.

vpce:AllowMultiRegion

Write

Required when cross-Region PrivateLink connectivity is enabled for the cluster’s endpoint service.

elasticloadbalancing:DescribeLoadBalancers

Read

Required to inspect the load balancers that receive traffic for your cluster’s endpoints.

elasticloadbalancing:CreateListener

Write

Required to create listeners that accept client connections and forward them to the appropriate cluster target groups.

elasticloadbalancing:DeleteListener

Delete

Required to remove obsolete listeners during endpoint reconfiguration or cleanup.

elasticloadbalancing:DescribeListeners

Read

Required to inspect listener ports, protocols, and routing configuration for your cluster’s load balancers.

elasticloadbalancing:DescribeListenerAttributes

Read

Required to inspect listener settings when reconciling your cluster’s endpoint configuration.

elasticloadbalancing:CreateTargetGroup

Write

Required to create target groups containing the cluster services that receive traffic from a load balancer.

elasticloadbalancing:DeleteTargetGroup

Delete

Required to remove target groups when endpoints are reconfigured or the cluster is decommissioned.

elasticloadbalancing:DescribeTargetGroups

Read

Required to inspect target group configuration when reconciling your cluster’s endpoints.

elasticloadbalancing:RegisterTargets

Write

Required to register cluster service endpoints with the target groups that receive client traffic.

elasticloadbalancing:DescribeTags

Read

Required to inspect tags used to identify load-balancing resources that belong to your cluster.

elasticloadbalancing:DescribeLoadBalancerAttributes

Read

Required to inspect load balancer settings when reconciling your cluster’s endpoints.

elasticloadbalancing:AddTags

Write

Required to apply Redpanda-managed tags that identify load-balancing resources belonging to your cluster.

elasticloadbalancing:RemoveTags

Delete

Required to remove obsolete Redpanda-managed tags from your cluster’s load-balancing resources.

elasticloadbalancing:DescribeTargetGroupAttributes

Read

Required to inspect target group settings when reconciling traffic routing to your cluster.

elasticloadbalancing:ModifyTargetGroupAttributes

Write

Required to update target group settings as your cluster’s endpoint requirements change.

Terraform
statement {
  sid    = "RedpandaAgentVPCEndpointService"
  effect = "Allow"
  actions = [
    "ec2:CreateVpcEndpoint",
    "ec2:ModifyVpcEndpoint",
    "ec2:DeleteVpcEndpoints",
    "ec2:DescribeVpcEndpoints",
    "ec2:DescribeVpcEndpointServices",
    "ec2:AcceptVpcEndpointConnections",
    "ec2:CreateVpcEndpointConnectionNotification",
    "ec2:CreateVpcEndpointServiceConfiguration",
    "ec2:DescribeVpcEndpointServiceConfigurations",
    "ec2:ModifyVpcEndpointServiceConfiguration",
    "ec2:DeleteVpcEndpointServiceConfigurations",
    "ec2:DeleteVpcEndpointConnectionNotifications",
    "ec2:DescribeVpcEndpointConnectionNotifications",
    "ec2:DescribeVpcEndpointConnections",
    "ec2:DescribeVpcEndpointServicePermissions",
    "ec2:ModifyVpcEndpointConnectionNotification",
    "ec2:ModifyVpcEndpointServiceConfiguration",
    "ec2:ModifyVpcEndpointServicePayerResponsibility",
    "ec2:ModifyVpcEndpointServicePermissions",
    "ec2:RejectVpcEndpointConnections",
    "ec2:StartVpcEndpointServicePrivateDnsVerification",
    "vpce:AllowMultiRegion",
    "elasticloadbalancing:DescribeLoadBalancers",
    "elasticloadbalancing:CreateListener",
    "elasticloadbalancing:DeleteListener",
    "elasticloadbalancing:DescribeListeners",
    "elasticloadbalancing:DescribeListenerAttributes",
    "elasticloadbalancing:CreateTargetGroup",
    "elasticloadbalancing:DeleteTargetGroup",
    "elasticloadbalancing:DescribeTargetGroups",
    "elasticloadbalancing:RegisterTargets",
    "elasticloadbalancing:DescribeTags",
    "elasticloadbalancing:DescribeLoadBalancerAttributes",
    "elasticloadbalancing:AddTags",
    "elasticloadbalancing:RemoveTags",
    "elasticloadbalancing:DescribeTargetGroupAttributes",
    "elasticloadbalancing:ModifyTargetGroupAttributes",
  ]
  resources = [
    "*",
  ]
}

Manage security groups

Scope: Restricted to security groups in your account and your cluster’s VPC: arn:aws:ec2:*:${local.aws_account_id}:security-group/* and arn:aws:ec2:*:${local.aws_account_id}:vpc/${local.network_config.vpc_id}.

Permission Access Why it is needed

ec2:AuthorizeSecurityGroupEgress

Write

Required to manage the network security rules that control outbound traffic from your Redpanda cluster.

ec2:AuthorizeSecurityGroupIngress

Write

Required to manage the network security rules that control inbound traffic to your Redpanda cluster (such as Kafka client connections).

ec2:CreateSecurityGroup

Write

Required to create the security groups that isolate and protect your Redpanda cluster’s network traffic.

ec2:DeleteSecurityGroup

Delete

Required to remove security groups when you decommission your Redpanda cluster.

ec2:RevokeSecurityGroupEgress

Delete

Required to remove outbound network rules when reconfiguring or decommissioning your Redpanda cluster.

ec2:RevokeSecurityGroupIngress

Delete

Required to remove inbound network rules when reconfiguring or decommissioning your Redpanda cluster.

ec2:UpdateSecurityGroupRuleDescriptionsIngress

Write

Required to keep inbound security group rule descriptions accurate as your Redpanda cluster’s network configuration evolves.

ec2:UpdateSecurityGroupRuleDescriptionsEgress

Write

Required to keep outbound security group rule descriptions accurate as your Redpanda cluster’s network configuration evolves.

ec2:ModifySecurityGroupRules

Write

Required to update security group rules as your Redpanda cluster’s network access requirements change.

Terraform
statement {
  sid    = "RedpandaAgentSecurityGroups"
  effect = "Allow"
  actions = [
    "ec2:AuthorizeSecurityGroupEgress",
    "ec2:AuthorizeSecurityGroupIngress",
    "ec2:CreateSecurityGroup",
    "ec2:DeleteSecurityGroup",
    "ec2:RevokeSecurityGroupEgress",
    "ec2:RevokeSecurityGroupIngress",
    "ec2:UpdateSecurityGroupRuleDescriptionsIngress",
    "ec2:UpdateSecurityGroupRuleDescriptionsEgress",
    "ec2:ModifySecurityGroupRules",
  ]
  resources = [
    "arn:aws:ec2:*:${local.aws_account_id}:security-group/*",
    "arn:aws:ec2:*:${local.aws_account_id}:vpc/${local.network_config.vpc_id}",
  ]
}

Create VPC peering

Scope: Restricted to your cluster’s VPC: arn:aws:ec2:*:${local.aws_account_id}:vpc/${local.network_config.vpc_id}.

Permission Access Why it is needed

ec2:CreateVpcPeeringConnection

Write

Required to establish VPC peering between your network and your Redpanda cluster’s VPC for private connectivity.

Terraform
statement {
  sid    = "RedpandaAgentVPCPeeringsCreate"
  effect = "Allow"
  actions = [
    "ec2:CreateVpcPeeringConnection",
  ]
  resources = [
    "arn:aws:ec2:*:${local.aws_account_id}:vpc/${local.network_config.vpc_id}",
  ]
}

Delete VPC peering

Scope: Restricted to VPC peering connections in your account: arn:aws:ec2:*:${local.aws_account_id}:vpc-peering-connection/*, further restricted by a condition on the redpanda-id resource tag.

Permission Access Why it is needed

ec2:DeleteVpcPeeringConnection

Delete

Required to tear down VPC peering when you disable private connectivity or decommission your Redpanda cluster.

ec2:ModifyVpcPeeringConnectionOptions

Write

Required to configure DNS resolution and other options on VPC peering connections that link your network to your Redpanda cluster.

Terraform
statement {
  sid    = "RedpandaAgentVPCPeeringsDelete"
  effect = "Allow"
  actions = [
    "ec2:DeleteVpcPeeringConnection",
    "ec2:ModifyVpcPeeringConnectionOptions",
  ]
  resources = [
    "arn:aws:ec2:*:${local.aws_account_id}:vpc-peering-connection/*",
  ]
  condition {
    test     = "StringEquals"
    variable = "ec2:ResourceTag/redpanda-id"
    values = [
      var.redpanda_id,
    ]
  }
}

Delete network interfaces

Scope: Restricted to network interfaces in your account: arn:aws:ec2:*:${local.aws_account_id}:network-interface/*.

Permission Access Why it is needed

ec2:DeleteNetworkInterface

Delete

Required to remove network interfaces when reconfiguring or decommissioning your Redpanda cluster.

Terraform
statement {
  sid    = "RedpandaAgentNetworkInterfaceDelete"
  effect = "Allow"
  actions = [
    "ec2:DeleteNetworkInterface",
  ]
  resources = [
    "arn:aws:ec2:*:${local.aws_account_id}:network-interface/*",
  ]
}

Manage Route 53 DNS

Scope: Account-wide (*). These Route 53 actions are granted with an account-wide resource scope.

Permission Access Why it is needed

route53:CreateHostedZone

Write

Required to create the DNS hosted zone used for your Redpanda cluster’s endpoints.

route53:GetChange

Read

Required to track the status of DNS record changes made for your Redpanda cluster.

route53:ChangeTagsForResource

Write

Required to tag Route 53 resources so they are clearly identifiable as belonging to your Redpanda cluster.

route53:GetHostedZone

Read

Required to read the DNS hosted zone associated with your Redpanda cluster.

route53:ListTagsForResource

Read

Required to read tags on Route 53 resources during reconciliation of your Redpanda cluster’s DNS configuration.

route53:ListResourceRecordSets

Read

Required to read the DNS records that resolve your Redpanda cluster’s endpoints.

route53:ChangeResourceRecordSets

Write

Required to manage the DNS records that resolve your Redpanda cluster’s Kafka, HTTP, and admin endpoints.

route53:GetDNSSEC

Read

Required to read DNSSEC configuration on the hosted zone used by your Redpanda cluster.

route53:DeleteHostedZone

Delete

Required to remove the DNS hosted zone when you decommission your Redpanda cluster.

Terraform
statement {
  sid    = "RedpandaAgentRoute53Management"
  effect = "Allow"
  actions = [
    "route53:CreateHostedZone",
    "route53:GetChange",
    "route53:ChangeTagsForResource",
    "route53:GetHostedZone",
    "route53:ListTagsForResource",
    "route53:ListResourceRecordSets",
    "route53:ChangeResourceRecordSets",
    "route53:GetDNSSEC",
    "route53:DeleteHostedZone",
  ]
  resources = [
    "*",
  ]
}

Storage

Manages the S3 buckets backing Tiered Storage and the cluster management bucket. The s3:* action is scoped to the specific management bucket.

Manage the S3 management bucket

Scope: Restricted to the cluster management bucket: data.aws_s3_bucket.management.arn and its objects.

Permission Access Why it is needed

s3:*

Full

Required to manage the S3 bucket that backs your Redpanda cluster’s management data, including full lifecycle (create, configure, read, write, delete).

Terraform
statement {
  sid    = "RedpandaAgentS3ManagementBucket"
  effect = "Allow"
  actions = [
    "s3:*",
  ]
  resources = [
    data.aws_s3_bucket.management.arn,
    "${data.aws_s3_bucket.management.arn}/*",
  ]
}

Manage the S3 Tiered Storage bucket

Scope: Restricted to the cluster’s cloud storage bucket: local.redpanda_cloud_storage_bucket_arn and its objects.

Permission Access Why it is needed

s3:PutBucketPolicy

Write

Required to apply the bucket policies that restrict access to your Redpanda cluster’s Tiered Storage bucket.

s3:DeleteBucketPolicy

Delete

Required to remove bucket policies during reconfiguration or cleanup of your Redpanda cluster’s storage.

s3:List*

Read

Required to list objects used by your Redpanda cluster for Tiered Storage and backups.

s3:Get*

Read

Required to read bucket configuration and objects used by your Redpanda cluster for Tiered Storage and backups.

s3:CreateBucket

Write

Required to create the S3 bucket that backs your Redpanda cluster’s Tiered Storage and backups.

s3:DeleteBucket

Delete

Required to remove the S3 bucket when you decommission your Redpanda cluster.

Terraform
statement {
  sid    = "RedpandaAgentS3CloudStorageBucket"
  effect = "Allow"
  actions = [
    "s3:PutBucketPolicy",
    "s3:DeleteBucketPolicy",
    "s3:List*",
    "s3:Get*",
    "s3:CreateBucket",
    "s3:DeleteBucket"
  ]
  resources = [
    local.redpanda_cloud_storage_bucket_arn,
    "${local.redpanda_cloud_storage_bucket_arn}/*",
  ]
}

Identity and access

Creates the least-privilege roles, policies, instance profiles, and OIDC federation the cluster components need. Every statement here is scoped to resources named for your cluster.

Manage IAM roles

Scope: Restricted to IAM roles named for your cluster (storage manager, agent, connectors, and console roles).

Permission Access Why it is needed

iam:CreateRole

Write

Required to create the IAM roles used by your Redpanda cluster’s control plane, data plane, and workload components.

iam:DeleteRole

Delete

Required to remove IAM roles when you decommission your Redpanda cluster.

iam:AttachRolePolicy

Write

Required to attach the necessary IAM policies to your Redpanda cluster’s roles.

iam:DetachRolePolicy

Delete

Required to detach IAM policies from roles during reconfiguration or cleanup.

iam:TagRole

Write

Required to tag IAM roles so they are clearly identifiable as belonging to your Redpanda cluster.

iam:UntagRole

Delete

Required to remove obsolete Redpanda-managed tags from IAM roles that belong to your cluster.

iam:GetRole

Read

Required to read IAM roles while reconciling your Redpanda cluster’s IAM configuration.

iam:GetRolePolicy

Read

Required to inspect inline policies on your cluster’s IAM roles when reconciling their permissions.

iam:PassRole

Write

Required so Redpanda Cloud can pass cluster-specific IAM roles to AWS services such as EC2 and EKS when creating resources for your cluster.

iam:UpdateAssumeRolePolicy

Write

Required to update trust policies on Redpanda-managed workload roles as cluster identities or federation settings change.

iam:ListAttachedRolePolicies

Read

Required to read the policies attached to your Redpanda cluster’s IAM roles during reconciliation.

iam:ListInstanceProfilesForRole

Read

Required to read the instance profiles associated with your Redpanda cluster’s IAM roles during reconciliation.

iam:ListRolePolicies

Read

Required to read the inline policies attached to your Redpanda cluster’s IAM roles during reconciliation.

Terraform
statement {
  sid    = "RedpandaAgentIAMRoleManagement"
  effect = "Allow"
  actions = [
    "iam:CreateRole",
    "iam:DeleteRole",
    "iam:AttachRolePolicy",
    "iam:DetachRolePolicy",
    "iam:TagRole",
    "iam:UntagRole",
    "iam:GetRole",
    "iam:GetRolePolicy",
    "iam:PassRole",
    "iam:UpdateAssumeRolePolicy",
    "iam:ListAttachedRolePolicies",
    "iam:ListInstanceProfilesForRole",
    "iam:ListRolePolicies",
  ]
  resources = [
    "arn:aws:iam::${local.aws_account_id}:role/redpanda-cloud-storage-manager-${var.redpanda_id}",
    "arn:aws:iam::${local.aws_account_id}:role/redpanda-agent-${var.redpanda_id}*",
    "arn:aws:iam::${local.aws_account_id}:role/redpanda-${var.redpanda_id}*",
    "arn:aws:iam::${local.aws_account_id}:role/redpanda-connectors-secrets-manager-${var.redpanda_id}*",
    "arn:aws:iam::${local.aws_account_id}:role/redpanda-console-secrets-manager-${var.redpanda_id}*",
  ]
}

Manage IAM policies

Scope: Restricted to IAM policies named for your cluster (agent, autoscaler, storage manager, glue manager, secrets managers, and add-on policies).

Permission Access Why it is needed

iam:CreatePolicy

Write

Required to create the IAM policies that grant your Redpanda cluster the minimum AWS permissions it needs to operate.

iam:CreatePolicyVersion

Write

Required to publish updated permissions for a cluster-managed IAM policy without replacing its policy ARN.

iam:DeletePolicy

Delete

Required to remove IAM policies when you decommission your Redpanda cluster.

iam:DeletePolicyVersion

Delete

Required to remove obsolete, nondefault versions of cluster-managed IAM policies after an update.

iam:GetPolicy

Read

Required to read IAM policies while reconciling your Redpanda cluster’s IAM configuration.

iam:GetPolicyVersion

Read

Required to read specific versions of IAM policies while reconciling your Redpanda cluster’s IAM configuration.

iam:ListPolicyVersions

Read

Required to list IAM policy versions while reconciling and updating your Redpanda cluster’s IAM configuration.

iam:TagPolicy

Write

Required to tag IAM policies so they are clearly identifiable as belonging to your Redpanda cluster.

iam:UntagPolicy

Delete

Required to remove obsolete Redpanda-managed tags from IAM policies that belong to your cluster.

Terraform
statement {
  sid    = "RedpandaAgentIAMPolicies"
  effect = "Allow"
  actions = [
    "iam:CreatePolicy",
    "iam:CreatePolicyVersion",
    "iam:DeletePolicy",
    "iam:DeletePolicyVersion",
    "iam:GetPolicy",
    "iam:GetPolicyVersion",
    "iam:ListPolicyVersions",
    "iam:TagPolicy",
    "iam:UntagPolicy"
  ]
  resources = [
    "arn:aws:iam::${local.aws_account_id}:policy/aws_ebs_csi_driver-redpanda-${var.redpanda_id}",
    "arn:aws:iam::${local.aws_account_id}:policy/cert_manager_policy-${var.redpanda_id}",
    "arn:aws:iam::${local.aws_account_id}:policy/external_dns_policy-${var.redpanda_id}",
    "arn:aws:iam::${local.aws_account_id}:policy/load_balancer_controller-${var.redpanda_id}",
    "arn:aws:iam::${local.aws_account_id}:policy/redpanda-agent-${var.redpanda_id}*",
    "arn:aws:iam::${local.aws_account_id}:policy/redpanda-${var.redpanda_id}*",
    "arn:aws:iam::${local.aws_account_id}:policy/redpanda-${var.redpanda_id}-autoscaler",
    "arn:aws:iam::${local.aws_account_id}:policy/redpanda-cloud-storage-manager-${var.redpanda_id}",
    "arn:aws:iam::${local.aws_account_id}:policy/redpanda-glue-manager-${var.redpanda_id}",
    "arn:aws:iam::${local.aws_account_id}:policy/secrets_manager_policy-${var.redpanda_id}",
    "arn:aws:iam::${local.aws_account_id}:policy/redpanda-connectors-secrets-manager-${var.redpanda_id}",
    "arn:aws:iam::${local.aws_account_id}:policy/redpanda-console-secrets-manager-${var.redpanda_id}",
  ]
}

Manage instance profiles

Scope: Restricted to instance profiles named for your cluster: redpanda-${var.redpanda_id}* and redpanda-agent-${var.redpanda_id}*.

Permission Access Why it is needed

iam:AddRoleToInstanceProfile

Write

Required to attach IAM roles to instance profiles so your Redpanda cluster nodes have the AWS permissions they need to run.

iam:RemoveRoleFromInstanceProfile

Delete

Required to detach IAM roles from instance profiles when reconfiguring or decommissioning your Redpanda cluster.

iam:CreateInstanceProfile

Write

Required to create the instance profiles used by your Redpanda cluster’s compute nodes.

iam:DeleteInstanceProfile

Delete

Required to clean up instance profiles when you decommission your Redpanda cluster.

iam:GetInstanceProfile

Read

Required to read the instance profiles associated with your Redpanda cluster.

iam:TagInstanceProfile

Write

Required to tag instance profiles so they are clearly identifiable as belonging to your Redpanda cluster.

iam:UntagInstanceProfile

Delete

Required to remove obsolete Redpanda-managed tags from instance profiles that belong to your cluster.

Terraform
statement {
  sid    = "RedpandaAgentInstanceProfile"
  effect = "Allow"
  actions = [
    "iam:AddRoleToInstanceProfile",
    "iam:RemoveRoleFromInstanceProfile",
    "iam:CreateInstanceProfile",
    "iam:DeleteInstanceProfile",
    "iam:GetInstanceProfile",
    "iam:TagInstanceProfile",
    "iam:UntagInstanceProfile",
  ]
  resources = [
    "arn:aws:iam::${local.aws_account_id}:instance-profile/redpanda-${var.redpanda_id}*",
    "arn:aws:iam::${local.aws_account_id}:instance-profile/redpanda-agent-${var.redpanda_id}*",
  ]
}

Create EKS OIDC providers

Scope: Restricted to EKS OIDC providers: arn:aws:iam::${local.aws_account_id}:oidc-provider/oidc.eks.*.amazonaws.com and their IDs.

Permission Access Why it is needed

iam:CreateOpenIDConnectProvider

Write

Required to establish the OIDC federation that allows workloads in your Redpanda cluster (such as EKS service accounts) to assume AWS IAM roles.

iam:TagOpenIDConnectProvider

Write

Required to tag the OIDC provider so it is clearly identifiable as belonging to your Redpanda cluster.

iam:UntagOpenIDConnectProvider

Delete

Required to remove tags from the OIDC provider during reconfiguration or cleanup.

Terraform
statement {
  sid    = "RedpandaAgentEKSOIDCProvider"
  effect = "Allow"
  actions = [
    "iam:CreateOpenIDConnectProvider",
    "iam:TagOpenIDConnectProvider",
    "iam:UntagOpenIDConnectProvider",
  ]
  resources = [
    "arn:aws:iam::${local.aws_account_id}:oidc-provider/oidc.eks.*.amazonaws.com",
    "arn:aws:iam::${local.aws_account_id}:oidc-provider/oidc.eks.*.amazonaws.com/id/*",
  ]
}

Rotate EKS OIDC provider thumbprint

Scope: Restricted to EKS OIDC providers, further restricted by a condition on the redpanda-id resource tag.

Permission Access Why it is needed

iam:UpdateOpenIDConnectProviderThumbprint

Write

Required to rotate the OIDC provider thumbprint to keep federation with AWS IAM secure and current.

Terraform
statement {
  sid    = "RedpandaAgentEKSOIDCProviderCACertThumbprintUpdate"
  effect = "Allow"
  actions = [
    "iam:UpdateOpenIDConnectProviderThumbprint",
  ]
  resources = [
    "arn:aws:iam::${local.aws_account_id}:oidc-provider/oidc.eks.*.amazonaws.com",
    "arn:aws:iam::${local.aws_account_id}:oidc-provider/oidc.eks.*.amazonaws.com/id/*",
  ]
  condition {
    test     = "StringEquals"
    variable = "aws:ResourceTag/redpanda-id"
    values = [
      var.redpanda_id,
    ]
  }
}

Secrets management

Cleans up the AWS Secrets Manager secrets Redpanda creates for your cluster when the cluster is destroyed.

Delete cluster secrets

Scope: Restricted to secrets under arn:aws:secretsmanager:${var.region}:*:secret:redpanda/${var.redpanda_id}/*, further restricted by a condition on the owner resource tag (console).

Permission Access Why it is needed

secretsmanager:DeleteSecret

Delete

Required to delete the secrets Redpanda creates for your cluster when the cluster is destroyed.

Terraform
statement {
  effect = "Allow"
  actions = [
    "secretsmanager:DeleteSecret"
  ]
  resources = [
    "arn:aws:secretsmanager:${var.region}:*:secret:redpanda/${var.redpanda_id}/*"
  ]
  condition {
    test     = "StringEquals"
    values   = ["console"]
    variable = "aws:ResourceTag/owner"
  }
}

List secrets

Scope: Account-wide (*). This list action is granted with an account-wide resource scope.

Permission Access Why it is needed

secretsmanager:ListSecrets

Read

Required to find the secrets to delete when your Redpanda cluster is destroyed.

Terraform
statement {
  effect = "Allow"
  actions = [
    "secretsmanager:ListSecrets",
  ]
  resources = [
    "*"
  ]
}

Monitoring

Read CloudWatch metrics

Scope: Account-wide (*). This metrics action is granted with an account-wide resource scope.

Permission Access Why it is needed

cloudwatch:GetMetricData

Read

Required to read infrastructure metric time series used to monitor and reconcile the AWS resources supporting your cluster.

Terraform
statement {
  sid    = "RedpandaAgentCloudWatch"
  effect = "Allow"
  actions = [
    "cloudwatch:GetMetricData",
  ]
  resources = [
    "*",
  ]
}

Coordination state

Reads and writes the small amount of state Redpanda uses to serialize Terraform operations safely, and reads the caller identity.

Manage the DynamoDB Terraform backend

Scope: Restricted to the cluster’s Terraform state table: arn:aws:dynamodb:*:${local.aws_account_id}:table/rp-${local.aws_account_id}*.

Permission Access Why it is needed

dynamodb:GetItem

Read

Required to read state that Redpanda Cloud stores in DynamoDB to coordinate operations against your cluster.

dynamodb:PutItem

Write

Required to write coordination state that Redpanda Cloud uses to safely manage operations against your cluster.

dynamodb:DeleteItem

Delete

Required to clean up coordination state stored in DynamoDB during cluster operations and decommissioning.

Terraform
statement {
  sid    = "RedpandaAgentTFBackend"
  effect = "Allow"
  actions = [
    "dynamodb:GetItem",
    "dynamodb:PutItem",
    "dynamodb:DeleteItem",
  ]
  resources = [
    "arn:aws:dynamodb:*:${local.aws_account_id}:table/rp-${local.aws_account_id}*",
  ]
}

Read the caller identity

Scope: Account-wide (*).

Permission Access Why it is needed

sts:GetCallerIdentity

N/A

Used to identify the assumed role and AWS account Redpanda is operating as. AWS does not require an IAM grant for this operation, so the statement is retained as a no-op to avoid AWS policy-detachment conflicts.

Terraform
statement {
  sid    = "RedpandaAgentNoopPolicy"
  effect = "Allow"
  actions = [
    "sts:GetCallerIdentity"
  ]
  resources = [
    "*"
  ]
}

Optional feature permissions

The following permissions support optional features: AI Gateway and Redpanda SQL. They are scoped by resource name to those features' resources (ai-gateway-*, oxla-*).

Manage ElastiCache for the AI Gateway

Scope: Restricted to ElastiCache resources named ai-gateway-${var.redpanda_id}*.

Permission Access Why it is needed

elasticache:CreateUser

Write

Required to create the ElastiCache user that AI Gateway uses to authenticate to its serverless cache.

elasticache:AddTagsToResource

Write

Required to tag AI Gateway ElastiCache resources for identification, reconciliation, and lifecycle management.

elasticache:DescribeUsers

Read

Required to inspect AI Gateway cache users and reconcile their authentication configuration.

elasticache:ListTagsForResource

Read

Required to inspect tags on AI Gateway ElastiCache resources during reconciliation.

elasticache:DeleteUser

Delete

Required to remove an AI Gateway cache user when the cache configuration is replaced or the feature is decommissioned.

elasticache:CreateUserGroup

Write

Required to create the ElastiCache user group that controls which users can access the AI Gateway cache.

elasticache:DescribeUserGroups

Read

Required to inspect the user group associated with the AI Gateway cache and reconcile its membership.

elasticache:DeleteUserGroup

Delete

Required to remove the AI Gateway cache user group during reconfiguration or decommissioning.

elasticache:CreateServerlessCache

Write

Required to provision the serverless ElastiCache resource used by AI Gateway.

elasticache:DeleteServerlessCache

Delete

Required to remove the AI Gateway serverless cache when the feature or cluster is decommissioned.

elasticache:DescribeServerlessCaches

Read

Required to inspect the state and configuration of the serverless cache used by AI Gateway.

Terraform
statement {
  sid    = "RedpandaElastiCache"
  effect = "Allow"
  actions = [
    "elasticache:CreateUser",
    "elasticache:AddTagsToResource",
    "elasticache:DescribeUsers",
    "elasticache:ListTagsForResource",
    "elasticache:DeleteUser",
    "elasticache:CreateUserGroup",
    "elasticache:DescribeUserGroups",
    "elasticache:DeleteUserGroup",
    "elasticache:CreateServerlessCache",
    "elasticache:DeleteServerlessCache",
    "elasticache:DescribeServerlessCaches",
  ]
  resources = [
    "arn:aws:elasticache:*:*:*:ai-gateway-${var.redpanda_id}*",
  ]
}

Manage RDS Aurora for the AI Gateway

Scope: Restricted to RDS resources named ai-gateway-${var.redpanda_id}* (clusters, instances, subnet groups, and parameter groups).

Permission Access Why it is needed

rds:CreateDBCluster

Write

Required to create the Aurora DB cluster used by AI Gateway.

rds:DeleteDBCluster

Delete

Required to remove the AI Gateway Aurora DB cluster when the feature or cluster is decommissioned.

rds:DescribeDBClusters

Read

Required to inspect the state and configuration of the Aurora DB cluster used by AI Gateway.

rds:ModifyDBCluster

Write

Required to update the AI Gateway Aurora DB cluster as its configuration changes.

rds:CreateDBInstance

Write

Required to create the database instances that provide compute capacity for the AI Gateway Aurora cluster.

rds:DeleteDBInstance

Delete

Required to remove AI Gateway Aurora database instances during replacement, scaling, or decommissioning.

rds:DescribeDBInstances

Read

Required to inspect the state and configuration of the database instances in the AI Gateway Aurora cluster.

rds:ModifyDBInstance

Write

Required to update the database instances in the AI Gateway Aurora cluster.

rds:CreateDBSubnetGroup

Write

Required to create the subnet group that places the AI Gateway Aurora database in the appropriate cluster subnets.

rds:DeleteDBSubnetGroup

Delete

Required to remove the AI Gateway database subnet group during cleanup.

rds:DescribeDBSubnetGroups

Read

Required to inspect the subnet group used by the AI Gateway Aurora database.

rds:CreateDBClusterParameterGroup

Write

Required to create the parameter group that configures the AI Gateway Aurora DB cluster.

rds:DeleteDBClusterParameterGroup

Delete

Required to remove the AI Gateway database parameter group during cleanup.

rds:DescribeDBClusterParameterGroups

Read

Required to inspect the parameter group associated with the AI Gateway Aurora DB cluster.

rds:DescribeDBClusterParameters

Read

Required to inspect the database parameters applied to the AI Gateway Aurora DB cluster.

rds:ModifyDBClusterParameterGroup

Write

Required to update database parameters for the AI Gateway Aurora DB cluster.

rds:AddTagsToResource

Write

Required to tag AI Gateway RDS resources for identification, reconciliation, and lifecycle management.

rds:ListTagsForResource

Read

Required to inspect tags on AI Gateway RDS resources during reconciliation.

rds:RemoveTagsFromResource

Delete

Required to remove obsolete Redpanda-managed tags from AI Gateway RDS resources.

rds:DescribeDBEngineVersions

Read

Required to identify supported Aurora engine versions before creating or upgrading the AI Gateway database.

Terraform
statement {
  sid    = "RedpandaRDSAurora"
  effect = "Allow"
  actions = [
    "rds:CreateDBCluster",
    "rds:DeleteDBCluster",
    "rds:DescribeDBClusters",
    "rds:ModifyDBCluster",
    "rds:CreateDBInstance",
    "rds:DeleteDBInstance",
    "rds:DescribeDBInstances",
    "rds:ModifyDBInstance",
    "rds:CreateDBSubnetGroup",
    "rds:DeleteDBSubnetGroup",
    "rds:DescribeDBSubnetGroups",
    "rds:CreateDBClusterParameterGroup",
    "rds:DeleteDBClusterParameterGroup",
    "rds:DescribeDBClusterParameterGroups",
    "rds:DescribeDBClusterParameters",
    "rds:ModifyDBClusterParameterGroup",
    "rds:AddTagsToResource",
    "rds:ListTagsForResource",
    "rds:RemoveTagsFromResource",
    "rds:DescribeDBEngineVersions",
  ]
  resources = [
    "arn:aws:rds:*:*:cluster:ai-gateway-${var.redpanda_id}*",
    "arn:aws:rds:*:*:db:ai-gateway-${var.redpanda_id}*",
    "arn:aws:rds:*:*:subgrp:ai-gateway-${var.redpanda_id}*",
    "arn:aws:rds:*:*:cluster-pg:ai-gateway-${var.redpanda_id}*",
  ]
}

Describe RDS Aurora resources

Scope: Account-wide (*). These describe actions are granted with an account-wide resource scope.

Permission Access Why it is needed

rds:DescribeDBClusters

Read

Required to discover and inspect Aurora DB clusters when reconciling the AI Gateway database.

rds:DescribeDBInstances

Read

Required to discover and inspect database instances when reconciling the AI Gateway Aurora cluster.

rds:DescribeDBSubnetGroups

Read

Required to discover and inspect subnet groups available to the AI Gateway Aurora database.

rds:DescribeDBClusterParameterGroups

Read

Required to discover and inspect parameter groups used by the AI Gateway Aurora cluster.

rds:DescribeDBClusterParameters

Read

Required to inspect the parameters defined in AI Gateway Aurora cluster parameter groups.

rds:DescribeDBEngineVersions

Read

Required to discover Aurora engine versions supported in the AWS account and Region.

rds:DescribeGlobalClusters

Read

Required to inspect Aurora global database configuration when AI Gateway uses a multi-Region database topology.

Terraform
statement {
  sid    = "RedpandaRDSAuroraDescribe"
  effect = "Allow"
  actions = [
    "rds:DescribeDBClusters",
    "rds:DescribeDBInstances",
    "rds:DescribeDBSubnetGroups",
    "rds:DescribeDBClusterParameterGroups",
    "rds:DescribeDBClusterParameters",
    "rds:DescribeDBEngineVersions",
    "rds:DescribeGlobalClusters",
  ]
  resources = [
    "*",
  ]
}

Manage Redpanda SQL storage buckets

Scope: Restricted to S3 buckets named oxla-* (the internal resource name for Redpanda SQL).

Permission Access Why it is needed

s3:PutBucketPolicy

Write

Required to apply the bucket policy that restricts access to the S3 buckets used by Redpanda SQL.

s3:DeleteBucketPolicy

Delete

Required to remove or replace a Redpanda SQL bucket policy during reconfiguration or cleanup.

s3:List*

Read

Required to inspect Redpanda SQL bucket contents and configuration during reconciliation and cleanup.

s3:Get*

Read

Required to read configuration and objects from the S3 buckets used by Redpanda SQL.

s3:CreateBucket

Write

Required to create the S3 buckets used by Redpanda SQL.

s3:DeleteBucket

Delete

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

s3:PutBucketTagging

Write

Required to tag Redpanda SQL buckets for identification, reconciliation, and lifecycle management.

s3:PutBucketPublicAccessBlock

Write

Required to block public access to the S3 buckets used by Redpanda SQL.

s3:PutEncryptionConfiguration

Write

Required to configure encryption at rest for the S3 buckets used by Redpanda SQL.

s3:PutBucketOwnershipControls

Write

Required to enforce bucket-owner control of objects stored in Redpanda SQL buckets.

s3:DeleteObject

Delete

Required to remove Redpanda SQL objects during cleanup or when the feature is decommissioned.

s3:DeleteObjectVersion

Delete

Required to remove versioned Redpanda SQL objects during bucket cleanup.

Terraform
statement {
  sid    = "RedpandaAgentOxlaCreateBucket"
  effect = "Allow"
  actions = [
    "s3:PutBucketPolicy",
    "s3:DeleteBucketPolicy",
    "s3:List*",
    "s3:Get*",
    "s3:CreateBucket",
    "s3:DeleteBucket",
    "s3:PutBucketTagging",
    "s3:PutBucketPublicAccessBlock",
    "s3:PutEncryptionConfiguration",
    "s3:PutBucketOwnershipControls",
    "s3:DeleteObject",
    "s3:DeleteObjectVersion"
  ]
  resources = ["arn:aws:s3:::oxla-*", "arn:aws:s3:::oxla-*/*"]
}