允许管理员访问 s3 存储桶中的子文件夹。保持所有其他文件夹公开
Posted
技术标签:
【中文标题】允许管理员访问 s3 存储桶中的子文件夹。保持所有其他文件夹公开【英文标题】:Allow admin access to sub_foldier in s3 bucket. Keep all other folders public 【发布时间】:2015-04-18 17:47:45 【问题描述】:假设我有以下 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 将图像放入子文件夹中。我使用单个云端根 URL 来传递来自各种“文件夹”和“子文件夹”的图像
发送到“sub_folder2”的图像不会显示在网站上,它们是高分辨率的。除了管理员之外,任何人都不应访问它们。
如何在“company_folder”的存储桶策略中更改对“sub_folder2”的限制
我需要拒绝除管理员之外的所有人对“sub_folder2”的 GET 和 PUT 访问,同时保持对“company_folder”中其他所有内容的公开阅读。
我认为“company_folder”需要保持公开状态,因为这是我的云端 URL 指向的位置。
这只是编辑存储桶策略的简单解决方案吗?
【问题讨论】:
为更敏感的数据设置不同的存储桶可能更容易 我想我需要把它放在同一个桶下,因为我用carrierwave将其他图像推送到company_folder。不确定我是否可以指向单个载波初始化程序中的两个存储桶 config.asset_host = ENV['HOST_NAME'] config.fog_directory = ENV["S3_BUCKET_NAME"] 【参考方案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": "*"
]
【讨论】:
即使允许的用户被授予访问权限,我仍然无法对私有文件夹执行 GET 请求以上是关于允许管理员访问 s3 存储桶中的子文件夹。保持所有其他文件夹公开的主要内容,如果未能解决你的问题,请参考以下文章