Reference:
|
Legend |
π’ |
Supported |
π‘ |
Partially supported |
π΅ |
Not supported yet, but will be in future |
π΄ |
Not applicable or will never be supported |
|
Method |
Comments |
π’ |
CopyObject |
Done on gateway side |
π’ |
DeleteObject |
|
π’ |
DeleteObjects |
aka DeleteMultipleObjects |
π’ |
GetObject |
|
π΄ |
GetObjectTorrent |
We don't plan implementing BT gateway |
π’ |
HeadObject |
|
π’ |
ListParts |
Parts loaded with MultipartUpload |
π’ |
ListObjects |
|
π’ |
ListObjectsV2 |
|
π’ |
PutObject |
Content-MD5 header deprecated |
π΅ |
SelectObjectContent |
Need to have some Lambda to execute SQL |
π΅ |
WriteGetObjectResponse |
Waiting for Lambda to be developed |
π’ |
GetObjectAttributes |
|
- DeleteObjects limited by max amount of objects which can be deleted per request. See
max_object_to_delete_per_request
parameter.
- For calculating object ETag, we use SHA256 hash instead of MD5.
- PutObject into a container with public-write permissions as an anonymous user (for instance, with CLI option --no-sign-request) is impossible, if try to set custom ACL for the object. It happens because container ACL rules may be changed only by container owner.
- Header
X-Amz-Meta-Neofs-Copies-Number
can be used with PutObject
, CopyObject
, CreateMultipartUpload
methods to set object copies number. Otherwise, the default value from config will be used. See neofs section for more details.
- Use metadata
neofs-copies-number
parameter for aws CLI. For instance:
aws s3api put-object --endpoint $S3HOST --bucket $BUCKET --key $OBJECT_KEY --body /path/to/file.txt --metadata neofs-copies-number=3
For now there are some limitations:
- Bucket policy supports only one
Principal
per Statement
.
Principal must be "AWS": "*"
or "*"
(to refer all users) or "CanonicalUser": "NiskPF9pfRMzg7V7PeB4d6ogLzu74a1L2Q"
(base58 encoded address of desired user).
{
"Statement": [
{
"Principal": "*"
}
]
}
{
"Statement": [
{
"Principal": {
"AWS": "*"
}
}
]
}
- Resource in bucket policy is a string value or array of strings. Each item MUST contain bucket name, CAN contain object name (wildcards are not supported):
{
"Statement": [
{
"Resource": "arn:aws:s3:::bucket"
}
]
}
{
"Statement": [
{
"Resource": [
"arn:aws:s3:::bucket",
"arn:aws:s3:::bucket/some/object"
]
}
]
}
- Action is a string value or array of strings:
{
"Statement": [
{
"Action": "s3:PutObject"
}
]
}
{
"Statement": [
{
"Action": ["s3:PutObject", "s3:PutObjectAcl"]
}
]
}
- AWS conditions and wildcard are not supported in resources
- Only
CanonicalUser
(with hex encoded public key) and All Users Group
are supported in ACL.
Authenticated Users group
is not supported. It is a part of All Users Group
and can't be separated from it.
- It is not possible to remove GRANTS from container owner. Using PutObjectAcl with empty grants has no effect to GRANTS for container owner, despite method completes without error.
{
"Owner": {"DisplayName": "NiskPF9pfRMzg7V7PeB4d6ogLzu74a1L2Q","ID": "NiskPF9pfRMzg7V7PeB4d6ogLzu74a1L2Q"},
"Grants": []
}
|
Method |
Comments |
π‘ |
GetObjectAcl |
See Limitations |
π‘ |
PutObjectAcl |
See Limitations |
For now there are some limitations:
- Retention period can't be shortened, only extended.
- You can't delete locks or object with unexpired lock. This means PutObjectLegalHold with OFF status raise Unsupported error.
|
Method |
Comments |
π‘ |
GetObjectLegalHold |
|
π’ |
GetObjectLockConfiguration |
GetBucketObjectLockConfig |
π‘ |
GetObjectRetention |
|
π‘ |
PutObjectLegalHold |
|
π’ |
PutObjectLockConfiguration |
PutBucketObjectLockConfig |
π‘ |
PutObjectRetention |
|
Should be supported soon.
|
Method |
Comments |
π’ |
AbortMultipartUpload |
|
π’ |
CompleteMultipartUpload |
|
π’ |
CreateMultipartUpload |
|
π’ |
ListMultipartUploads |
|
π’ |
ListParts |
|
π’ |
UploadPart |
|
π’ |
UploadPartCopy |
|
|
Method |
Comments |
π’ |
DeleteObjectTagging |
|
π’ |
GetObjectTagging |
|
π’ |
PutObjectTagging |
|
See also GetObject
and other method parameters.
|
Method |
Comments |
π’ |
ListObjectVersions |
ListBucketObjectVersions |
π΅ |
RestoreObject |
|
|
Method |
Comments |
π’ |
CreateBucket |
PutBucket |
π’ |
DeleteBucket |
|
π’ |
GetBucketLocation |
|
π’ |
HeadBucket |
|
π’ |
ListBuckets |
|
π΅ |
PutPublicAccessBlock |
|
π΅ |
GetPublicAccessBlock |
|
CreateBucket
method allows you to select a placement policy using the LocationConstraint
parameter in the AWS CLI. The policy name should be passed as a value.
- Policies mapping can be defined via:
- Authmate during bucket creation. These policies are available only for generated credentials.
- Gate configuration. These policies are shared and available for all gate clients.
- Example: aws s3api create-bucket --bucket $BUCKET --endpoint $S3HOST --create-bucket-configuration LocationConstraint=$POLICY_NAME
|
Method |
Comments |
π΄ |
GetBucketAccelerateConfiguration |
GetBucketAccelerate |
π΄ |
PutBucketAccelerateConfiguration |
|
|
Method |
Comments |
π‘ |
GetBucketAcl |
See ACL limitations |
π‘ |
PutBucketAcl |
See ACL Limitations |
Bucket ACLs are disabled, by default. See details here.
See Ownership section for details.
|
Method |
Comments |
π΅ |
DeleteBucketAnalyticsConfiguration |
|
π΅ |
GetBucketAnalyticsConfiguration |
|
π΅ |
ListBucketAnalyticsConfigurations |
|
π΅ |
PutBucketAnalyticsConfiguration |
|
|
Method |
Comments |
π’ |
DeleteBucketCors |
|
π’ |
GetBucketCors |
|
π’ |
PutBucketCors |
|
|
Method |
Comments |
π΅ |
DeleteBucketEncryption |
|
π΅ |
GetBucketEncryption |
|
π΅ |
PutBucketEncryption |
|
|
Method |
Comments |
π΅ |
DeleteBucketInventoryConfiguration |
|
π΅ |
GetBucketInventoryConfiguration |
|
π΅ |
ListBucketInventoryConfigurations |
|
π΅ |
PutBucketInventoryConfiguration |
|
|
Method |
Comments |
π΅ |
DeleteBucketLifecycle |
|
π‘ |
GetBucketLifecycle |
It always returns NoSuchLifecycleConfiguration error |
π΅ |
GetBucketLifecycleConfiguration |
|
π΅ |
PutBucketLifecycle |
|
π΅ |
PutBucketLifecycleConfiguration |
|
|
Method |
Comments |
π΅ |
GetBucketLogging |
|
π΅ |
PutBucketLogging |
|
|
Method |
Comments |
π΅ |
DeleteBucketMetricsConfiguration |
|
π΅ |
GetBucketMetricsConfiguration |
|
π΅ |
ListBucketMetricsConfigurations |
|
π΅ |
PutBucketMetricsConfiguration |
|
|
Method |
Comments |
π΅ |
GetBucketNotification |
|
π΅ |
GetBucketNotificationConfiguration |
|
π΅ |
ListenBucketNotification |
non-standard? |
π΅ |
PutBucketNotification |
|
π΅ |
PutBucketNotificationConfiguration |
|
|
Method |
Comments |
π’ |
DeleteBucketOwnershipControls |
|
π’ |
GetBucketOwnershipControls |
|
π’ |
PutBucketOwnershipControls |
|
In case you need to disable ACLs manually (for instance your bucket has ACLs enabled) you should use PutBucketOwnershipControls
command:
$ aws s3api put-bucket-ownership-controls --endpoint $S3HOST --bucket $BUCKET --ownership-controls "Rules=[{ObjectOwnership=BucketOwnerEnforced}]"
Switch to Preferred
mode with the next command:
$ aws s3api put-bucket-ownership-controls --endpoint $S3HOST --bucket $BUCKET --ownership-controls "Rules=[{ObjectOwnership=BucketOwnerPreferred}]"
Switch to ObjectWriter
mode with the next command:
$ aws s3api put-bucket-ownership-controls --endpoint $S3HOST --bucket $BUCKET --ownership-controls "Rules=[{ObjectOwnership=ObjectWriter}]"
Note: ObjectWriter
mode means fully enabled ACL.
Pay attention to the fact that object owner in NeoFS is bucket owner in any case.
|
Method |
Comments |
π΅ |
DeleteBucketPolicy |
|
π΅ |
DeleteBucketReplication |
|
π΅ |
DeletePublicAccessBlock |
|
π‘ |
GetBucketPolicy |
See ACL limitations |
π΅ |
GetBucketPolicyStatus |
|
π΅ |
GetBucketReplication |
|
π’ |
PostPolicyBucket |
Upload file using POST form |
π‘ |
PutBucketPolicy |
See ACL limitations |
π΅ |
PutBucketReplication |
|
You may set requiring the bucket-owner-full-control
canned ACL for Amazon S3 PUT operations (bucket owner preferred):
$ aws s3api put-bucket-policy --endpoint $S3HOST --bucket $BUCKET --policy file://policy.json
policy.json:
Note that S3 gate supports only wildcard
for Principal
parameter see ACL section for
details.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Only allow writes to my bucket with bucket owner full control",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"s3:PutObject"
],
"Resource": "arn:aws:s3:::$BUCKET/*",
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control"
}
}
}
]
}
|
Method |
Comments |
π΄ |
GetBucketRequestPayment |
|
π΄ |
PutBucketRequestPayment |
|
|
Method |
Comments |
π’ |
DeleteBucketTagging |
|
π’ |
GetBucketTagging |
|
π’ |
PutBucketTagging |
|
|
Method |
Comments |
π΅ |
DeleteBucketIntelligentTieringConfiguration |
|
π΅ |
GetBucketIntelligentTieringConfiguration |
|
π΅ |
ListBucketIntelligentTieringConfigurations |
|
π΅ |
PutBucketIntelligentTieringConfiguration |
|
|
Method |
Comments |
π’ |
GetBucketVersioning |
|
π’ |
PutBucketVersioning |
|
|
Method |
Comments |
π΅ |
DeleteBucketWebsite |
|
π΅ |
GetBucketWebsite |
|
π΅ |
PutBucketWebsite |
|
Each meta parameter value must be non-empty. If any parameter value is an empty,
then "Your metadata headers are not supported." error will be returned on the object put operation.