Serverless compute returns 403 on S3 buckets in the account-regional namespace
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
2 weeks ago
[UNAUTHORIZED_ACCESS] Unauthorized access:
s3://my-bucket-ACCOUNTID-ap-southeast-1-an/bronze/.../_delta_log:
getFileStatus on s3://my-bucket-ACCOUNTID-ap-southeast-1-an/bronze/.../_delta_log:
shaded.databricks.awssdk.com.amazonaws.services.s3.model.AmazonS3Exception: Forbidden;
request: HEAD https://my-bucket-ACCOUNTID-ap-southeast-1-an.s3-ap-southeast-1.amazonaws.com
Hadoop 3.5.0, aws-sdk-java/1.12.681 ...
credentials-provider: ...BasicSessionCredentials
credential-header: AWS4-HMAC-SHA256 Credential=ASIA...../20260919/ap-southeast-1/s3/aws4_request
signature-present: true
(Service: Amazon S3; Status Code: 403; Error Code: 403 Forbidden;
Request ID: null; S3 Extended Request ID: null; Proxy: 192.168.200.20)
SQLSTATE: 42501
Evidence: Two buckets created 90 seconds apart in ap-southeast-1, holding a byte-identical file,
- IAM permissions. Classic compute reads and writes the same bucket through the same role. The two bucket policies involved are structurally identical, same actions including s3:ListBucket, differing only in the bucket ARN.
- The storage credential. Two different UC storage credentials, both over the same role, give identical results on both buckets. Neither credential is impaired: both succeed elsewhere.
- Unity Catalog configuration. A brand-new external location, volume, schema and catalog reproduce it. A brand-new external location over a working bucket succeeds. Object age is not a factor.
- Bucket configuration. Identical AES256 default encryption, no bucket policy, BucketOwnerEnforced, identical public access block on both.
- Workspace identity. Reproduced on a second, independently created workspace with its own VPC.
- Access method. Fails through external tables, managed tables and UC volumes alike.
ap-southeast-5 (Malaysia, GA August 2024) is unaffected even for account-regional buckets. Same account, same role, same credential. It simply works, and still does.
We enabled it and planted a known-good control request. The control never appeared in the
Listing catalogs, schemas, tables, external locations and storage credentials all work on
Step 1. Create two buckets that differ only in namespace.
ACCOUNT_ID=your-aws-account-id
REGION=ap-southeast-1
AN=repro-$ACCOUNT_ID-$REGION-an
GL=repro-global-$ACCOUNT_ID
aws s3api create-bucket --bucket $AN --region $REGION \
--create-bucket-configuration LocationConstraint=$REGION \
--bucket-namespace account-regional
aws s3api create-bucket --bucket $GL --region $REGION \
--create-bucket-configuration LocationConstraint=$REGIONprintf 'id,label\n1,test\n' > /tmp/c.csv
aws s3 cp /tmp/c.csv s3://$AN/files/c.csv --region $REGION
aws s3 cp /tmp/c.csv s3://$GL/files/c.csv --region $REGION
SELECT count(*) FROM read_files('/Volumes/CAT/SCH/global_vol/', format => 'csv');
SELECT count(*) FROM read_files('/Volumes/CAT/SCH/account_regional_vol/', format => 'csv');
This is the only real fix available to customers today. Verified end to end: a catalog with
ap-southeast-5, account-regional, customer bucket A -> works
ap-southeast-5, global, customer bucket B (new) -> works
ap-southeast-1, global, customer bucket C -> 403
ap-southeast-1, account-regional, customer bucket D -> 403- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
yesterday
Greetings @alexgfowler_ld, I did some digging and here is what I found.
First, this is one of the most carefully built-out reports I've seen on this forum. Your A/B test already rules out the usual suspects: same role, credential, data, and region work from classic compute, and serverless fails only for the account-regional bucket. That's not an IAM or Unity Catalog setup problem. I can't see inside the serverless network path (nobody outside engineering can), but I can confirm what's confirmable and point you at the right door.
What AWS says
Account regional namespaces launched March 12, 2026, and the S3 user guide says these buckets support every S3 feature with no application changes required. So from the AWS side, nothing about the bucket should behave differently. This is something in the path between serverless compute and S3, not an S3 limitation.
Where the 403 is likely coming from
Your read on the null request ID is right. S3 stamps every response it generates, errors included, with x-amz-request-id and x-amz-id-2. Both are null and the exception names a proxy, so the simplest explanation is that the proxy in the serverless network path minted the 403 and the request never reached S3. Same-region S3 traffic from serverless rides a VPC gateway endpoint inside Databricks-managed VPCs (the firewall docs describe this), and cross-region traffic takes a different route, which is why ap-southeast-5 kept working during your trial.
On the SDK hypothesis
It holds together. The failing request went to the legacy dash-style hostname (bucket.s3-ap-southeast-1.amazonaws.com), which older partition data hands out for regions it knows, while an unknown region falls back to s3.REGION.amazonaws.com. So the two populations really do take different hostname shapes. I wouldn't call it root cause yet, though, and I'd hold off on the conclusion that S3 refuses these buckets on the legacy hostname: if S3 were saying no, you'd have a request ID. More likely a component in the serverless path matches on hostname and handles the two shapes differently. One detail to put in front of support: these bucket names now contain a region string and an account ID, so anything that parses names or hostnames to work out region or ownership has a fresh way to get it wrong. Also, the AWS SDK for Java 1.x reached end of support on December 31, 2025, so a client pinned to it was never going to learn about a bucket feature that shipped in March 2026.
Your other questions
Trial accounts: the serverless SQL warehouse requirements state plainly that the account must not be on a free trial. The mechanism isn't documented, so I can't confirm it's the same-region path specifically, but your before-and-after on bucket C is clean evidence and I agree it belongs in the published trial limitations.
Fine-grained access control: your caution is correct. On dedicated access mode compute, any query touching a table with row filters or column masks, or a dynamic view, is handed to the workspace's serverless compute for filtering, so it would fail even though the cluster itself can read the bucket. Standard access mode compute and pro SQL warehouses evaluate those controls themselves, so that's the safer ground in the meantime. Your note about tasks with no compute setting falling back to serverless is also correct.
Support status: the serverless limitations page says nothing about bucket namespaces either way. I don't know the answer, and the public docs don't establish it as unsupported.
Workarounds and next step
Your two workarounds are the right ones: classic compute for existing account-regional buckets, or a global-namespace bucket for anything serverless must read, after weighing the security trade-off you already described. Then please open a support case at help.databricks.com. Your post is most of the ticket already. Include the repro, the null request ID observation, the ap-southeast-5 contrast, the compute types and timestamps, and the exact hostnames in the failing versus working requests (that last one is most likely to shorten the investigation). Redact the account ID in bucket names. Only the serverless team can see what the proxy is doing with these requests, and if it turns out to be a gap, you've already written the documentation ticket.
References:
- AWS, namespaces for general purpose buckets: https://docs.aws.amazon.com/AmazonS3/latest/userguide/gpbucketnamespaces.html
- AWS, account regional namespaces announcement: https://aws.amazon.com/about-aws/whats-new/2026/03/amazon-s3-account-regional-namespaces
- Databricks, serverless compute firewall configuration: https://docs.databricks.com/aws/en/security/network/serverless-network-security/serverless-firewall-...
- Databricks, set up serverless SQL warehouses: https://docs.databricks.com/aws/en/compute/sql-warehouse/serverless
- Databricks, serverless compute limitations: https://docs.databricks.com/aws/en/compute/serverless/limitations
- Databricks, fine-grained access control on dedicated compute: https://docs.databricks.com/aws/en/compute/single-user-fgac
- Databricks, connect to an AWS S3 external location: https://docs.databricks.com/aws/en/connect/unity-catalog/cloud-storage/s3
- AWS, end of support for AWS SDK for Java 1.x: https://aws.amazon.com/blogs/developer/announcing-end-of-support-for-aws-sdk-for-java-v1-x-on-decemb...
Regards, Louis.