AWS S3 存储桶策略 public。如何使对象私有?

AWS S3 Bucket policy public. How to make object private?

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

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

您可以修改 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"
                ]
            }
        }