我在这里问了一个非常相似的问题。我想在这个问题上增加更多的清晰度。
根据 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 。