amazon-web-services - Amazon S3 - 如何自动公开文件夹的新内容

标签 amazon-web-services amazon-s3 directory amazon-cloudfront public

我使用 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/

相关文章:

c# - Resharper 中的警告 "Return value of pure method is not used"

android 文本文件导入 我在哪里保存文本文件什么文件夹?

amazon-web-services - 在 AWS LEX 中从一个意图调用另一个意图

java - S3 Java 客户端多次失败,出现 "Premature end of Content-Length delimited message body"或 "java.net.SocketException Socket closed"

amazon-s3 - Amazon Alexa Skill S3 限制

powershell - 如何在 PowerShell 中悄悄删除包含内容的目录

amazon-web-services - 我可以从 Athena 删除数据(表中的行)吗?

amazon-web-services - 在 AWS 中配置凭证轮换时出现错误 : setSecret: Unable to log into database with previous, current or pending secret

jQuery 上传到公共(public) S3 存储桶给出 ------WebKitFormBoundary

amazon-web-services - Jupyter notebook、pyspark、hadoop-aws 问题