【问题标题】:How to make an s3 object public in s3 private bucket without using presigned URLs如何在不使用预签名 URL 的情况下在 s3 私有存储桶中公开 s3 对象
【发布时间】:2021-02-25 12:57:58
【问题描述】:

我有一个具有以下策略的 s3 存储桶

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "VisualEditor0",
        "Effect": "Allow",
        "Action": [
            "s3:PutObject",
            "s3:GetObject",
            "s3:ListBucket",
            "s3:DeleteObject"
        ],
        "Resource": [
            "arn:aws:s3:::bucket",
            "arn:aws:s3:::bucket/*"
        ]
    }
]

}

存储桶的公共访问也被阻止。这是存储桶策略的快照

基本上我希望存储桶是私有的,以防止未经授权的用户上传文件,但我想授予任何用户对存储桶内对象的公共读取访问权限

【问题讨论】:

  • CloudFront + OAI 可能是一种选择
  • 除了cloudfront还有别的吗。
  • 对于未经授权的用户,你的意思是匿名用户吗?
  • 是的,应该是匿名用户
  • 好的,然后关闭“阻止所有公共访问”。您只需要允许匿名用户使用s3:GetObject

标签: amazon-web-services amazon-s3 policy bucket


【解决方案1】:

您似乎希望允许任何人检索一个对象,但不应允许他们做任何其他事情。

有两种方法可以做到这一点:

1.使用 ACL

您可以将public-read ACL 分配给各个对象。这还需要为两个与 ACL 相关的选项停用 S3 Block Public Access。

这样,您的存储桶仍然是私有的,但如果对象名称已知,则可以访问这些对象。 (列表未启用。)

2。使用存储桶策略

此政策将允许任何人访问存储桶中的对象:

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Effect":"Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-bucket/*"
    }
  ]
}

它将允许任何获取对象的尝试,但不允许列出、删除等。

对于上述两个选项,如果您希望“授权”用户能够执行上传和删除对象等操作,则应将这些权限直接分配给 IAM 用户(不使用S3 存储桶策略)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-17
    • 2018-06-03
    • 1970-01-01
    • 2019-01-27
    • 2013-10-11
    • 2021-11-11
    • 2015-11-22
    • 2020-05-27
    相关资源
    最近更新 更多