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"
]
}
}
我有一个包含 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"
]
}
}