无法通过 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:PutObject、s3:DeleteObject、s3:GetObjectAcl、s3:PutObjectAcl。 [3] 但是,没有为 每个人 .
指定补助金
为了允许 public 读取对象,您可以使用所有者帐户权限手动更新每个对象的 ACL。只需通过以下 cli 命令授予固定 ACL public-read: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
我正在做一个项目,我需要在 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:PutObject、s3:DeleteObject、s3:GetObjectAcl、s3:PutObjectAcl。 [3] 但是,没有为 每个人 .
指定补助金为了允许 public 读取对象,您可以使用所有者帐户权限手动更新每个对象的 ACL。只需通过以下 cli 命令授予固定 ACL public-read: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