S3 compatibility is currently in public preview. S3 compatibility must be enabled during storage zone creation and cannot be changed afterward.
Creating a storage zone with S3 compatibility
To create an S3-compatible storage zone:- Navigate to Storage → Add Storage Zone
- Enter a name (minimum 4 characters, letters, numbers, and dashes only)
- Enable the S3 Compatibility option
- Select your preferred storage tier
- Choose your region
- Configure replication
- Confirm and Add Storage Zone
Quickstart
Once you’ve created your S3-compatible storage zone, you’re ready to connect.Authentication and credentials
The credentials you need to connect via S3 are located in the Access tab:- Access Key ID: Your Storage Zone name (bucket name)
- Secret Access Key: Your Storage Zone Password
- Endpoint URL:
https://[region]-s3.storage.bunnycdn.com - Region:
de(Frankfurt),ny(New York),sg(Singapore),uk(London),
se(Stockholm),la(Los angeles),jh(Johannesburg) &syd(Sydney)
Bunny Storage only supports path-style URLs (e.g.,
https://[region]-s3.storage.bunnycdn.com/bucket-name/key). Virtual hosted-style URLs (e.g., bucket-name.s3.region.amazonaws.com) are not supported.Content Type Detection
When uploading objects, Content-Type is determined in the following order:- Content-Type header - If provided in the request
- File extension detection - Automatic detection based on file extension
- Default fallback -
binary/octet-streamfor unknown types
Checksum Validation
SHA256 checksum validation is available using thex-amz-checksum-sha256 header (Base64 encoded).
Presigned URL Validation
Presigned URLs require authentication. For publicly available presigned URLs fronted by CDN please use bunny.net CDN by adding a pullzone to your storage zone.
Presigned URL example (1hour):
https://[region]-s3.storage.bunnycdn.com/bucket-name/path/to/object/?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=[AccessKeyID+Date+region+servicerequest]&X-Amz-Date=20260320T160912Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=[HMAC-SHA256Signature]/
Example
AWS CLI
You must use
--endpoint-url https://[region]-s3.storage.bunnycdn.com with each command or set up an AWS CLI profile with the endpoint configured.rclone
You can use rclone with Bunny Storage:Supported S3 operations
Bunny Storage provides comprehensive S3 API compatibility for all your storage needs.Object operations
- PUT Object: Create and update objects
- GET Object: Read objects (range requests supported)
- DELETE Object: Delete objects (single and batch operations)
- COPY Object: Copy objects between locations
- HEAD Object: Get object metadata
- PRESIGN Object: Generate object URL expiry time (Set in seconds - default 1 hour)
Directory listing
- LIST Objects: List objects (V1 and V2)
- List with prefix filtering
- Paginated results
- Directory-style navigation
- Common prefixes support
Multipart upload operations
Bunny Storage provides full support for S3 multipart uploads, enabling efficient upload of large objects. Recommended for objects over 100MB.S3 API compatibility matrix
Below is a detailed list of implemented object-level operations with their supported features:Unsupported operations
View unsupported S3 operations
View unsupported S3 operations
The following S3 operations are not currently supported:
Limits
Be aware of the following limitations when using S3-compatible storage:- 500 Max RPS rate (upload & download combined)
- 1Gbps Max bandwidth throughput
Regional availability
S3-compatible storage zones support automatic multi-region replication. All operations including uploads, deletes, and multipart uploads are automatically replicated to your configured replication regions. S3 compatibility is currently available in the following regions:- Frankfurt (DE)
- New York (NY)
- Singapore (SG)
- London (UK)
- Stockholm (SE)
- Los Angeles (LA)
- Johannesburg (JH)
- Sydney (SYD)
S3 compatibility cannot be changed after storage zone creation.
Known limitations
The following S3 features are limited by:- CORS Configuration: Cross-Origin Resource Sharing settings (must be handled at the CDN level)
- Versioning: Object versioning is not supported
- ACLs: Access Control Lists are not supported
- Server-Side Encryption: SSE/SSE-C encryption is not currently supported
- Object Tagging: Object and bucket tagging is not supported
- Lifecycle Policies: Automatic lifecycle transitions are not supported
- Conditional Requests: If-Match, If-Modified-Since headers not yet supported for GET/HEAD
- Multipart Limits: Maximum 10,000 parts per upload
- Multipart Session Expiry: Sessions expire after 10 days
- Presigned URLs: Minimum time: 1 second | Maximum time: 7 days (604800 seconds)
Error Codes
Bunny Storage returns standard S3 error codes:Some error codes may differ from standard AWS S3 behavior. See the notes below for Bunny-specific details.
Best Practices
- Use an SDK to interact with the S3 api
- Enable Replication for at least one additional region
- Implement retry logic for transient failures
- Use multipart uploads for objects larger than 100MB
- Include Content-Type headers when uploading, or rely on automatic detection
- Handle pagination properly when listing objects or parts (max 1000 per request)
- Monitor multipart sessions and abort abandoned uploads to free storage
- Set presigned URL expiry time in seconds
--expires-in 3600= 1 hour