Self-hosted Opal stores async data exports (large CSV/ZIP downloads) in an S3 or S3-compatible bucket. Cloud customers get this bucket automatically. If you self-host, you provision the bucket and provide credentials. This setup is optional. If you skip these steps, exports still work, but they’re tied to the browser session — they cancel if you navigate away or close the tab.Documentation Index
Fetch the complete documentation index at: https://docs.opal.dev/llms.txt
Use this file to discover all available pages before exploring further.
1. Create the bucket
Create a private bucket in the same region as your cluster, with:- All public access blocked
- Server-side encryption (AES256 or KMS)
- A bucket policy that denies any request where
aws:SecureTransport=false
<your-org>-opal-exports). Don’t share it with other applications or other environments.
Versioning and CORS are not required. Downloads are served through the Opal backend, not directly from the browser.
2. Create an IAM user and access key
Opal authenticates to the bucket with a static access key pair. This is a two-step process: create a dedicated IAM user with a scoped policy, then issue an access key for that user.2a. Create the IAM user
Create a dedicated IAM user (e.g.opal-exports-service) and attach a policy with only these permissions:
2b. Issue an access key
Generate one access key pair for the user (aws iam create-access-key --user-name opal-exports-service, or via the IAM console). Store both the access key ID and secret access key in your secret manager — you’ll paste them in step 3.
If you provision the user via infrastructure-as-code, create the access key separately so the secret stays out of state. The secret access key is shown only once at creation time.
IAM Roles for Service Accounts (IRSA) and Workload Identity are not supported today. Static access keys are the only authentication method.
3. Update Opal Configuration
Pick the section that matches your install method.KOTS
Open the admin console and find the Async Exports Storage section:- Click Enable Async Exports.
- Bucket name:
my-org-opal-exports - Region: e.g.
us-east-2 - Access key ID and secret access key from step 2.
Helm
Add the following to your helm values:helm upgrade to apply the configuration.

