无法通过公共链接访问s3中存储的电子邮件

时间:2019-07-17 18:36:05

标签: amazon-web-services amazon-s3 amazon-ses

我正在一个项目中,我需要将电子邮件存储在S3中,然后通过公共链接进行访问。电子邮件已成功接收并存储在S3存储桶中,问题是我无法公开访问存储的电子邮件。为了访问它,我必须从控制台手动将其公开。我已经正确设置了存储桶策略,并且为了测试它,我上传了图像,然后通过公共链接访问它,可以访问它,但是如果没有电子邮件,则可以访问。

以下是我的存储桶的策略配置:

{
    "Version": "2012-10-17",
    "Id": "Policy1562997205894",
    "Statement": [
        {
            "Sid": "Stmt1562997204081",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::payprworkbucket",
                "arn:aws:s3:::payprworkbucket/*"
            ]
        }
    ]
}

我进行了很多搜索,发现了这个solution,但它也不适用于我。请告诉我如何解决此问题,我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

AWS论坛上一位AWS官员的最后回答描述了[1],SES服务使用 bucket-owner-full-control罐头ACL 将对象放入S3。

>

查看有关 bucket-owner-full-control [2]的文档,他们指出:

  

对象所有者和存储桶所有者都对对象进行FULL_CONTROL。如果在创建存储桶时指定了此罐头ACL,则Amazon S3会忽略它。

因此,我认为,ACL授予存储桶拥有者读取SES放置到存储桶中的对象的权限。它还授予所有者执行更多操作的权限,例如 s3:PutObject s3:DeleteObject s3:GetObjectAcl s3 :PutObjectAcl 。 [3]但是,未为所有人指定授予。

为了允许公共读取对象,您可以使用所有者帐户权限手动更新每个对象的ACL。只需通过以下cli命令授予罐头ACL 公开读取aws s3api put-object-acl --bucket awsexamplebucket --key exampleobject --acl public-read [4] [5]

如何大规模地做到这一点?

有一篇文章介绍了如何将罐装ACL应用于大量对象。 [6]

另一种方法是使用S3跨区域复制。有一个选项可以更改副本所有者(要使此方法起作用,源桶和目标存储桶所有者必须不同)。 [7] [8]一旦存储桶所有者和对象所有者相同,则上面讨论的策略应该可以正常工作。

最后,您可以配置S3事件通知[9]来触发Lambda函数,该函数将任何传入文件复制到另一个存储桶或另一个键中,从而有效地更改了新创建对象的所有者。

参考文献

[1] https://forums.aws.amazon.com/thread.jspa?threadID=219058
[2] https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl
[3] https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#acl-access-policy-permission-mapping
[4] https://aws.amazon.com/de/premiumsupport/knowledge-center/read-access-objects-s3-bucket/
[5] https://docs.aws.amazon.com/cli/latest/reference/s3api/put-object-acl.html
[6] https://alexwilson.tech/blog/2017/11/30/updating-permissions-in-large-s3-buckets/
[7] https://docs.aws.amazon.com/AmazonS3/latest/dev/crr-change-owner.html
[8] https://docs.aws.amazon.com/AmazonS3/latest/dev/crr-walkthrough-3.html
[9] https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html