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 上的图像不那么公开但不完全私有?

如何保护 Amazon S3 URL

如何在不下载文件的情况下搜索amazon S3存储桶中的文件内容

Laravel 5:如何将文件从Amazon S3复制(流)到FTP?

Amazon S3 查看私有文件