Redpanda Cloud BYOC Clusters

VerifiedCaution

Provisions and manages Redpanda Cloud BYOC clusters via the Control Plane API and rpk cloud byoc plugin, where your VPC, IAM roles, and storage stay in your own AWS, GCP, or Azure account.

Sby Skills Guide Bot
DevOpsAdvanced
8/5/2026
Claude Code
#redpanda#byoc#infrastructure-provisioning#terraform#iam

Recommended for

Automated summary

This skill walks through provisioning and managing Redpanda Cloud BYOC (Bring Your Own Cloud) clusters through the Control Plane API and the `rpk cloud byoc` plugin, keeping the VPC, IAM roles, and storage inside the customer's own AWS, GCP, or Azure account.

Strengths

  • Lays out the full three-phase flow (Network → TYPE_BYOC Cluster → `rpk cloud byoc apply`) with copy-pasteable curl commands and Operation polling loops.
  • Covers private connectivity on all three clouds (AWS PrivateLink, GCP Private Service Connect, Azure Private Link, VPC peering, Transit Gateway) plus cross-account AWS access registration.
  • Defines clear scope boundaries by pointing to the Serverless and Dedicated skills, and flags Enterprise capabilities such as Tiered Storage, Cloud Topics, Iceberg Topics, RBAC, and Shadow Link.

Limitations

  • Assumes an existing Redpanda Cloud organization, OAuth2 credentials, and IAM permissions on the target cloud account.
  • Tightly coupled to specific API values (throughput tiers like `tier-1-aws-v2-arm`, zone names) that can change and break the commands.
  • The provided document truncates mid-way through cluster creation, and teardown, Terraform drift, and troubleshooting are only lightly covered.
When to use it

Use it when you need to stand up or wire a BYOC Redpanda cluster in your own AWS, GCP, or Azure account with your own IAM, buckets, and networking.

When not to use it

Skip it when you want a fully Redpanda-managed Serverless or Dedicated cluster, or when you don't control the target cloud account and its IAM roles.

Security analysis

Caution
Quality score78/100

All endpoints and commands are legitimate, documented Redpanda Cloud operations — there is no obfuscation, no curl|sh piping, no exfiltration to third-party hosts, and no attempt to disable safety controls. However, the skill drives privileged cloud infrastructure (Terraform apply, cross-account IAM, network wiring) with real credentials, and it places a client secret on the command line and uses unbounded polling loops, so it warrants caution rather than a clean 'safe' rating.

Findings
  • •Runs `rpk cloud byoc aws apply`, which executes Terraform in the user's cloud account and can create/modify IAM roles, VPCs, subnets, buckets, and PrivateLink endpoints — high-impact infrastructure changes with no dry-run or confirmation step described.
  • •OAuth client secret is passed as a command-line flag (`-X cloud.client_secret=...`), exposing it to process listings, shell history, and logs; env vars / config file / `rpk` profile would be safer.
  • •Quickstart writes and reads long-lived bearer tokens in shell variables and pipes to `jq`; no guidance on token handling, scoping, or rotation.
  • •Polling loops (`until ... do sleep`) have no timeout or failure branch, so a stuck operation or auth failure will hang or spin indefinitely; destructive/teardown guidance (deleting networks/clusters, removing IAM roles) is implied by the description but not shown, increasing risk of unrecoverable mistakes.
  • •No declared allowed-tools, so the agent's use of bash/network/Terraform is unbounded by the manifest.
How this analysis is made

Examples

Create a BYOC cluster on AWS
Create a Redpanda BYOC cluster named prod-events in us-east-1 across three zones using resource group my-byoc-rg, then poll the operations until the network and cluster are both STATE_COMPLETED.
Attach private connectivity
My BYOC cluster on AWS is up but I need private access from my application VPC — set up AWS PrivateLink and register the cross-account IAM role Redpanda needs.
Wire customer-managed storage and IAM
Hook my own S3 bucket and customer-managed IAM roles into the existing BYOC cluster, then apply the changes with `rpk cloud byoc apply --redpanda-id <id>`.

