如何在 Amazon S3 存储桶中更改公开(匿名)拥有的对象的所有权?

上次更新时间:2019 年 9 月 24 日

我的 Amazon Simple Storage Service (Amazon S3) 存储桶拥有具公有(匿名)所有权的对象。如何更改对象的所有权,以便我的 AWS 账户拥有此对象?

简短描述

默认情况下,S3 对象归上传此对象的身份所有。这意味着,如果您允许对存储桶的公有写入访问权限,则公开拥有公有(匿名)用户上传的对象。要防止安全问题,最佳实践是阻止对存储桶的公有访问权限

如果匿名用户已将某个对象上传到存储桶,且您希望 AWS 账户拥有此对象,您必须修改对象的访问控制列表 (ACL)。更改对象的 ACL,以授予存储桶拥有者(您的账户)对象的完全控制权。

解决方法

请按照以下步骤将对象的所有权更改为拥有存储桶的 AWS 账户:

1.    要添加对象 ACL,请使用 AWS 命令行界面 (AWS CLI) 运行 put-object-acl 命令。包括 --acl 选项与值 bucket-owner-full-control,以添加 ACL 来授予对象的存储桶拥有者控制权。然后,包括 --no-sign-request 选项以对请求使用匿名凭证。完整 put-object-acl 命令和您所需的选项类似于以下内容:  

aws s3api put-object-acl --bucket awsexamplebucket --key awsexampleobject  --acl bucket-owner-full-control   --no-sign-request

2.    要应用所有权更改,您必须将对象复制在同一位置上。为此,您可以运行 cp 命令,类似于以下内容:

aws s3 cp s3://awsexamplebucket/awsexampleobject  s3://awsexamplebucket/awsexampleobject  --metadata-directive REPLACE

3.    要检查所有权更改,请运行 get-object-acl 命令,类似于以下内容:

aws s3api get-object-acl --bucket awsexamplebucket --key awsexampleobject

该命令会返回输出,其中显示对象的所有者,类似于以下内容:

{
    "Owner": {
        "DisplayName": "jane",
        "ID": "75050348ef85628a0977bexamplebdbc3062ce76f35cb463345ae65c2608d099"
    },
    "Grants": [
        {
            "Grantee": {
                "DisplayName": "jane",
                "ID": "75050348ef85628a0977bexamplebdbc3062ce76f35cb463345ae65c2608d099",
                "Type": "CanonicalUser"
            },
            "Permission": "FULL_CONTROL"
        }]}

这篇文章对您是否有帮助?

我们可以改进什么?


需要更多帮助吗?