当其他 AWS 账户将对象上传到我的 Amazon S3 存储桶时,我如何才能要求他们授予我这些对象的完全控制权?
上次更新日期:2021 年 1 月 5 日
我希望其他 AWS 账户的用户能够将对象上传到我的 Amazon Simple Storage Service (Amazon S3) 存储桶。但我想要求这些用户授予我对这些对象的完全控制。该如何操作?
解决方法
添加存储桶策略,要求用户在将对象上传到存储桶时包含bucket-owner-full-control 访问控制列表 (ACL)。
例如,此存储桶策略规定, ExampleUser 仅在对象的 ACL 设置为 bucket-owner-full-control 时才可以将对象上传到 DOC-EXAMPLE-BUCKET:
{
"Id": "Policy1541018284691",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1541018283275",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control"
}
},
"Principal": {
"AWS": [
"arn:aws:iam::111122223333:user/ExampleUser"
]
}
}
]
}
添加此存储桶策略后,用户必须将所需的 ACL 作为上传请求的一部分,与以下内容类似:
aws s3 cp example.jpg s3://DOC-EXAMPLE-BUCKET --acl bucket-owner-full-control
如果用户的上传请求不符合 ACL 要求,则他们会收到错误消息“调用 PutObject 操作时出现错误(拒绝访问):拒绝访问”。
对于存储桶中由其他账户拥有的现有对象,对象拥有者可以运行 put-object-acl 命令来授予您完全控制权限:
aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key example.jpg --acl bucket-owner-full-control
bucket-owner-full-control ACL 授予存储桶拥有者对其他账户上传的对象的完全访问权限,但仅此 ACL 并不能授予对象的所有权。要自动获取使用 bucket-owner-full-control ACL 上传的对象的所有权,请将 S3 对象所有权设置为存储桶拥有者首选。更新 S3 对象所有权后,使用 bucket-owner-full-control ACL 上传的新对象将自动由存储桶的账户拥有。