Three ways in, and only one of them is the product
From a Worker, a binding reads, writes and lists objects without putting a storage credential in the browser. The S3-compatible API is how existing S3 SDKs and tools talk to the bucket. The Cloudflare REST API manages buckets and is the wrong path for high-throughput object traffic.
A browser that must upload or download directly needs an explicit grant. A presigned URL allows one operation on one object — get, head, put or delete — until it expires. It is a bearer token: anyone who has it can perform that operation. It works on the S3 endpoint, not on a custom domain. Short expiry and a check of who was allowed to receive the URL are the design. CORS is configured when a browser on another origin must call the bucket. A public bucket exposes objects to the internet, which is a product decision, not the default for a contract.
Knowing the key is not authorisation. The Worker checks the session and the tenant, then either fetches the object or refuses. Bucket-scoped tokens limit what an external tool can do. Adding or removing an API token’s permission can take up to a minute to be visible everywhere. Object data does not wait that long.