当其他 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 上传的新对象将自动由存储桶的账户拥有。