name: cloud-byoc description: >- Provisions and manages Redpanda Cloud BYOC (Bring Your Own Cloud) clusters via the Control Plane API (api.redpanda.com) and the rpk cloud byoc plugin, where your VPC, IAM roles, and storage stay in your own AWS, GCP, or Azure account. Use when creating or tearing down BYOC clusters and Networks; wiring customer-managed IAM roles, buckets, or subnets into a cluster; setting up private connectivity (AWS PrivateLink, GCP Private Service Connect, Azure Private Link, VPC peering, or Transit Gateway egress); registering cross-account AWS access; managing Shadow Link cross-cluster DR; running rpk cloud byoc apply; or enabling Enterprise features (Tiered Storage, Cloud Topics, Iceberg Topics, Continuous Data Balancing, RBAC, and more) on a BYOC cluster. For Serverless clusters, see /redpanda:cloud-serverless; for fully Redpanda-managed Dedicated clusters, see /redpanda:cloud-dedicated.

Redpanda Cloud API: BYOC Clusters

BYOC (Bring Your Own Cloud) lets you run Redpanda in your own AWS, GCP, or Azure account: Redpanda manages the control plane and agent lifecycle, while your VPC, IAM roles, and storage buckets stay under your cloud account. You pay cloud infrastructure costs directly. This is the primary alternative to Serverless, which runs entirely in Redpanda's account.

The provisioning workflow has three phases: (1) create a Network resource that registers your VPC/VNet with Redpanda, (2) create a Cluster resource of TYPE_BYOC referencing that network, and (3) run rpk cloud byoc apply --redpanda-id <id> to execute the Terraform that installs the agent in your cloud account.

Both the Network and Cluster create calls return an Operation object — poll GET /v1/operations/{id} until state is STATE_COMPLETED before proceeding.

Quickstart

# 1. Get an OAuth2 bearer token (client credentials flow)
TOKEN=$(curl -s -X POST "https://auth.prd.cloud.redpanda.com/oauth/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials" \
  -d "client_id=${CLIENT_ID}" \
  -d "client_secret=${CLIENT_SECRET}" \
  -d "audience=cloudv2-production.redpanda.cloud" \
  | jq -r '.access_token')

BASE="https://api.redpanda.com"

# 2. Create (or identify) a Resource Group
curl -s -X POST "${BASE}/v1/resource-groups" \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"resource_group": {"name": "my-byoc-rg"}}' | jq .

RG_ID="<resource_group_id from response>"

# 3. Create a Network (AWS example — Redpanda-managed VPC, CIDR-based)
NET_OP=$(curl -s -X POST "${BASE}/v1/networks" \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d "{
    \"network\": {
      \"name\": \"my-byoc-network\",
      \"resource_group_id\": \"${RG_ID}\",
      \"cloud_provider\": \"CLOUD_PROVIDER_AWS\",
      \"region\": \"us-east-1\",
      \"cidr_block\": \"10.0.0.0/20\",
      \"cluster_type\": \"TYPE_BYOC\"
    }
  }" | jq .)

NET_OP_ID=$(echo "${NET_OP}" | jq -r '.operation.id')

# 4. Poll the network operation until STATE_COMPLETED
until [ "$(curl -s "${BASE}/v1/operations/${NET_OP_ID}" \
  -H "Authorization: Bearer ${TOKEN}" | jq -r '.operation.state')" = "STATE_COMPLETED" ]; do
  echo "Waiting for network…"; sleep 10
done

NET_ID=$(curl -s "${BASE}/v1/networks?filter.name_contains=my-byoc-network" \
  -H "Authorization: Bearer ${TOKEN}" | jq -r '.networks[0].id')

# 5. Create the BYOC cluster
CLUSTER_OP=$(curl -s -X POST "${BASE}/v1/clusters" \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d "{
    \"cluster\": {
      \"name\": \"my-byoc-cluster\",
      \"resource_group_id\": \"${RG_ID}\",
      \"type\": \"TYPE_BYOC\",
      \"cloud_provider\": \"CLOUD_PROVIDER_AWS\",
      \"region\": \"us-east-1\",
      \"zones\": [\"use1-az1\", \"use1-az2\", \"use1-az3\"],
      \"throughput_tier\": \"tier-1-aws-v2-arm\",
      \"network_id\": \"${NET_ID}\",
      \"connection_type\": \"CONNECTION_TYPE_PUBLIC\"
    }
  }" | jq .)

# Note: tier names are version-dependent. Authoritative list:
#   GET /v1/regions/CLOUD_PROVIDER_AWS  (or CLOUD_PROVIDER_GCP/CLOUD_PROVIDER_AZURE; cloud_provider is a path segment)
#   or see https://docs.redpanda.com/redpanda-cloud/reference/tiers/byoc-tiers/
# Real AWS examples: tier-1-aws-v2-arm, tier-1-aws-v2-x86, tier-1-aws-v3-arm
# Real GCP examples: tier-1-gcp-v2-x86, tier-1-gcp-um4g

