当其他 AWS 账户向我的 Amazon S3 存储桶上传对象时,如何要求他们向我授予对象的所有权?

上次更新时间:2019 年 4 月 26 日

我希望其他 AWS 账户的用户能够将对象上传到我的 Amazon Simple Storage Service (Amazon S3) 存储桶。但我想要求这些用户授予我对这些对象的完全控制。该如何操作? 

解决方法

添加存储桶策略, 以仅在用户授予您(存储桶拥有者)完全的对象控制权时才允许他们向您的存储桶上传对象。

例如,此存储桶策略规定, ExampleUser 仅在对象的访问控制列表 (ACL) 设置为 bucket-owner-full-control 时才可以将对象上传到 awsexamplebucket

{
    "Id": "Policy1541018284691",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1541018283275",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::awsexamplebucket/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            },
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:user/ExampleUser"
                ]
            }
        }
    ]
}

添加此存储桶策略后,用户必须在其上传请求中将对象的 ACL 设置为bucket-owner-full-control,与以下类似:

aws s3 cp example.jpg s3://awsexamplebucket --acl bucket-owner-full-control

如果用户的上传请求不符合 ACL 要求,则他们收到错误消息“调用 PutObject 操作时出现错误(拒绝访问):拒绝访问”。

对于存储桶中由其他账户拥有的现有对象,对象拥有者可以运行 put-object-acl 命令来授予您完全控制权限:

aws s3api put-object-acl --bucket awsexamplebucket --key example.jpg --acl bucket-owner-full-control