首页 > 解决方案 > 在拒绝语句中将账户标识符指定为 NotPrincipal 时,AWS 账户委派不起作用

问题描述

我在这里问了一个非常相似的问题。我想在这个问题上增加更多的清晰度。

根据 AWS 文档,

NotPrincipal With Deny
当您在与“Effect”:“Deny”相同的策略语句中使用 NotPrincipal 时,策略语句中指定的操作将明确拒绝所有委托人,但指定的委托人除外。

当您使用 AWS 账户标识符作为策略中的委托人时,您将授权委托给该账户。

当帐户(根)ARN 包含在 Allow 语句的 Principal 元素中时,对帐户的委派有效。
相反,当帐户(根)ARN 包含在拒绝语句的 NotPrincipal 元素中时,对帐户的委派不起作用。

这让我想到 - 即使通过在 NotPrincipal 中排除 Account 根,Deny 也永远不能委托给 Account,即您仍然需要在策略的 NotPrincipal 元素中明确指定要从 Deny 中排除的各个 IAM 用户。此行为与只需要指定帐户(根)以进行进一步委派的 Allow 非常不同 - 无需明确指定哪些 IAM 用户应包含在 Allow 中。

问题:对帐户的授权是否仅适用于 Allow 语句?即,即使通过 NotPrincipal 元素排除了该帐户,假设对帐户的授权也不适用于 Deny 语句,这是否正确?

场景 1:允许仅使用帐户(根)ARN 的代表

下面的存储桶策略将让账户通过其 IAM 策略决定账户中的哪些 IAM 用户可以访问存储桶 - 委托有效。

 "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::1234567890:root"
                },
        "Action": "s3:*",
        "Resource": [
            "arn:aws:s3:::abhiawsbucket-accessdemo",
            "arn:aws:s3:::abhiawsbucket-accessdemo/*"
        ]

场景 2:拒绝不仅使用帐户(根)ARN 进行委派

下面的存储桶策略不会让账户通过其 IAM 策略决定账户中的哪些 IAM 用户可以访问存储桶 - 委托不起作用。在 NotPrincipal 元素中指定帐户(根)ARN 不会委托。

 "Effect": "Deny",
        "NotPrincipal": {
            "AWS": "arn:aws:iam::1234567890:root"
                },
        "Action": "s3:*",
        "Resource": [
            "arn:aws:s3:::abhiawsbucket-accessdemo",
            "arn:aws:s3:::abhiawsbucket-accessdemo/*"
        ]

总而言之,我试图找出以下陈述是否正确

委托给帐户(根)可以通过 Principal 和 NotPrincipal 元素实现,但委托本身仅适用于Effect:Allow。即使在 NotPrincipal 中排除了 Account (Root) 时,Account (Root) 的委派也不适用于Effect:Deny 。

标签: amazon-web-servicesamazon-s3aws-policies

解决方案


推荐阅读