17 KiB
+++ title = "S3 Compatibility status" weight = 20 +++
Global S3 features
Implemented:
- path-style URLs (
garage.tld/bucket/key
) - vhost-style URLs (
bucket.garage.tld/key
) - putting and getting objects in buckets
- multipart uploads
- listing objects
- access control on a per-access-key-per-bucket basis
- CORS headers on web endpoint
Not implemented:
- object-level ACL
- object versioning
- encryption
- most
x-amz-
headers
Endpoint implementation
All APIs that are not implemented will return a 501 Not Implemented.
Core
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
Endpoint | Garage | Openstack Swift | Ceph Object Gateway | Riak CS |
---|---|---|---|---|
AbortMultipartUpload | ✅ Implemented | ✅ | ||
CompleteMultipartUpload | ✅ Implemented | ✅ | ||
CreateMultipartUpload | ✅ Implemented | ✅ | ||
ListMultipartUpload | ✅ Implemented | ✅ | ||
ListParts | ✅ Implemented | ✅ | ||
UploadPart | ✅ Implemented | ✅ | ||
UploadPartCopy | ✅ Implemented | ✅ |
Website
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
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. 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
Endpoint | Garage | Openstack Swift | Ceph Object Gateway | Riak CS |
---|---|---|---|---|
DeleteBucketLifecycle | ❌Missing | ❌ | ||
GetBucketLifecycleConfiguration | ❌Missing | ❌ | ||
PutBucketLifecycleConfiguration | ❌Missing | ❌ | ||
GetBucketVersioning | ❌ Stub (see below) | ✅ | ||
ListObjectVersions | ❌Missing | ❌ | ||
PutBucketVersioning | ❌Missing | ❌ |
Replication
Endpoint | Garage | Openstack Swift | Ceph Object Gateway | Riak CS |
---|---|---|---|---|
DeleteBucketReplication | ❌Missing | ❌ | ||
GetBucketReplication | ❌Missing | ❌ | ||
PutBucketReplication | ❌Missing | ❌ |
Amazon specific
-
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.