CLUSTER_OP_ID=$(echo "${CLUSTER_OP}" | jq -r '.operation.id')

# Poll until cluster_id is available in operation metadata (may not be populated on first poll)
until CLUSTER_ID=$(curl -s "${BASE}/v1/operations/${CLUSTER_OP_ID}" \
    -H "Authorization: Bearer ${TOKEN}" \
    | jq -r '.operation.metadata.cluster_id // .operation.resource_id // empty'); \
    [ -n "${CLUSTER_ID}" ]; do
  echo "Waiting for cluster ID…"; sleep 5
done

# 6. Poll until CREATING_AGENT state — the control plane is waiting for the agent
until [ "$(curl -s "${BASE}/v1/clusters/${CLUSTER_ID}" \
  -H "Authorization: Bearer ${TOKEN}" | jq -r '.cluster.state')" = "STATE_CREATING_AGENT" ]; do
  echo "Waiting for cluster to reach CREATING_AGENT…"; sleep 15
done

# 7. Run the rpk byoc agent (install + apply)
rpk cloud byoc install --redpanda-id "${CLUSTER_ID}" \
  -X cloud.client_id="${CLIENT_ID}" \
  -X cloud.client_secret="${CLIENT_SECRET}"

# AWS provider — runs Terraform in your account
rpk cloud byoc aws apply --redpanda-id "${CLUSTER_ID}" \
  -X cloud.client_id="${CLIENT_ID}" \
  -X cloud.client_secret="${CLIENT_SECRET}"

# 8. Poll until STATE_READY
until [ "$(curl -s "${BASE}/v1/clusters/${CLUSTER_ID}" \
  -H "Authorization: Bearer ${TOKEN}" | jq -r '.cluster.state')" = "STATE_READY" ]; do
  echo "Waiting for cluster to be ready…"; sleep 30
done

echo "Cluster is READY"

BYOC vs Serverless

| Dimension | BYOC | Serverless | |---|---|---| | Infra ownership | Customer VPC / account | Redpanda's account | | Cloud bill | Customer pays AWS/GCP/Azure directly | Redpanda charges per usage | | Network isolation | Fully isolated VPC | Shared multi-tenant | | Agent required | Yes — rpk cloud byoc apply | No | | Cluster type | TYPE_BYOC | N/A (separate ServerlessCluster resource) | | Network resource | Required | Not required | | Customer-managed IAM | Optional (customer_managed_resources) | Not supported | | Throughput tiers | Dedicated tiers | Serverless tiers |

Control Plane API Overview

Base URL: https://api.redpanda.com

Auth: Bearer token obtained via OAuth2 client credentials. Set Authorization: Bearer <token> on every request.

Protocol: ConnectRPC (also accepts standard HTTP/JSON via the REST gateway).

All mutating operations (CreateNetwork, CreateCluster, DeleteCluster, DeleteNetwork) return an Operation object with a 20-character ID. Poll GET /v1/operations/{id} to track progress.

| Resource | Endpoints | |---|---| | Networks | POST /v1/networks, GET /v1/networks/{id}, GET /v1/networks, DELETE /v1/networks/{id} | | Clusters | POST /v1/clusters, GET /v1/clusters/{id}, GET /v1/clusters, PATCH /v1/clusters/{id}?update_mask=..., DELETE /v1/clusters/{id} | | Network Peerings | POST /v1/network/{network_id}/network-peerings, GET/DELETE /v1/network/{network_id}/network-peerings/{id}, GET /v1/network/{network_id}/network-peerings | | Cloud Provider Access (PREVIEW) | POST /v1/cloud-provider-accesses, GET/DELETE /v1/cloud-provider-accesses/{id}, GET /v1/cloud-provider-accesses | | Shadow Links | POST /v1/shadow-links, GET/DELETE /v1/shadow-links/{id}, GET /v1/shadow-links, PATCH /v1/shadow-links/{id}?update_mask=... | | Operations | GET /v1/operations/{id}, GET /v1/operations | | Scheduled Operations (PREVIEW) | GET /v1/scheduled-operations (list only) | | Resource Groups | POST /v1/resource-groups, GET /v1/resource-groups/{id}, GET /v1/resource-groups | | Regions | GET /v1/regions/{cloud_provider}, GET /v1/regions/{cloud_provider}/{name} |

Cluster State Machine

BYOC clusters move through these states (grounded in cluster.proto):

STATE_CREATING_AGENT → STATE_CREATING → STATE_READY
                                       ↗
