【问题标题】:AWS S3 Bucket policy public. How to make object private?AWS S3 存储桶策略公开。如何将对象设为私有?
【发布时间】:2017-12-12 05:00:18
【问题描述】:

我有一个带有 GetObject 的存储桶,所有存储桶都满了 (*)。我想将一些对象设为私有(通过对象级操作 ACL),即只有存储桶所有者应该对对象具有读取权限。我已经浏览了所有可用的文档,但找不到任何可能的方法。谁能确认这是否可能?

【问题讨论】:

  • 一旦桶被公开,所有内容都是公开的。一个简单的解决方案是创建另一个包含私有数据的存储桶。然后创建一个允许读取权限的新安全策略(和组),并且只将组/策略分配给需要访问私有数据的用户。
  • “一旦桶被公开,所有内容都是公开的。”我想对此进行确认,因为我无法在文档中明确找到这一点。谢谢你。我也在考虑您建议的解决方案,但想确认是否可以将存储桶策略全部公开。

标签: amazon-web-services amazon-s3 aws-java-sdk


【解决方案1】:

您不能使用 S3 对象 ACL,因为 ACL 没有 DENY。

您可以修改 S3 策略以指定对象并拒绝访问单个项目。

示例 S3 策略(请注意,此策略禁止所有人访问 GetObject 的两个文件):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::mybucket/*"
        },
        {
            "Sid": "DenyPublicReadGetObject",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::mybucket/block_this_file",
                "arn:aws:s3:::mybucket/block_this_file_too"
            ]
        }
    ]
}

如果您想添加条件以使某些用户仍然可以访问对象,请在资源部分之后添加条件,如下所示。此条件将允许 IAM 用户 john.wayne 和 bob.hope 仍然调用 GetObject。

        "Resource": [
            "arn:aws:s3:::mybucket/block_this_file",
            "arn:aws:s3:::mybucket/block_this_file_too"
        ],
        "Condition": {
            "StringNotEquals": {
                "aws:username": [
                    "john.wayne",
                    "bob.hope"
                ]
            }
        }

【讨论】:

  • 请注意...添加 DENY 也可能会阻止存储桶所有者也访问该对象!
  • @JohnRotenstein。第一个例子确实否认了所有者,所以我附上了关于每个人的注释。第二个示例显示如何创建条件以允许指定用户使用 GetObject,例如不要为他们否认。
猜你喜欢
  • 1970-01-01
  • 2014-11-24
  • 1970-01-01
  • 2019-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-11
相关资源
最近更新 更多