我使用amazon s3将图片存储在一个桶里,云锋则用来获取和发布这些图片。我的问题是,每次我上传一个新的图片,它就会自动变成私有的(试图获取它的结果是403 forbidden)。为了能够得到它并在我的网站上显示它,我必须再次将我的文件夹公开(在我已经做了)。你知道为什么会有这种行为吗?
我的bucket是公开的,这里是我的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: Bucket策略
您可以创建一个 水桶政策 使得内容可以公开访问。例如,该政策允许 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 bucket上,允许使用Bucket策略。
选项2:将对象公开
你也可以将Amazon S3中的特定对象公开。
当上传对象时,指定一个访问控制列表(ACL
) public-read
. 您还需要 屏蔽公众访问 以允许对象级的权限。
当你说 "我必须再次将我的文件夹公开"我怀疑你是进入Amazon S3控制台,选择一个文件夹,然后使用 公开 选项。这相当于将 ACL
. 你可以通过指定ACL来避免这个额外的步骤。上传对象时 或使用Bucket策略。
根据你的子文件夹的前缀制作一个Lambda触发器。然后在创建事件中更新对象的权限,使其公开。
请看 https:/docs.aws.amazon.comAmazonS3latestdevNotificationHowTo.html。