STATE_UPGRADING ──────────────────────
STATE_DELETING_AGENT → STATE_DELETING → (deleted)
STATE_FAILED
STATE_SUSPENDED

The cluster enters STATE_CREATING_AGENT after the API accepts the create request. This is when you must run rpk cloud byoc apply to install the agent Terraform. Once the agent completes provisioning, the cluster transitions to STATE_CREATING, then STATE_READY.

rpk cloud byoc Commands

# Install the byoc plugin (pinned to the cluster's required version)
rpk cloud byoc install --redpanda-id <cluster-id>

# Apply (provision) agent infra — cloud-provider subcommand is required.
# GCP also requires --project-id; Azure also requires --subscription-id.
rpk cloud byoc aws apply   --redpanda-id <cluster-id>
rpk cloud byoc gcp apply   --redpanda-id <cluster-id> --project-id <gcp-project-id>
rpk cloud byoc azure apply --redpanda-id <cluster-id> --subscription-id <azure-sub-id>

# Destroy agent infra (same per-provider account flags as apply)
rpk cloud byoc aws destroy   --redpanda-id <cluster-id>
rpk cloud byoc gcp destroy   --redpanda-id <cluster-id> --project-id <gcp-project-id>
rpk cloud byoc azure destroy --redpanda-id <cluster-id> --subscription-id <azure-sub-id>

# Validate prerequisites without a cluster ID (uses latest plugin version)
rpk cloud byoc aws validate
rpk cloud byoc gcp validate
# Note: only aws/gcp validate are confirmed; azure validate is not separately attested.

# Uninstall the local plugin binary
rpk cloud byoc uninstall

The --redpanda-id flag is required for apply and destroy. The plugin is automatically pinned to the version the control plane specifies for the given cluster ID. Set RPK_CLOUD_SKIP_VERSION_CHECK=1 to use the currently installed plugin binary as-is (dev/CI use only).

Authentication for rpk cloud byoc uses the same client credentials as rpk cloud login:

# Via -X flags (not persisted)
rpk cloud byoc aws apply --redpanda-id <id> \
  -X cloud.client_id=<id> \
  -X cloud.client_secret=<secret>

# Via environment variables
export RPK_CLOUD_CLIENT_ID=<id>
export RPK_CLOUD_CLIENT_SECRET=<secret>
rpk cloud byoc aws apply --redpanda-id <id>

Enterprise Features on BYOC

Redpanda Cloud BYOC is a managed deployment of Redpanda Enterprise Edition — the enterprise license is included in your Cloud subscription, so you never apply a license key. Every enterprise differentiator is available; you turn it on through cluster config and topic properties, not a license workflow.

Two surfaces:

  1. Cluster-config properties (e.g. iceberg_enabled, audit_enabled, partition_autobalancing_mode, default_leaders_preference, enable_schema_id_validation) — set via the Control Plane API under cluster_configuration.custom_properties at POST /v1/clusters (create) or PATCH /v1/clusters/{id}?update_mask=cluster_configuration.custom_properties (update), or via rpk cluster config set on the data plane. Integer values must be strings in custom_properties.
  2. Topic properties (e.g. redpanda.iceberg.mode, redpanda.remote.write, redpanda.cloud_topic.enabled, redpanda.leaders.preference) — set with rpk topic create -c ... / rpk topic alter-config on the data plane after the cluster is STATE_READY.
# Enable an enterprise cluster property after the cluster exists.
# update_mask is a REQUIRED query parameter (comma-separated snake_case field paths —
# the API uses proto field names); the JSON body IS the ClusterUpdate object directly
# (no "cluster" wrapper, no update_mask in body).
curl -s -X PATCH "${BASE}/v1/clusters/${CLUSTER_ID}?update_mask=cluster_configuration.custom_properties" \
  -H "Authorization: Bearer ${TOKEN}" -H "Content-Type: application/json" \
  -d '{"cluster_configuration":{"custom_properties":{"iceberg_enabled":"true"}}}' | jq '.operation.id'

Key features and their nested keys (full detail in Enterprise Features):

