AWS S3 Bucket政策公开。如何使对象私有?

时间:2017-12-12 05:00:18

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

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

1 个答案:

答案 0 :(得分: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"
                ]
            }
        }