【问题标题】:Object level restriction for s3 with IAM Role具有 IAM 角色的 s3 的对象级别限制
【发布时间】:2020-09-16 10:04:18
【问题描述】:

我正在尝试在 S3 的对象级别限制用户访问。

s3 存储桶中有 2 个文件夹。我正在尝试仅授予对对象中一个文件夹的访问权限。

这两个文件夹是:

  1. 经纪人
  2. 载体

这是 IAM 角色政策:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::lodeobucket"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion"
            ],
            "Resource": "arn:aws:s3:::lodeobucket/broker/*"
        }
    ]
}

但用户也可以访问运营商文件夹。

谁能建议我错过了什么?

【问题讨论】:

  • 这是 IAM 策略,而不是存储桶策略。那么有问题的用户是否附加了此政策?
  • @Marcin 是的,这是 IAM 政策,我也应该有任何存储桶政策吗?
  • 默认存储桶是私有的。因此,如果用户有权访问它,则意味着还有其他一些策略可以启用它。如果您想要该特定用户,您可以明确拒绝对该文件夹的访问。
  • @Marcin 用户只附加了该策略。但是,他仍然能够看到 'carrier' 文件夹中的对象
  • @Marcin 我正在寻找除了“经纪人”之外的任何其他文件夹。这可能吗?

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


【解决方案1】:

如果添加以下条件:

"Condition":{"StringLike":{"s3:prefix":["","broker/*"]}}

您的用户将无法进入运营商文件夹。它仍然会在控制台中可见。我认为您不能“隐藏”其他文件夹,因为这会破坏控制台访问。

您可以尝试以下策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::lodeobucket",
            "Condition":{"StringLike":{"s3:prefix":["","broker/*"]}}
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion"
            ],
            "Resource": "arn:aws:s3:::lodeobucket/broker/*"
        }
    ]
}

【讨论】:

  • IAM 文档中还有一个类似用例的示例策略:docs.aws.amazon.com/IAM/latest/UserGuide/…
  • @Marcin,这是题外话,但不得不问你。我正在尝试在巴林设计一个代码管道,但在该地区不可用。然后想到在代码构建部分之前在另一个区域拥有代码管道,并将集成来自巴林的代码部署。但是 codepipleline 没有提供将其与在巴林部署的代码集成的选项。有没有办法在我位于巴林的 EC2 机器上部署代码管道?
  • @sumanthshetty CP 一般可以部署到其他地区。也许你设置错了什么?您可以提出有关 CP 设置和您在其他地区的 CodeDeploy 的相关详细信息的新问题。
猜你喜欢
  • 2013-03-25
  • 2022-08-18
  • 2018-01-22
  • 2015-11-02
  • 1970-01-01
  • 1970-01-01
  • 2015-09-09
  • 2020-06-01
  • 1970-01-01
相关资源
最近更新 更多