Move S3 compatibility docs to a separate file

Signed-off-by: Stanislav Bogatyrev <stanislav@nspcc.ru>
This commit is contained in:
Stanislav Bogatyrev 2021-08-19 20:16:49 +03:00 committed by Stanislav Bogatyrev
parent 1548809b7d
commit a82e31436e
2 changed files with 241 additions and 240 deletions

241
README.md
View file

@ -58,244 +58,5 @@ $ S3_GW_PEERS_0_ADDRESS=grpcs://192.168.130.72:8080 \
- [Configuration](./docs/configuration.md)
- [NeoFS AuthMate](./docs/authmate.md)
- [AWS CLI basic usage](./docs/aws_cli.md)
- [AWS S3 API compatibility](./docs/aws_s3_compat.md)
## S3 API supported
Reference:
* [AWS S3 API Reference](https://docs.aws.amazon.com/AmazonS3/latest/API/s3-api.pdf)
### Limitations
#### ACL
For now there are some restrictions:
* [Bucket policy](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html)
support only one `Principal` (type `AWS`) per `Statement`. To refer all users use `"AWS": "*"`
* AWS conditions and wildcard are not supported in [resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-arn-format.html)
* Only `CanonicalUser` (with hex encoded public key) and `All Users Group` are supported in [ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html)
### Object
| Method | Status |
| ------------------------- | ----------------------- |
| CopyObject | Supported |
| DeleteObject | Supported |
| DeleteObjects | Supported, aka DeleteMultipleObjects |
| GetObject | Supported |
| GetObjectTorrent | Unsupported, won't be |
| HeadObject | Supported |
| ListObjectParts | Unsupported |
| ListObjects | Supported |
| ListObjectsV2 | Supported |
| PutObject | Supported (Content-MD5 option is not supported) |
| SelectObjectContent | Unsupported |
| WriteGetObjectResponse | Unsupported |
#### ACL
| Method | Status |
| ------------------------- | ----------------------- |
| GetObjectAcl | Supported |
| PutObjectAcl | Supported |
#### Locking
| Method | Status |
| ------------------------- | ----------------------- |
| GetObjectLegalHold | Unsupported |
| GetObjectLockConfiguration| Unsupported, aka GetBucketObjectLockConfig |
| GetObjectRetention | Unsupported |
| PutObjectLegalHold | Unsupported |
| PutObjectLockConfiguration| Unsupported, aka PutBucketObjectLockConfig |
| PutObjectRetention | Unsupported |
#### Multipart
Should be supported eventually.
| Method | Status |
| ------------------------- | ----------------------- |
| AbortMultipartUpload | Unsupported |
| CompleteMultipartUpload | Unsupported |
| CreateMultipartUpload | Unsupported, aka InitiateMultipartUpload and NewMultipartUpload |
| ListMultipartUploads | Unsupported |
| ListParts | Unsupported |
| UploadPart | Unsupported, aka PutObjectPart |
| UploadPartCopy | Unsupported, aka CopyObjectPart |
#### Tagging
Also passed in `PutObject` parameters. We can support adding via `PutObject`
and getting via `GetBucketTagging`, but deleting and putting can't be
supported normally.
| Method | Status |
| ------------------------- | ----------------------- |
| DeleteObjectTagging | Unsupported |
| GetObjectTagging | Unsupported |
| PutObjectTagging | Unsupported |
#### Versioning
See also `GetObject` and other method parameters.
| Method | Status |
| ------------------------- | ----------------------- |
| ListObjectVersions | Supported (null-versioning), aka ListBucketObjectVersions |
| RestoreObject | Unsupported |
### Bucket
| Method | Status |
| ------------------------- | ----------------------- |
| CreateBucket | Supported, aka PutBucket |
| DeleteBucket | Supported |
| GetBucketLocation | Unsupported |
| HeadBucket | Supported |
| ListBuckets | Supported |
| PutPublicAccessBlock | Unsupported |
#### Acceleration
| Method | Status |
| ---------------------------------- | ----------------------- |
| GetBucketAccelerateConfiguration | Unsupported, aka GetBucketAccelerate |
| PutBucketAccelerateConfiguration | Unsupported |
#### ACL
| Method | Status |
| ------------------------- | ----------------------- |
| GetBucketAcl | Supported |
| PutBucketAcl | Supported |
#### Analytics
| Method | Status |
| ---------------------------------- | ----------------------- |
| DeleteBucketAnalyticsConfiguration | Unsupported |
| GetBucketAnalyticsConfiguration | Unsupported |
| ListBucketAnalyticsConfigurations | Unsupported |
| PutBucketAnalyticsConfiguration | Unsupported |
#### Cors
| Method | Status |
| ------------------------- | ----------------------- |
| DeleteBucketCors | Unsupported |
| GetBucketCors | Unsupported |
| PutBucketCors | Unsupported |
#### Encryption
| Method | Status |
| ------------------------- | ----------------------- |
| DeleteBucketEncryption | Unsupported |
| GetBucketEncryption | Unsupported |
| PutBucketEncryption | Unsupported |
#### Inventory
| Method | Status |
| ---------------------------------- | ----------------------- |
| DeleteBucketInventoryConfiguration | Unsupported |
| GetBucketInventoryConfiguration | Unsupported |
| ListBucketInventoryConfigurations | Unsupported |
| PutBucketInventoryConfiguration | Unsupported |
#### Lifecycle
| Method | Status |
| ------------------------------- | ----------------------- |
| DeleteBucketLifecycle | Unsupported |
| GetBucketLifecycle | Unsupported |
| GetBucketLifecycleConfiguration | Unsupported |
| PutBucketLifecycle | Unsupported |
| PutBucketLifecycleConfiguration | Unsupported |
#### Logging
| Method | Status |
| ------------------------- | ----------------------- |
| GetBucketLogging | Unsupported |
| PutBucketLogging | Unsupported |
#### Metrics
| Method | Status |
| -------------------------------- | ----------------------- |
| DeleteBucketMetricsConfiguration | Unsupported |
| GetBucketMetricsConfiguration | Unsupported |
| ListBucketMetricsConfigurations | Unsupported |
| PutBucketMetricsConfiguration | Unsupported |
#### Notifications
| Method | Status |
| ---------------------------------- | ----------------------- |
| GetBucketNotification | Unsupported |
| GetBucketNotificationConfiguration | Unsupported |
| ListenBucketNotification | Unsupported, non-standard? |
| PutBucketNotification | Unsupported |
| PutBucketNotificationConfiguration | Unsupported |
#### Ownership controls
| Method | Status |
| ----------------------------- | ----------------------- |
| DeleteBucketOwnershipControls | Unsupported |
| GetBucketOwnershipControls | Unsupported |
| PutBucketOwnershipControls | Unsupported |
#### Policy and replication
| Method | Status |
| ----------------------- | ----------------------- |
| DeleteBucketPolicy | Unsupported |
| DeleteBucketReplication | Unsupported |
| DeletePublicAccessBlock | Unsupported |
| GetBucketPolicy | Supported |
| GetBucketPolicyStatus | Unsupported |
| GetBucketReplication | Unsupported |
| PostPolicyBucket | Unsupported, non-standard? |
| PutBucketPolicy | Supported |
| PutBucketReplication | Unsupported |
#### Request payment
| Method | Status |
| ------------------------- | ----------------------- |
| GetBucketRequestPayment | Unsupported |
| PutBucketRequestPayment | Unsupported |
#### Tagging
| Method | Status |
| ----------------------- | ----------------------- |
| DeleteBucketTagging | Unsupported |
| GetBucketTagging | Unsupported |
| PutBucketTagging | Unsupported |
#### Tiering
| Method | Status |
| ---------------------------------------------- | ----------------------- |
| DeleteBucketIntelligentTieringConfiguration | Unsupported |
| GetBucketIntelligentTieringConfiguration | Unsupported |
| ListBucketIntelligentTieringConfigurations | Unsupported |
| PutBucketIntelligentTieringConfiguration | Unsupported |
#### Versioning
| Method | Status |
| ------------------------- | ----------------------- |
| GetBucketVersioning | Unsupported |
| PutBucketVersioning | Unsupported |
#### Website
| Method | Status |
| ------------------------- | ----------------------- |
| DeleteBucketWebsite | Unsupported |
| GetBucketWebsite | Unsupported |
| PutBucketWebsite | Unsupported |

240
docs/aws_s3_compat.md Normal file
View file

@ -0,0 +1,240 @@
## S3 API support
Reference:
* [AWS S3 API Reference](https://docs.aws.amazon.com/AmazonS3/latest/API/s3-api.pdf)
### Limitations
#### ACL
For now there are some restrictions:
* [Bucket policy](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html)
support only one `Principal` (type `AWS`) per `Statement`. To refer all users use `"AWS": "*"`
* AWS conditions and wildcard are not supported in [resources](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-arn-format.html)
* Only `CanonicalUser` (with hex encoded public key) and `All Users Group` are supported in [ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html)
### Object
| Method | Status |
| ------------------------- | ----------------------- |
| CopyObject | Supported |
| DeleteObject | Supported |
| DeleteObjects | Supported, aka DeleteMultipleObjects |
| GetObject | Supported |
| GetObjectTorrent | Unsupported, won't be |
| HeadObject | Supported |
| ListObjectParts | Unsupported |
| ListObjects | Supported |
| ListObjectsV2 | Supported |
| PutObject | Supported (Content-MD5 option is not supported) |
| SelectObjectContent | Unsupported |
| WriteGetObjectResponse | Unsupported |
#### ACL
| Method | Status |
| ------------------------- | ----------------------- |
| GetObjectAcl | Supported |
| PutObjectAcl | Supported |
#### Locking
| Method | Status |
| ------------------------- | ----------------------- |
| GetObjectLegalHold | Unsupported |
| GetObjectLockConfiguration | Unsupported, aka GetBucketObjectLockConfig |
| GetObjectRetention | Unsupported |
| PutObjectLegalHold | Unsupported |
| PutObjectLockConfiguration | Unsupported, aka PutBucketObjectLockConfig |
| PutObjectRetention | Unsupported |
#### Multipart
Should be supported eventually.
| Method | Status |
| ------------------------- | ----------------------- |
| AbortMultipartUpload | Unsupported |
| CompleteMultipartUpload | Unsupported |
| CreateMultipartUpload | Unsupported, aka InitiateMultipartUpload and NewMultipartUpload |
| ListMultipartUploads | Unsupported |
| ListParts | Unsupported |
| UploadPart | Unsupported, aka PutObjectPart |
| UploadPartCopy | Unsupported, aka CopyObjectPart |
#### Tagging
Also passed in `PutObject` parameters. We can support adding via `PutObject`
and getting via `GetBucketTagging`, but deleting and putting can't be
supported normally.
| Method | Status |
| ------------------------- | ----------------------- |
| DeleteObjectTagging | Unsupported |
| GetObjectTagging | Unsupported |
| PutObjectTagging | Unsupported |
#### Versioning
See also `GetObject` and other method parameters.
| Method | Status |
| ------------------------- | ----------------------- |
| ListObjectVersions | Supported (null-versioning), aka ListBucketObjectVersions |
| RestoreObject | Unsupported |
### Bucket
| Method | Status |
| ------------------------- | ----------------------- |
| CreateBucket | Supported, aka PutBucket |
| DeleteBucket | Supported |
| GetBucketLocation | Unsupported |
| HeadBucket | Supported |
| ListBuckets | Supported |
| PutPublicAccessBlock | Unsupported |
#### Acceleration
| Method | Status |
| ---------------------------------- | ----------------------- |
| GetBucketAccelerateConfiguration | Unsupported, aka GetBucketAccelerate |
| PutBucketAccelerateConfiguration | Unsupported |
#### ACL
| Method | Status |
| ------------------------- | ----------------------- |
| GetBucketAcl | Supported |
| PutBucketAcl | Supported |
#### Analytics
| Method | Status |
| ---------------------------------- | ----------------------- |
| DeleteBucketAnalyticsConfiguration | Unsupported |
| GetBucketAnalyticsConfiguration | Unsupported |
| ListBucketAnalyticsConfigurations | Unsupported |
| PutBucketAnalyticsConfiguration | Unsupported |
#### CORS
| Method | Status |
| ------------------------- | ----------------------- |
| DeleteBucketCors | Unsupported |
| GetBucketCors | Unsupported |
| PutBucketCors | Unsupported |
#### Encryption
| Method | Status |
| ------------------------- | ----------------------- |
| DeleteBucketEncryption | Unsupported |
| GetBucketEncryption | Unsupported |
| PutBucketEncryption | Unsupported |
#### Inventory
| Method | Status |
| ---------------------------------- | ----------------------- |
| DeleteBucketInventoryConfiguration | Unsupported |
| GetBucketInventoryConfiguration | Unsupported |
| ListBucketInventoryConfigurations | Unsupported |
| PutBucketInventoryConfiguration | Unsupported |
#### Lifecycle
| Method | Status |
| ------------------------------- | ----------------------- |
| DeleteBucketLifecycle | Unsupported |
| GetBucketLifecycle | Unsupported |
| GetBucketLifecycleConfiguration | Unsupported |
| PutBucketLifecycle | Unsupported |
| PutBucketLifecycleConfiguration | Unsupported |
#### Logging
| Method | Status |
| ------------------------- | ----------------------- |
| GetBucketLogging | Unsupported |
| PutBucketLogging | Unsupported |
#### Metrics
| Method | Status |
| -------------------------------- | ----------------------- |
| DeleteBucketMetricsConfiguration | Unsupported |
| GetBucketMetricsConfiguration | Unsupported |
| ListBucketMetricsConfigurations | Unsupported |
| PutBucketMetricsConfiguration | Unsupported |
#### Notifications
| Method | Status |
| ---------------------------------- | ----------------------- |
| GetBucketNotification | Unsupported |
| GetBucketNotificationConfiguration | Unsupported |
| ListenBucketNotification | Unsupported, non-standard? |
| PutBucketNotification | Unsupported |
| PutBucketNotificationConfiguration | Unsupported |
#### Ownership controls
| Method | Status |
| ----------------------------- | ----------------------- |
| DeleteBucketOwnershipControls | Unsupported |
| GetBucketOwnershipControls | Unsupported |
| PutBucketOwnershipControls | Unsupported |
#### Policy and replication
| Method | Status |
| ----------------------- | ----------------------- |
| DeleteBucketPolicy | Unsupported |
| DeleteBucketReplication | Unsupported |
| DeletePublicAccessBlock | Unsupported |
| GetBucketPolicy | Supported |
| GetBucketPolicyStatus | Unsupported |
| GetBucketReplication | Unsupported |
| PostPolicyBucket | Unsupported, non-standard? |
| PutBucketPolicy | Supported |
| PutBucketReplication | Unsupported |
#### Request payment
| Method | Status |
| ------------------------- | ----------------------- |
| GetBucketRequestPayment | Unsupported |
| PutBucketRequestPayment | Unsupported |
#### Tagging
| Method | Status |
| ----------------------- | ----------------------- |
| DeleteBucketTagging | Unsupported |
| GetBucketTagging | Unsupported |
| PutBucketTagging | Unsupported |
#### Tiering
| Method | Status |
| ---------------------------------------------- | ----------------------- |
| DeleteBucketIntelligentTieringConfiguration | Unsupported |
| GetBucketIntelligentTieringConfiguration | Unsupported |
| ListBucketIntelligentTieringConfigurations | Unsupported |
| PutBucketIntelligentTieringConfiguration | Unsupported |
#### Versioning
| Method | Status |
| ------------------------- | ----------------------- |
| GetBucketVersioning | Unsupported |
| PutBucketVersioning | Unsupported |
#### Website
| Method | Status |
| ------------------------- | ----------------------- |
| DeleteBucketWebsite | Unsupported |
| GetBucketWebsite | Unsupported |
| PutBucketWebsite | Unsupported |