This guide describes how to prepare an AWS S3Table catalog for use with StreamNative Ursa as an Iceberg catalog.Documentation Index
Fetch the complete documentation index at: https://docs.streamnative.io/llms.txt
Use this file to discover all available pages before exploring further.
Important: The StreamNative Ursa cluster must run in the same region as the S3Table bucket. Cross-region access is not supported and will fail with an AWS client error.
Prerequisites
- An AWS account with permissions to create S3Table buckets and modify IAM roles
- A StreamNative Ursa cluster (the cluster’s IAM role will be granted access to the S3Table bucket)
1. Create an S3Table Bucket
In the AWS S3 console, create an S3Table bucket in the same region as the Ursa cluster. Record the bucket ARN, which has the form:2. Grant S3Table Permissions via a Table Bucket Policy
Apply a table bucket policy on the S3Table bucket so that the StreamNative Ursa cluster’s IAM role can read and write tables in the bucket.2.1 Find the broker IAM role ARN
The role ARN to grant access to is the IAM role bound to the broker pods of the Pulsar cluster. On Private Cloud (running on EKS), the role ARN is recorded as theeks.amazonaws.com/role-arn annotation on the broker’s Kubernetes ServiceAccount.
-
List the ServiceAccounts in the namespace where the cluster is deployed and identify the broker ServiceAccount (its name typically ends with
-broker): -
Inspect the broker ServiceAccount and copy the value of the
eks.amazonaws.com/role-arnannotation:Example output (truncated):The string aftereks.amazonaws.com/role-arn:is the cluster’s broker IAM role ARN.
2.2 Apply the table bucket policy
In the AWS S3 console, open your S3Table bucket and go to the Permissions tab. Choose Edit under Table bucket policy and paste the following JSON, replacing<broker-role-arn> with the ARN you copied in the previous step and <your-region>, <your-aws-account>, and <your-bucket-name> with the values for your bucket.




3. Adjust S3Table Maintenance Settings (Recommended)
By default, S3 Tables retains snapshots for 120 hours (5 days). For production workloads, StreamNative recommends shortening this window to 6 hours.| Setting | Default | Recommended |
|---|---|---|
MaximumSnapshotAge | 120 hours (5 days) | 6 hours |
MaximumSnapshotAge keeps the metadata file under the cap.
You can update the snapshot management settings from the S3 Table bucket console or via the AWS CLI after the bucket is created. See S3 Tables maintenance — Snapshot management for the full list of maintenance settings.
4. (Optional) Configure AWS Athena Access
If you intend to query the S3Table data via AWS Athena, you must integrate it with AWS Lake Formation.4.1 Prerequisites
Refer to S3 Tables integration prerequisites. In summary:- Attach
AWSLakeFormationDataAdminto your IAM principal - Add
glue:PassConnectionandlakeformation:RegisterResourcepermissions - Use the latest version of the AWS CLI
S3TablesRoleForLakeFormation_1).

4.2 Create a Resource Link
A resource link provides a Glue Data Catalog reference to your S3Table namespace. See Creating a resource link.4.3 Grant Lake Formation Permissions
On the Table
In the AWS Lake Formation console, navigate to Data permissions -> Grant and configure:- Principals: the IAM user, role, or SAML group that will run queries.
- LF-Tags or catalog resources: choose Named Data Catalog resources.
- Catalogs: the Glue Data Catalog created when the table bucket was integrated (
<account-id>:s3tablescatalog/<table-bucket-name>). - Databases: the S3Table namespace.
- Tables: the S3Table table.
- Table permissions: Super.


On the Resource Link
Resource links require their own grants in addition to the underlying namespace/table grants:- Principals: the IAM user/role/group.
- Catalogs: your account’s default catalog.
- Databases: the resource link from step 4.2.
- Resource link permissions: Describe.

Catalog Information Summary
When the steps above are complete, collect the following values for the StreamNative Ursa compaction service:| Value | Description |
|---|---|
iceberg.catalog-backend | s3table |
iceberg.uri | https://s3tables.<region>.amazonaws.com/iceberg (region-specific endpoint — see the S3 Tables regions list) |
iceberg.warehouse | The S3Table bucket ARN: arn:aws:s3tables:<region>:<account>:bucket/<bucket-name> |
iceberg.rest.signing-region | The region of the S3Table bucket |
