无法通过 public link 访问存储在 s3 中的电子邮件

unable to access stored email in s3 via public link

我正在做一个项目,我需要在 S3 中存储电子邮件,然后通过 public link 访问它。电子邮件已成功接收并存储在 S3 存储桶中,问题是我无法访问存储的电子邮件 publicly。为了访问它,我必须从控制台手动将其设置为 public。我已经正确设置了存储桶策略,只是为了测试它,我上传了图像,然后通过 public link 访问它,它可以访问,但不能访问电子邮件。

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

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

我搜索了很多并找到了这个 solution 但它也不适合我。请告诉我如何解决这个问题,我们将不胜感激。

正如 AWS 论坛上一位 AWS 官员的最后一个回答所描述的 [1],SES 服务使用 bucket-owner-full-control 固定 ACL 将对象放入 S3 .

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

Both the object owner and the bucket owner get FULL_CONTROL over the object. If you specify this canned ACL when creating a bucket, Amazon S3 ignores it.

因此我认为,ACL 授予存储桶所有者读取由SES 放入存储桶中的对象的权限。它还授予所有者执行更多操作的权限,例如 s3:PutObjects3:DeleteObjects3:GetObjectAcls3:PutObjectAcl。 [3] 但是,没有为 每个人 .

指定补助金

为了允许 public 读取对象,您可以使用所有者帐户权限手动更新每个对象的 ACL。只需通过以下 cli 命令授予固定 ACL public-readaws 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