| Feature | Where | Primary keys | |---|---|---| | Tiered Storage (always on) | topic | redpanda.remote.write/read/delete/recovery, redpanda.storage.mode | | Cloud Topics | topic | redpanda.cloud_topic.enabled, redpanda.storage.mode=cloud | | Iceberg Topics | cluster + topic | iceberg_enabled, iceberg_default_catalog_namespace; redpanda.iceberg.mode/delete/invalid.record.action/partition.spec/target.lag.ms | | Continuous Data Balancing | cluster | partition_autobalancing_mode=continuous, partition_autobalancing_max_disk_usage_percent, partition_autobalancing_node_availability_timeout_sec, partition_autobalancing_node_autodecommission_timeout_sec, core_balancing_continuous | | Shadow Linking (DR) | rpk | rpk shadow config generate --for-cloud / create / status / failover | | Remote Read Replicas | topic + cluster | redpanda.remote.readreplica, cloud_storage_enable_remote_read | | Audit Logging | cluster | audit_enabled, audit_log_num_partitions, audit_enabled_event_types, audit_excluded_topics/principals, audit_queue_drain_interval_ms | | RBAC / GBAC | rpk / ACLs | rpk security role ...; Group: principals | | OIDC / OAuthBearer / Kerberos | cluster | sasl_mechanisms (OAUTHBEARER, GSSAPI), http_authentication (OIDC) | | Schema ID Validation | cluster + topic | enable_schema_id_validation; redpanda.{key,value}.schema.id.validation, redpanda.{key,value}.subject.name.strategy | | Leadership Pinning | cluster + topic | default_leaders_preference, redpanda.leaders.preference (none / racks: / ordered_racks:) | | FIPS | provisioning | request a FIPS-enabled cluster (fips_mode) |

Reference Directory

  • BYOC Model and Auth: What BYOC is vs Serverless, OAuth2 client-credentials flow, and the end-to-end provisioning sequence.
  • Networks: Creating the Network resource per cloud provider — AWS (VPC/subnet/IAM ARNs), GCP (network name, project, GCS bucket), Azure (VNet, subnets, resource groups). Plus VPC/VNet peering (NetworkPeeringService), Cloud Provider Access cross-account AWS provisioning (PREVIEW), and private connectivity / centralized egress (AWS PrivateLink incl. cross-region, GCP PSC, Azure Private Link, Transit Gateway egress). Field-level reference grounded in network.proto, network_peering.proto, cloud_provider_access.proto, and common.proto.
  • Clusters and Agent: ClusterCreate fields for BYOC (TYPE_BYOC, network_id, throughput_tier, customer_managed_resources, zones, cloud_provider_tags), the cluster PATCH/update_mask form, Operation lifecycle, Scheduled Operations (PREVIEW), control-plane Shadow Linking (ShadowLinkService), and the full rpk cloud byoc install/apply/destroy/validate flow.
  • Enterprise Features: Enabling Redpanda Enterprise differentiators on a BYOC cluster (license included with the Cloud subscription) via cluster_configuration.custom_properties and topic properties — Tiered Storage, Cloud Topics, Iceberg Topics, Continuous Data Balancing, Shadow Linking DR, Remote Read Replicas, Audit Logging, RBAC/GBAC, OIDC/OAuthBearer/Kerberos, FIPS, Server-Side Schema ID Validation, and Leadership Pinning — with their nested config keys and license-expiration behavior, grounded in the licensing overview and per-feature docs.

From the file to a first result

The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.

View the source and supporting files

This download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.

1. Download the file

Download SKILL.md

From the root of a test project, save the file as .skill-downloads/redpanda-cloud-byoc-clusters-msfn1a5q/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.

Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.

mkdir -p '.skill-downloads/redpanda-cloud-byoc-clusters-msfn1a5q' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/redpanda-cloud-byoc-clusters-msfn1a5q/download' --output '.skill-downloads/redpanda-cloud-byoc-clusters-msfn1a5q/SKILL.md.part' && mv '.skill-downloads/redpanda-cloud-byoc-clusters-msfn1a5q/SKILL.md.part' '.skill-downloads/redpanda-cloud-byoc-clusters-msfn1a5q/SKILL.md'

2. Check prerequisites

Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.

No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.

The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.

3. Load the skill

After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.

Claude Code
test -f '.skill-downloads/redpanda-cloud-byoc-clusters-msfn1a5q/SKILL.md' && test -s '.skill-downloads/redpanda-cloud-byoc-clusters-msfn1a5q/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/cloud-byoc' && cp -R '.skill-downloads/redpanda-cloud-byoc-clusters-msfn1a5q' '.claude/skills/cloud-byoc'

OpenSkills

OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.

Official OpenSkills installation
openskills install './.skill-downloads/redpanda-cloud-byoc-clusters-msfn1a5q'

openskills read 'redpanda-cloud-byoc-clusters-msfn1a5q'

Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.

For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.

openskills sync

Manual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.

4. Try a first task

Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:

Read .skill-downloads/redpanda-cloud-byoc-clusters-msfn1a5q/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.

Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.

Related skills