我使用 amazon s3 将图像存储在存储桶中,并使用 cloudfront 来获取和发布这些图片。我的问题是,每次我上传新图像时,它都会自动变为私有(private)(尝试获取它会导致 403 禁止)。为了能够获取它并在我的网站上显示它,我必须再次公开我的文件夹(在我完成之后)。您知道为什么会出现这种行为吗?
我的存储桶是公共(public)的,以下是我的 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 中的对象默认是私有(private)的。
如果您希望使对象可公开访问(对于没有 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 存储桶上关闭阻止公共(public)访问以允许存储桶策略。
选项 2:公开对象
您也可以将 Amazon S3 中的特定对象公开。
上传对象时,指定访问控制列表( ACL
)为 public-read
。您还需要关闭“阻止公共(public)访问”以允许对象级权限。
当您说“我必须再次公开我的文件夹”时,我怀疑您正在进入 Amazon S3 控制台,选择一个文件夹,然后使用公开强>选项。这相当于设置 ACL
。您可以通过在上传对象时指定 ACL 或使用存储桶策略来避免此额外步骤。
关于amazon-web-services - Amazon S3 - 如何自动公开文件夹的新内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61616392/