我想取消我的 S3 存储桶 my-test-bucket
内的文件 (images/login_logo.png
) 的公共(public)访问权限。
目前该文件的权限设置如下:
如上图所示。它不适合所有人公开访问。
但我仍然可以通过 s3 链接访问它。
这个现象是我的存储桶策略造成的吗?
{
"Version": "2012-10-17",
"Id": "Policy1528702071704",
"Statement": [
{
"Sid": "Stmt1528702067249",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-test-bucket/*"
}
]
}
如果是这样,在包含大约 10,000 个文件的大型公共(public)存储桶中取消单个文件的公共(public)访问权限的最佳方法是什么?
由于 this issue,我无法将 make public
应用于大存储桶.
最佳答案
默认情况下,Amazon S3 中的所有对象都是私有(private)的。
您可以通过存储桶策略(例如上面的存储桶策略)或通过添加特定对象的权限来使对象可访问。
如果这些方法中的任何一个授予对对象的访问权限,则该对象是可访问的。因此,您的存储桶策略授予对整个存储桶的访问权限这一事实意味着您的对象是公共(public)的。
对一个文件进行异常(exception)处理的唯一方法是添加拒绝策略,例如:
{
"Version": "2012-10-17",
"Id": "Policy1528702071704",
"Statement": [
{
"Sid": "AllowALl",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-test-bucket/*"
},
{
"Sid": "DenyOneObject",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-test-bucket/images/login_logo.png"
}
]
}
拒绝始终会覆盖允许,因此该对象将保持私有(private)。
但是,请注意:此策略拒绝所有人(包括您!)的读取访问权限。您可能需要对其进行调整,以便仍然可以获得访问权限(可能通过使用 NotPrincipal
)。
关于amazon-web-services - 从存储桶策略中排除一个 Amazon S3 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50792869/