我想取消S3存储桶images/login_logo.png
中文件(my-test-bucket
)的公共访问权限。
目前,此文件的权限设置如下:
如上图所示。它没有每个人的公共访问权限。
但我仍然可以从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个文件的大型公共存储桶中单个文件的公共访问权限的最佳方法是什么?
由于this issue,我无法将make public
应用于大型存储桶。
答案 0 :(得分:3)
默认情况下,Amazon S3中的所有对象都是私有的。
您可以通过广告管理政策(例如上面的广告)或通过在特定对象上添加权限来访问对象。
如果这些方法中的 授予对象的访问权限,则可以访问该对象。因此,您的存储桶策略授予对整个存储桶的访问权限这一事实意味着您的对象是公共的。
为一个文件制作例外的唯一方法是添加拒绝政策,例如:
{
"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"
}
]
}
拒绝始终会覆盖允许,以便该对象保持私密状态。
但是,请注意:此政策拒绝对所有人(包括 you!)的读取权限。您可能需要对其进行调整,以便仍然可以访问(可能使用NotPrincipal
)。