允许管理员访问s3存储桶中的sub_foldier。保持所有其他文件夹公开

时间:2015-04-18 17:47:45

标签: amazon-web-services amazon-s3 policy amazon-iam

假设我有以下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网址指向的地方。

这是仅仅编辑存储桶策略的简单解决方案吗?

1 个答案:

答案 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": "*"
        }
    ]
}