amazon-web-services - Amazon S3 - 如何自动公开文件夹的新内容
问题描述
我正在使用 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”显然被存储桶的实际名称所取代。
谢谢你。
解决方案
默认情况下,Amazon S3 中的对象是私有的。
如果您希望使对象可公开访问(对没有 IAM 凭证的人),您有两种选择:
选项 1:存储桶策略
您可以创建使内容可公开访问的存储桶策略。例如,此策略授予任何人GetObject
访问权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::examplebucket/*"
]
}
]
}
请参阅:存储桶策略示例 - Amazon Simple Storage Service
您还需要关闭S3 存储桶上的阻止公共访问以允许存储桶策略。
选项 2:公开对象
您也可以将 Amazon S3 中的特定对象设为公开。
上传对象时,指定 的访问控制列表 ( ACL
) public-read
。您还需要关闭阻止公共访问以允许对象级权限。
当您说“我必须再次公开我的文件夹”时,我怀疑您正在进入 Amazon S3 控制台,选择一个文件夹,然后使用“公开”选项。这相当于设置ACL
. 您可以通过在上传对象时指定 ACL或使用存储桶策略来避免此额外步骤。
推荐阅读
- exchangelib - 使用 exchangelib 时发生错误时清除缓存
- go - CGO:将 Go 字节数组转换为 C char* 并返回,字节数组中出现空终止符
- java - 全屏背景,无论屏幕大小并保持图像纵横比
- excel - Excel - 使用 vlookup 自动更新值
- sql-server - SQL-use FOR XML PATH 用于两个 TABLE
- java - 配置错误时如何立即关闭springboot?
- php - 财务打印机未收到命令
- linux - 如何使用 Nagios Core 监控端口?
- android - 我想在颤振中使用 better_palyer 包自动重复视频
- sql - 如何根据oracle sql中的某些条件删除重复记录?