【问题标题】:How do I set AWS IAM permissions to “Deny all of wildcard X except Y”?如何将 AWS IAM 权限设置为“拒绝除 Y 之外的所有通配符 X”?
【发布时间】:2021-09-30 01:14:08
【问题描述】:

在管理其他人的 AWS 账户时,我尽量在合理的范围内给予用户尽可能开放的权限。

因此,我将“允许”授予“ec2:*”,但随后限制他们使用“拒绝 ec2:*Vpn*”或“拒绝 ec2:Create*”等拒绝语句执行危险操作

但是,假设我发现了一个我不想想要拒绝的操作,例如“ec2:DescribeVpnGateways”。如何从我的“拒绝”声明中省略这一声明并且仅这一声明

注意:“拒绝 ec2:*Vpn*”算作 显式 拒绝,因此任何尝试“拒绝 ec2:*Vpn*”和“允许 ec2: DescribeVpnGateways”同时会导致“拒绝”规则覆盖“允许”规则。

注意 2: IAM 策略中有一个元素称为“NotAction”。这允许您拒绝除指定操作之外的所有操作。如果我使用“Deny: NotAction: ec2:DescribeVpnGateways”语句,这将拒绝 每一个 AWS 操作,但“ec2:DescribeVpnGateways”除外,这比我们想要的更具破坏性。

注3: AWS does not allow you to combine "Action" and "NotAction" fields in the same policy statement.。如果我们可以并且只使用两个字段之间的交集,那就太酷了。

是否存在解决此问题的方法?我是否需要重构我的 IAM 以仅预先授予我的用户批准的权限,而不是先授予他们所有权限然后再拒绝他们?

【问题讨论】:

    标签: amazon-web-services amazon-iam user-permissions


    【解决方案1】:

    Per AWS documentation,显式DENY总是覆盖显式ALLOW。无论DENYALLOW 是在同一策略的不同语句中,还是在附加到同一用户/角色的不同策略中,这都是正确的。

    更可取的方法是明确允许您希望他们能够执行的操作。否则,当 AWS 在未来实施新操作时,您的用户将能够执行这些操作(即使它们非常危险),因为它们不在您的 DENY 语句中。例如,假设 AWS 在某个时刻添加了一个 ec2:DeleteAllInstances 操作;由于您的声明没有明确拒绝此操作,并且您已允许 ec2:*,因此您的用户将能够删除所有实例。

    EC2 很难,因为有很多不同的操作,但明确说明应该允许哪些操作确实要安全得多。

    【讨论】:

    • 如果这样做,当上层(即某个组)添加不需要的权限时会发生什么?
    • 如果一个特定的用户/组/角色能够授予他们不应该授予的权限,那么问题就是禁止该用户/组/角色被允许授予任何东西他们不应该被允许。查看标题为“控制附加和分离托管策略的权限”的documentation section
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 2018-06-11
    相关资源
    最近更新 更多