亚马逊S3 - 如何自动公开文件夹的新内容?

问题描述 投票:0回答:1

我使用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-web-services amazon-s3 directory amazon-cloudfront public
1个回答
1
投票

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策略。


0
投票

根据你的子文件夹的前缀制作一个Lambda触发器。然后在创建事件中更新对象的权限,使其公开。

请看 https:/docs.aws.amazon.comAmazonS3latestdevNotificationHowTo.html。

© www.soinside.com 2019 - 2024. All rights reserved.