Swift Public Token Access Error - Troubleshooting Guide
Problem
A user reports that public access via a Swift URL is not working when the URL includes the account ID (e.g. AUTH_<account_id>). Authenticated access works correctly. The issue is likely related to the rgw_swift_account_in_url configuration not being applied to the running RGW daemons, and/or rgw_keystone_implicit_tenants being incorrectly set to true.
Symptoms
- Swift
statcommand succeeds with a valid auth token. - Public URL access using the account-in-URL format returns an error (likely
404). - The container has a public Read ACL set (
.r:*,.rlistings), so public access should work.
Example of a URL format that works:
https://<endpoint>/v1/AUTH_<account_id>/<container>
Example of a URL format that returns the error but is expected to work:
https://<rgw-endpoint>/swift/v1/AUTH_<account_id>/<container>
Root Cause
The feature that allows Swift URLs to include the account ID requires the following RGW setting:
rgw_swift_account_in_url = true
Even if this setting appears in ceph config dump, it may not be applied to the currently running RGW daemons — particularly in containerized deployments where a restart is required for config changes to take effect.
Additionally, the following setting should be verified:
rgw_keystone_implicit_tenants = false
If this is set to true on any RGW daemon, it may interfere with account-in-URL access. The default is false, but some daemons may have it overridden.
Note: This issue has been observed on Ceph 18.2.2 (Reef). It was previously reported upstream and marked as resolved, but may still appear on this version. See:
Troubleshooting Steps
1. Verify that rgw_swift_account_in_url is applied to running daemons
Enter the RGW daemon container and run:
ceph daemon /var/run/ceph/ceph-client.rgw.{id}.asok config show | grep rgw_swift_account_in_url
The output should show true. If it does not, the config has not been applied to the running daemon.
2. Verify that rgw_keystone_implicit_tenants is set correctly
On the same daemon, run:
ceph daemon /var/run/ceph/ceph-client.rgw.{id}.asok config show | grep rgw_keystone_implicit_tenants
The value should be false. If it is true, it needs to be corrected.
3. Apply the configuration globally and restart RGW daemons
If the settings are not applied, set them at the client.rgw level to ensure all RGW daemons pick them up:
ceph config set client.rgw global rgw_swift_account_in_url true
For troubleshooting you may also use global or client insteaed of
client.rgw.
Then restart the RGW daemons. For example:
ceph orch restart rgw
4. Re-test public access
After restarting, re-test the public URL:
curl -v https://<rgw-endpoint>/swift/v1/AUTH_<account_id>/<container>
5. Further troubleshooting
If the issue persists, further troubleshooting is needed. The recommended steps are as follows: turn on the debug log on both the RGW and the client side, and then capture the problematic request and response on both RGW and the client.
Resolution
The issue is resolved when:
rgw_swift_account_in_url = trueis confirmed active on all running RGW daemons.rgw_keystone_implicit_tenants = falseis confirmed active on all running RGW daemons.- Public Swift URL access returns the expected result.