允许管理员访问 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 存储桶中的子文件夹。保持所有其他文件夹公开的主要内容,如果未能解决你的问题,请参考以下文章

允许用户访问 S3 存储桶中的一个目录

允许搜寻器访问其他帐户中的Amazon S3存储桶

AWS Rekognition和s3调用Python Lambda中的子文件夹

从 AWS S3 存储桶访问文件

AWS S3策略限制用户仅列出存储桶中的某些文件夹

从 pyspark 访问 S3 存储桶中的文件