【问题标题】:Is it possible to have an "Allow" effect override a "Deny"?是否可以让“允许”效果覆盖“拒绝”?
【发布时间】:2019-08-23 04:24:41
【问题描述】:

我有一个 S3 存储桶,其结构如下:

top_level_name
  sub_level_1
  sub_level_2
  sub_level_3

我想对top_level_name 执行全面拒绝所有操作(以排除原本有权访问此存储桶的 IAM 策略),并有选择地允许特定用户访问他们各自的sub_levels。最初我认为该政策可能类似于:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DenyTopLevel",
            "Action": [
                "s3:*"
            ],
            "Effect": "Deny",
            "Resource": "arn:aws:s3:::test-bucket/top_level_name/*",
            "Principal": "*"
        },
        {
            "Sid": "AllowSubLevel1",
            "Action": [
                "s3:PutObject"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::test-bucket/top_level_name/sub_level_1/*",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::12345:user/my_user_account"
                ]
            }
        }
    ]
}

在执行过程中,Allow 似乎无法取代 Deny。有没有办法可以重写我的存储桶策略来实现这种模式?

【问题讨论】:

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


【解决方案1】:

没有。 Deny 总是覆盖 Allow

但是,如果您只需删除您的第一个 Deny 部分,就可以满足您的用例。这是因为默认情况下,用户没有权限。因此,除非政策明确允许,否则他们无权在顶层使用 PutObject

您的策略的第二部分授予较低级别的权限,这是您想要的。

如果您有其他授予顶级访问权限的政策(例如通过* 政策),那么您将需要重新考虑您的其他政策(例如通过从他们的Allow 授权中排除此存储桶)。

【讨论】:

  • 感谢@John,这很有意义。如果我有一个特别敏感的存储桶并且应该将其权限“选择加入”(类似于示例),是否有最佳实践?听起来我必须管理在 IAM 级别使用的每个策略,或者可能将存储桶拆分到自己的受保护 AWS 账户中?
  • 是的,为敏感数据(例如 HR 或 Payroll)创建单独的 AWS 账户,然后限制有权访问该账户中资源的人员是很常见的。
猜你喜欢
  • 1970-01-01
  • 2012-04-14
  • 2019-03-17
  • 2014-09-03
  • 1970-01-01
  • 2014-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多