garage/doc/book/reference-manual/s3-compatibility.md
2022-02-07 16:04:09 +01:00

19 KiB

+++ title = "S3 Compatibility status" weight = 20 +++

Endpoint implementation

All APIs that are missing on Garage will return a 501 Not Implemented.

The compatibility list for other platforms is given only for information purposes and based on available documentation. Some entries might be inexact. Feel free to open a PR to fix this table.

Signatures

Signature Garage Openstack Swift Ceph Object Gateway Riak CS
s3v2 (deprecated) Missing
s3v4 Implemented

URL style

URL-style Garage Openstack Swift Ceph Object Gateway Riak CS
path-style (eg. host.tld/bucket/key) Implemented
vhost-style URL (eg. bucket.host.tld/key) Implemented

Core endoints

Endpoint Garage Openstack Swift Ceph Object Gateway Riak CS
CreateBucket Implemented
DeleteBucket Implemented
GetBucketLocation Implemented
HeadBucket Implemented
ListBuckets Implemented
HeadObject Implemented
CopyObject Implemented
DeleteObject Implemented
DeleteObjects Implemented
GetObject Implemented
ListObjects Implemented (implementation details below)
ListObjectsV2 Implemented
PutObject Implemented

Multipart Upload endpoints

Endpoint Garage Openstack Swift Ceph Object Gateway Riak CS
AbortMultipartUpload Implemented
CompleteMultipartUpload Implemented
CreateMultipartUpload Implemented
ListMultipartUpload Implemented
ListParts Implemented
UploadPart Implemented
UploadPartCopy Implemented

Website endpoints

Endpoint Garage Openstack Swift Ceph Object Gateway Riak CS
DeleteBucketWebsite Implemented
GetBucketWebsite Implemented
PutBucketWebsite ⚠ Partially implemented (see below)
DeleteBucketCors Implemented
GetBucketCors Implemented
PutBucketCors Implemented

ACL, Policies endpoints

Amazon has 2 access control mechanisms in S3: ACL (legacy) and policies (new one). Garage implements none of them, and has its own system instead, built around a per-access-key-per-bucket logic. See Garage CLI reference manual to learn how to use Garage's permission system.

Endpoint Garage Openstack Swift Ceph Object Gateway Riak CS
DeleteBucketPolicy Missing
GetBucketPolicy Missing
GetBucketPolicyStatus Missing
PutBucketPolicy Missing
GetBucketAcl Missing
PutBucketAcl Missing
GetObjectAcl Missing
PutObjectAcl Missing

Versioning, Lifecycle endpoints

Garage does not support (yet) object versioning. If you need this feature, please share your use case in our dedicated issue.

Endpoint Garage Openstack Swift Ceph Object Gateway Riak CS
DeleteBucketLifecycle Missing
GetBucketLifecycleConfiguration Missing
PutBucketLifecycleConfiguration Missing
GetBucketVersioning Stub (see below)
ListObjectVersions Missing
PutBucketVersioning Missing

Replication endpoints

Please open an issue if you have a use case for replication.

Endpoint Garage Openstack Swift Ceph Object Gateway Riak CS
DeleteBucketReplication Missing
GetBucketReplication Missing
PutBucketReplication Missing

(Server-side) encryption

We think that you can either encrypt your server partition or do client-side encryption, so we did not implement server-side encryption for Garage. Please open an issue if you have a use case.

Endpoint Garage Openstack Swift Ceph Object Gateway Riak CS
DeleteBucketEncryption Missing
GetBucketEncryption Missing
PutBucketEncryption Missing

Amazon specific endpoints

Display endpoints
Endpoint Garage Openstack Swift Ceph Object Gateway Riak CS
DeleteBucketAnalyticsConfiguration Missing
DeleteBucketIntelligentTieringConfiguration Missing
DeleteBucketInventoryConfiguration Missing
DeleteBucketMetricsConfiguration Missing
DeleteBucketOwnershipControls Missing
DeleteBucketTagging Missing
DeleteObjectTagging Missing
DeletePublicAccessBlock Missing
GetBucketAccelerateConfiguration Missing
GetBucketAnalyticsConfiguration Missing
GetBucketIntelligentTieringConfiguration Missing
GetBucketInventoryConfiguration Missing
GetBucketLogging Missing
GetBucketMetricsConfiguration Missing
GetBucketNotificationConfiguration Missing
GetBucketOwnershipControls Missing
GetBucketRequestPayment Missing
GetBucketTagging Missing
GetObjectLegalHold Missing
GetObjectLockConfiguration Missing
GetObjectRetention Missing
GetObjectTagging Missing
GetObjectTorrent Missing
GetPublicAccessBlock Missing
ListBucketAnalyticsConfigurations Missing
ListBucketIntelligentTieringConfigurations Missing
ListBucketInventoryConfigurations Missing
ListBucketMetricsConfigurations Missing
PutBucketAccelerateConfiguration Missing
PutBucketAnalyticsConfiguration Missing
PutBucketIntelligentTieringConfiguration Missing
PutBucketInventoryConfiguration Missing
PutBucketLogging Missing
PutBucketMetricsConfiguration Missing
PutBucketNotificationConfiguration Missing
PutBucketOwnershipControls Missing
PutBucketRequestPayment Missing
PutBucketTagging Missing
PutObjectLegalHold Missing
PutObjectLockConfiguration Missing
PutObjectRetention Missing
PutObjectTagging Missing
PutPublicAccessBlock Missing
RestoreObject Missing
SelectObjectContent Missing

Implementation details

Most x-amz- headers are not implemented.

Endpoint specific details

  • GetBucketVersioning: Stub implementation (Garage does not yet support versionning so this always returns "versionning not enabled").

  • ListObjects: Implemented, but there isn't a very good specification of what encoding-type=url covers so there might be some encoding bugs. In our implementation the url-encoded fields are in the same in ListObjects as they are in ListObjectsV2.

  • PutBucketWebsite: Implemented, but only stores the index document suffix and the error document path. Redirects are not supported.