【问题标题】:Remove AWS S3 bucket having Read by Everyone permission through Bucket policy通过存储桶策略删除具有所有人读取权限的 AWS S3 存储桶
【发布时间】:2019-01-23 07:57:03
【问题描述】:

假设我有一个具有“所有人阅读”权限的 S3 存储桶。存储桶不公开。意味着任何人都可以通过在浏览器中输入对象的 url 来访问对象。现在我想从浏览器中的 URL 中删除此访问权限。一种选择是转到每个图像并从“所有人”部分中删除“阅读”。但由于有大量的图像,所以这是不可行的。

那么我可以设置这样的存储桶策略,它只允许一个 IAM 用户而不是浏览器的东西访问吗?我尝试添加这样的存储桶策略,只允许特定用户访问所有资源,但仍可以通过 URL 浏览访问静态图像。有什么想法吗?

编辑:添加我尝试过的策略

{
  "Id": "Policy1",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::test-bucket-public-issue",
      "Principal": {
        "AWS": [
          "arn:aws:iam::AccounId:user/Username"
        ]
      }
    }
  ]
}

【问题讨论】:

  • 你能分享一下你添加的桶策略吗?
  • @VaisakhPS 嗨,我已经更新了我的帖子。
  • 我通过提供公共访问权限测试了相同的存储桶策略,然后使用您提供的那个将其撤销,对我来说它工作正常。
  • @VaisakhPS 你能否详细说明你尝试了什么以及它是否符合我的条件。

标签: amazon-web-services amazon-s3


【解决方案1】:

好的@Himanshu Mohan 我会向你解释我做了什么。我创建了一个 S3 存储桶,然后添加了以下存储桶策略

{
    "Version": "2012-10-17",
    "Id": "Policy1534419239074",
    "Statement": [
        {
            "Sid": "Stmt1534419237657",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::xxx-xxx-test/*"
        }
    ]
}

添加此策略时,存储桶将自动公开

然后我上传了一张你提到的图片,我可以通过浏览器访问同一张图片。

现在我把政策改回你说的那样

现在我无法访问图像,将显示访问被拒绝xml 响应。我看到的唯一区别是我在存储桶名称"Resource": "arn:aws:s3:::xxx-xxx-test/*" 之后添加了/*

【讨论】:

  • 嗨@Vaisakh。我们的场景之间存在差异。在我的情况下,对于“每个人”组(在每个图像 -> 权限 -> 公共访问下),每个图像都有“读取”权限为“是”。因此,即使我执行了与您相同的步骤,我仍然可以公开访问图像。
  • @HimanshuMohan 如果您已明确授予对每个对象的访问权限,则必须将其恢复为私有,然后应用上述策略。为此,从任何具有 S3 访问权限的 ec2 机器上运行以下 CLI 命令。 aws s3 ls --recursive s3://test-bucket-public-issue | cut -d' ' -f5- | awk '{print $NF}' | while read line; do echo "$line" aws s3api put-object-acl --acl private --bucket test-bucket-public-issue --key "$line" done 参考 - stackoverflow.com/questions/9238629/…
  • 问题是它是通过 Drupal 网站的 s3fs 插件上传的。每次上传任何图像时,这些设置都会默认出现。因此,即使我手动删除了此权限,后续的上传也将再次成为公共访问权限。这些图像是从具有特定用户访问密钥和令牌的 s3fs 的网站访问的。
  • 然后它必须在代码内部进行处理,对于存储桶内的对象,您可以使用脚本更改权限。您在代码/插件中处理的另一个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
  • 2021-08-12
  • 2022-01-03
  • 1970-01-01
相关资源
最近更新 更多