假设我有以下s3结构
company_folder
folder1
folder2
folder3
sub_folder1
sub_folder2
我目前拥有以下权限,允许访问每个文件夹,子文件夹和文件。这适用于网络应用。
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::company_folder/*"
使用管理员IAM访问密钥ID:ABCD我可以使用carrierwave将图像放入sub_folders。我使用单个cloudfront根URL来提供来自各种“文件夹”和“子文件夹”
的图像发送到'sub_folder2'的图像不会显示在网站上,而且分辨率很高。除admin之外,任何人都不应该访问它们。
如何更改'company_folder'的存储分区政策中'sub_folder2'的限制
我需要拒绝GET和PUT访问除admin以外的所有人的'sub_folder2',同时保持对'company_folder'中其他所有内容的公开读取。
我认为'company_folder'需要保持公开,因为这是我的cloudfront网址指向的地方。
这是仅仅编辑存储桶策略的简单解决方案吗?
答案 0 :(得分:1)
以下存储桶策略之类的内容应该对您有用。诀窍是明确拒绝访问您不想要的资源/操作,然后允许访问您想要的资源/操作。请注意存储桶策略,IAM策略和对象ACL之间的交互。另外,请确保使用Trusted Advisor来警告您具有世界可读性的存储桶。
{
"Id": "Policy1429934459265",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1429934187436",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::company_folder/*",
"Principal": "*"
},
{
"Sid": "Stmt1429934452272",
"Action": [
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:DeleteObjectVersion",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:GetObjectTorrent",
"s3:GetObjectVersion",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTorrent",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:PutObjectVersionAcl",
"s3:RestoreObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::company_folder/folder3/sub_folder2/*",
"Principal": {
"AWS": [
"arn:aws:iam::888888888888:user/youruser"
]
}
},
{
"Sid": "Stmt1429934245711",
"Action": "s3:GetObject",
"Effect": "Deny",
"Resource": "arn:aws:s3:::company_folder/folder3/sub_folder2/*",
"Principal": "*"
}
]
}