【问题标题】:Allow admin access to sub_foldier in s3 bucket. Keep all other folders public允许管理员访问 s3 存储桶中的子文件夹。保持所有其他文件夹公开
【发布时间】: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"]

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


【解决方案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 请求
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-19
  • 2018-04-19
  • 2014-03-21
  • 2021-08-21
  • 2021-04-27
  • 2023-03-30
相关资源
最近更新 更多