Unsupported S3 features
The following S3 features are not currently supported in Object Storage:- Object ACLs: Per-object access control lists are not supported. Use bucket policies for access control.
- SSE-KMS and SSE-S3 encryption: AWS-managed server-side encryption is not supported. All data stored in buckets is encrypted at both the service and infrastructure levels.
- Object Lock and Legal Hold: Write-once-read-many (WORM) retention policies are not supported.
- S3 Select: Query-in-place functionality is not supported. AWS has also discontinued S3 Select.
- Static website hosting: Serving bucket contents as a static website is not supported.
- Bucket inventory: Scheduled inventory reports are not supported.
- Replication: Cross-region and cross-bucket replication rules are not supported. Use data transfers to replicate data between buckets.
- Event notifications: S3 Event Notifications are not supported.
- Object Ownership: S3 Object Ownership is not supported.
Behavioral differences
Object Storage behaves differently from S3 in the following cases:-
ETag format: In some cases, Object Storage computes ETag values with a non-MD5 algorithm. The ETag still changes whenever the object’s content changes, but it is not always the MD5 hash of that content, so don’t rely on it for integrity checks. To verify object integrity, use the checksum headers (
X-Amz-Checksum-*) instead. MD5-based ETags can be enabled per bucket for simple objects and multipart upload parts on request — contact support to discuss your use case. -
Conditional writes: On
PutObjectrequests that includeIf-None-Match: "*", Object Storage checks whether the object exists before reading the request body, whereas S3 reads the full body first and checks the condition afterward. This reduces unnecessary data transfer when the condition fails, but a client that doesn’t support the Expect: 100-continue header might see unexpected errors. -
Object versioning: Only the current version of an object can have a
nullversion ID. Once an object version becomes non-current, it’s assigned a specific version identifier. -
ListObjectVersions: In
ListObjectVersionsresponses, theNextKeyMarkerandNextVersionIdMarkerfields are opaque tokens that are only valid when passed back exactly as received from the previousListObjectVersionsresponse. -
ListMultipartUploads:
ListMultipartUploadsdoesn’t support thedelimiterparameter, and common prefixes are not returned in responses. - Lifecycle configuration: The deprecated XML format is not supported. Use the current format described in AWS documentation.
Supported S3 API methods
Object Storage supports the following S3 API methods. Partial means the method works with the limitation noted.| Method | Support | Notes |
|---|---|---|
GetObject | Yes | |
HeadObject | Yes | |
PutObject | Yes | |
CopyObject | Yes | |
DeleteObject | Yes | |
DeleteObjects | Yes | |
GetObjectACL | No | |
ListObjectsV2 | Yes | |
ListObjects | Partial | Supported for backward compatibility; ListObjectsV2 is recommended. |
ListObjectVersions | Yes | |
PostObject | Partial | Supported for basic use cases. Contact support if your workload depends on this method. |
GetObjectTagging | Yes | |
PutObjectTagging | Yes | |
DeleteObjectTagging | Yes | |
CreateMultipartUpload | Yes | |
UploadPart | Yes | |
UploadPartCopy | Yes | |
CompleteMultipartUpload | Yes | |
AbortMultipartUpload | Yes | |
ListMultipartUploads | Yes | |
CreateBucket | Yes | |
HeadBucket | Yes | |
GetBucketLocation | Yes | |
GetBucketVersioning | Yes | |
PutBucketVersioning | Yes | |
GetBucketLifecycleConfiguration | Yes | Only S3-compatible lifecycle rules are supported. |
PutBucketLifecycleConfiguration | Yes | |
PutBucketCORS | Yes |
Supported S3 headers
Object Storage supports the following S3-compatible HTTP headers:X-Amz-Copy-SourceX-Amz-Copy-Source-If-MatchX-Amz-Copy-Source-RangeX-Amz-DateX-Amz-Delete-MarkerX-Amz-ExpirationX-Amz-Metadata-DirectiveX-Amz-Mp-Parts-CountX-Amz-Request-IdX-Amz-Storage-ClassX-Amz-Version-IdX-Amz-Bucket-RegionX-Amz-Meta-*If-Match: Supported inGetObject,PutObject,DeleteObjectIf-None-Match: Supported inGetObject,PutObjectIf-Modified-Since,If-Unmodified-Since: Supported inGetObjectAccess-Control-*X-Amz-Checksum-*