# CREATE STORAGE

> For the complete documentation index, see [llms.txt](https://docs.redpanda.com/llms.txt). Component-specific: [cloud-data-platform-full.txt](https://docs.redpanda.com/cloud-data-platform-full.txt)

---
title: CREATE STORAGE
latest-operator-version: v26.2.1
latest-console-tag: v3.9.0
latest-connect-version: 4.104.0
latest-redpanda-tag: v26.2.1
docname: sql/sql-statements/create-storage
page-component-name: cloud-data-platform
page-version: master
page-component-version: master
page-component-title: Cloud
page-relative-src-path: sql/sql-statements/create-storage.adoc
page-edit-url: https://github.com/redpanda-data/cloud-docs/edit/main/modules/reference/pages/sql/sql-statements/create-storage.adoc
description: The CREATE STORAGE statement creates a connection to external object storage for use with Redpanda catalogs.
page-topic-type: reference
page-git-created-date: "2026-05-26"
page-git-modified-date: "2026-08-03"
---

<!-- Source: https://docs.redpanda.com/cloud-data-platform/reference/sql/sql-statements/create-storage.md -->

The `CREATE STORAGE` statement creates a named connection to external object storage such as Amazon S3 or Google Cloud Storage (GCS).

> 📝 **NOTE**
>
> In Redpanda Cloud, the storage connection and Iceberg catalog used to query Iceberg-enabled topics are configured and managed automatically when you enable Redpanda SQL on a cluster that has an [Iceberg REST catalog](https://docs.redpanda.com/cloud-data-platform/manage/iceberg/rest-catalog/) configured. You don’t run these statements yourself for that workflow. This page documents the statement’s syntax and options so you can understand what Redpanda Cloud configures. See [Query Iceberg-enabled topics](https://docs.redpanda.com/cloud-data-platform/sql/query-data/query-iceberg-topics/).

## [](#syntax)Syntax

```sql
CREATE STORAGE [IF NOT EXISTS] storage_name
TYPE = S3 | GCS
WITH (option = 'value' [, ...]);
```

-   `storage_name`: Name for the new storage connection.

-   `TYPE`: Storage type. Redpanda SQL supports `S3` and `GCS`.

-   `IF NOT EXISTS`: Optional. Prevents an error if a storage connection with the same name already exists.


## [](#s3-options)S3 options

| Option | Type | Required | Description |
| --- | --- | --- | --- |
| region | STRING | Yes | Cloud region for the storage bucket (for example, us-west-2). |
| access_key_id | STRING | Yes | AWS access key ID. |
| secret_access_key | STRING | Yes | AWS secret access key. |

## [](#gcs-options)GCS options

| Option | Type | Required | Description |
| --- | --- | --- | --- |
| url | STRING | No | GCS bucket URL, in the form gs://<bucket>/<path>. If omitted, the connection holds credentials only and has no associated bucket. |
| service_account_key | STRING | No | Contents of a GCP service account key JSON file. If omitted, Redpanda SQL authenticates using Application Default Credentials (ADC), which includes Workload Identity Federation on Google Kubernetes Engine (GKE). |
| endpoint | STRING | No | Override the default GCS endpoint. |

## [](#examples)Examples

### [](#create-an-s3-storage-connection)Create an S3 storage connection

```sql
CREATE STORAGE archive_storage
TYPE = S3
WITH (
  region = 'us-west-2',
  access_key_id = 'AKIAIOSFODNN7EXAMPLE',
  secret_access_key = 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'
);
```

### [](#create-a-gcs-storage-connection-with-a-service-account-key)Create a GCS storage connection with a service account key

```sql
CREATE STORAGE gcs_key_storage
TYPE = GCS
WITH (
  url = 'gs://archive-bucket/redpanda-sql',
  service_account_key = '{"type": "service_account", "project_id": "my-project", ...}'
);
```

### [](#create-a-gcs-storage-connection-using-application-default-credentials)Create a GCS storage connection using Application Default Credentials

Omit `service_account_key` to authenticate with Application Default Credentials (ADC). On GKE, this includes Workload Identity Federation.

```sql
CREATE STORAGE gcs_adc_storage
TYPE = GCS
WITH (
  url = 'gs://archive-bucket/redpanda-sql'
);
```