当其他 AWS 账户将对象上传到我的 Amazon S3 桶时,我怎样才能要求他们授予我对对象的完全控制权?

1 分钟阅读
0

我想允许其他 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 权限和访问策略权限的映射

AWS 官方
AWS 官方已更新 6 个月前