Amazon S3 - 如何自动公开文件夹的新内容
Posted
技术标签:
【中文标题】Amazon S3 - 如何自动公开文件夹的新内容【英文标题】:Amazon S3 - How to automatically make the new content of a folder public 【发布时间】:2020-08-20 07:20:07 【问题描述】:我正在使用 amazon s3 将图像存储在存储桶中,并使用 cloudfront 来获取和发布这些图片。我的问题是,每次我上传新图片时,它都会自动成为私有的(试图获取它会导致 403 被禁止)。为了能够得到它并在我的网站上显示它,我必须再次公开我的文件夹(在我已经完成之后)。您知道为什么会出现这种行为吗?
我的存储桶是公开的,这里是我的 IAM 权限:
// First strategy
"Version": "2012-10-17",
"Statement": [
"Effect": "Allow",
"Action": [
"s3:HeadBucket",
"s3:GetBucketAcl",
"s3:HeadObject",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:GetObjectVersion",
"s3:GetObjectVersionAcl",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:PutObjectVersionAcl",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource": "arn:aws:s3:::my-bucket-name/*"
]
// Second strategy
"Version": "2012-10-17",
"Statement": [
"Action": [
"s3:ListAllMyBuckets"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::*"
,
"Action": [
"acm:ListCertificates",
"cloudfront:*",
"iam:ListServerCertificates",
"waf:ListWebACLs",
"waf:GetWebACL",
"wafv2:ListWebACLs",
"wafv2:GetWebACL"
],
"Effect": "Allow",
"Resource": "*"
]
“my-bucket-name”显然是被bucket的实际名称代替了。
谢谢。
【问题讨论】:
【参考方案1】:默认情况下,Amazon S3 中的对象是私有的。
如果您希望对象可公开访问(对没有 IAM 凭证的人),您有两种选择:
选项 1:存储桶策略
您可以创建一个存储桶策略,让内容可公开访问。例如,此策略授予GetObject
访问任何人:
"Version": "2012-10-17",
"Statement": [
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::examplebucket/*"
]
]
见:Bucket Policy Examples - Amazon Simple Storage Service
您还需要在 S3 存储桶上关闭阻止公共访问以允许存储桶策略。
选项 2:公开对象
您也可以将 Amazon S3 中的特定对象设为公开。
上传对象时,指定public-read
的访问控制列表(ACL
)。您还需要关闭阻止公共访问以允许对象级权限。
当你说“我必须再次公开我的文件夹”时,我怀疑你正在进入 Amazon S3 控制台,选择一个文件夹,然后使用 公开强>选项。这相当于设置ACL
。您可以通过在上传对象时指定 ACL 或使用存储桶策略来避免此额外步骤。
【讨论】:
【参考方案2】:根据您的子文件夹的前缀创建 Lambda 触发器。然后在创建事件期间更新对象的权限以使其公开。
见:https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html
【讨论】:
以上是关于Amazon S3 - 如何自动公开文件夹的新内容的主要内容,如果未能解决你的问题,请参考以下文章
如何使托管在 Amazon S3 上的图像不那么公开但不完全私有?
如何在不下载文件的情况下搜索amazon S3存储桶中的文件内容