在S3中允许公众读取和存储区所有者完全控制

时间:2019-05-07 16:07:46

标签: node.js amazon-web-services amazon-s3

即使从其他AWS帐户上传图像,我也希望将其公开显示。我有当前的存储桶策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::mybucketname/*"
        }
    ]
}

当我使用主要帐户中的凭据进行上传时,此方法非常有用,但是当我使用ACL添加的其他帐户进行上传时,该方法不适用。在我阅读时,我发现可以添加bucket-owner-full-controlpublic-read,但不能同时添加两者。我的最终目标是允许两个AWS帐户都可以完全访问该对象,并在上载时具有公共读取权限。这可能吗(理想情况下,没有两个请求)?

2 个答案:

答案 0 :(得分:1)

上面接受的答案是错误的,因为从另一个帐户发布的对象将忽略S3存储桶策略。

在交叉帐户发布上应用多个ACL的正确方法如下:

aws s3 cp --recursive blahdir s3://bucketname/blahdir/ --cache-control public,max-age=31536000 --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers full=id=S3_ACCOUNT_CANONICAL_ID

答案 1 :(得分:0)

否,似乎您只能在Amazon S3中创建对象时指定一个ACL。

有关每个罐头ACL含义的详细信息,请参见:Canned ACL

有关所有权如何工作的详细信息,请参见:Amazon S3 Bucket and Object Ownership

就个人而言,我不建议使用ACL来控制访问。它们是Amazon S3早期的遗留物。这些天,如果您希望公开大量对象,特别是如果它们在同一存储桶/路径中,则建议使用存储桶策略

因此,可以使用bucket-owner-full-access上传对象,并且存储桶策略可以使对象公开访问。