【问题标题】:AWS S3 bucket policy public read, restricted writeAWS S3 存储桶策略公共读取,受限写入
【发布时间】:2020-05-01 16:27:34
【问题描述】:

我正在尝试为名为 files.mybucket.com 的全新漂亮存储桶设置一项政策,其中指出:

  1. 每个人都可以阅读我的对象
  2. 只有部分 IAM 用户可以执行其他所有操作。

这是我迄今为止尝试过的:

"Statement": [
    {
        "Sid": "getAll",
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:GetObject",
        "Resource": [
            "arn:aws:s3:::files.mybucket.com",
            "arn:aws:s3:::files.mybucket.com/*"
        ]
    },
    {
        "Sid": "writeSome",
        "Effect": "Allow",
        "Principal": {
            "AWS": [
                "arn:aws:iam::111111111111:user/John",
                "arn:aws:iam::111111111111:user/Dave"
            ]
        },
        "Action": "s3:*",
        "Resource": [
            "arn:aws:s3:::files.mybucket.com",
            "arn:aws:s3:::files.mybucket.com/*"
        ]
    }
]

以上似乎没有效果:即使我从语句中删除“John”主体,我仍然可以通过控制台和 Cloudberry Explorer 上传内容。

"Statement": [
    {
        "Sid": "getAll",
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:GetObject",
        "Resource": [
            "arn:aws:s3:::files.mybucket.com",
            "arn:aws:s3:::files.mybucket.com/*"
        ]
    },
    {
        "Sid": "writeSome",
        "Effect": "Deny",
        "NotPrincipal": {
            "AWS": [
                "arn:aws:iam::111111111111:user/John",
                "arn:aws:iam::111111111111:user/Dave"
            ]
        },
        "Action": "s3:*",
        "Resource": [
            "arn:aws:s3:::files.mybucket.com",
            "arn:aws:s3:::files.mybucket.com/*"
        ]
    }
]

这个看起来很有前途,因为它可以阻止用户写作(如果我删除 John,我就不能再用它写了)但它也阻止了来自未经身份验证的人的获取请求(我希望他们能够看到内容) .

那么,问题来了:如何让人们获取我的文件并阻止除 John 和 Dave 之外的所有人在存储桶上写字?

这让我发疯了。感谢您的帮助。

【问题讨论】:

  • 那么第二个策略不起作用?
  • 不,它会正确阻止写入请求,但也会阻止人们阅读。我正在使用它来存储网站的图像,并在我尝试在那里显示图像时被拒绝访问。
  • 我明白了。你使用s3:*,它拒绝了除了约翰和戴夫之外的所有人的一切。 拒绝总是胜利。但要小心使用NonPrinciple。 AWS 建议 NOT 使用它,除非您绝对必须这样做。
  • 很高兴知道否认者获胜!但我仍然不明白:如果我不使用 NotPrincipal,似乎唯一的方法是使用除 GetObject 之外的每个操作创建“拒绝”到“*”,但这将优先于每个“允许”校长在另一个声明中,对吗?对于这种情况,我没有看到不涉及 NotPrincipal 的解决方案:(

标签: amazon-web-services amazon-s3


【解决方案1】:

作为一般规则:

  • 适用于每个人的规则应写入存储桶政策
  • 仅适用于特定用户的规则应适用于 IAM 用户,或 IAM 用户组

因此:

  • 创建存储桶策略以向所有人授予读取权限(策略的第一部分,见上文)
  • 对于应该被允许访问存储桶的每个用户,为他们的 IAM 用户添加一个策略

这避免了对Deny 策略的需要,因为这些策略总是会导致问题。

【讨论】:

  • 就是这样!非常感谢。
猜你喜欢
  • 2012-04-05
  • 1970-01-01
  • 2019-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多