【问题标题】:Prevent S3 user from posting to public buckets?阻止 S3 用户发布到公共存储桶?
【发布时间】:2017-12-30 11:53:14
【问题描述】:

假设存在一个与我的私有存储桶名称非常相似的公共存储桶。我想防止用户拼错私有存储桶并意外将敏感数据发布给公众。

我了解最佳做法是使存储桶名称尽可能唯一。

澄清:我想阻止用户发布到任何公共 S3 存储桶

【问题讨论】:

标签: amazon-web-services amazon-s3 amazon-iam


【解决方案1】:

公共存储桶非常少见。事实上,从 安全 角度和 成本 角度来看,他们都非常不鼓励 - 有人可以上传非法文件并将其用于文件共享,而存储桶所有者会付钱吧!

我通常会说有人能够成功上传到随机存储桶的机会几乎为零,但我怀疑您正在考虑邪恶的一方可能会创建类似的情况-命名bucket,希望收集机密数据(类似于域名露营)。

在这种情况下,您可以为用户创建拒绝策略以禁止访问所有 S3 存储桶,您特别指定的存储桶除外

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Allow",
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::good-bucket1",
                "arn:aws:s3:::good-bucket2"
            ]
        },
        {
            "Sid": "NotOthers",
            "Effect": "Deny",
            "Action": [
                "s3:*"
            ],
            "NotResource": [
                "arn:aws:s3:::good-bucket1",
                "arn:aws:s3:::good-bucket2"                ]
        }
    ]
}

这将起作用,因为针对 IAM 用户的 Deny 将覆盖存储桶策略中的任何 Allow。唯一的缺点是您需要专门列出您希望包含/排除的存储桶,因为无法指定适用于“公共存储桶”的规则。

【讨论】:

    【解决方案2】:

    您无法控制另一个存储桶,因此您无法阻止这种情况发生。

    为了回应它,我想您可以定期查询该存储桶,假设它是公开可读的,以搜索您认为应该已上传到 您的 存储桶的内容,但不清楚您会做什么在那一点上做。

    或者,为您的用户提供一个上传页面(可能静态托管在您的 S3 存储桶中)并要求您的用户使用该页面来启动上传(通过 POST 或 AWS S3 JavaScript SDK),这样用户就不必输入存储桶名称,因此不会意外定位到错误的存储桶。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-07
      • 1970-01-01
      • 2018-10-06
      • 1970-01-01
      • 2016-11-16
      • 2014-12-23
      相关资源
      最近更新 更多