我想允许其他 AWS 账户的用户将对象上传到我的 Amazon Simple Storage Service (Amazon S3) 桶。但是,我想要求用户授予我对这些对象的完全控制权。
解决方法
添加桶策略,要求用户在向您的桶上传对象时包含 bucket-owner-full-control 访问控制列表 (ACL)。
例如,此桶策略规定,只有当对象的 ACL 设置为 bucket-owner-full-control 时,ExampleUser 才能将对象上传到 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 要求,则他们会收到以下错误消息:
“An error occurred (AccessDenied) when calling the PutObject operation: Access Denied”
对于您的桶中其他账户拥有的对象,对象所有者可以运行 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 上传的对象的所有权,请将 Amazon S3 对象所有权设置为桶所有者首选。更新 S3 对象所有权后,桶所有者自动拥有使用 bucket-owner-full-control 上传的所有新对象。
相关信息
为什么我无法访问另一个 AWS 账户上传到我的 Amazon S3 桶的对象?
使用预装 ACL 管理桶
IAM 教程: 使用 IAM 角色委派多个 AWS 账户的访问权限
ACL 权限和访问策略权限的映射