IAM JSON 策略元素:NotAction
NotAction
是与指定的操作列表之外 的所有内容显式匹配的高级策略元素。使用 NotAction
时只列出不应匹配的一些操作,而不是包括将匹配的长操作列表,因此生成的策略较短。NotAction
中指定的操作不受策略语句中 Allow
或 Deny
效果影响。这也就意味着,如果使用 Allow
效果,则允许未列出的所有适用操作或服务。此外,如果使用 Deny
效果,则拒绝此类未列出的操作或服务。将 NotAction
与 Resource
元素结合使用时,您需要提供策略的范围。这是 Amazon 确定哪些操作或服务适用的方式。有关更多信息,请参阅以下策略示例。
NotAction 与 Allow
可在包含 "Effect":
"Allow"
的语句中使用 NotAction
元素来提供对 Amazon 服务中所有操作(在 NotAction
中指定的操作除外)的访问权限。您可以将它与 Resource
元素结合使用以提供策略的范围,从而将允许的操作限制为那些可在指定资源上执行的操作。
以下示例允许用户访问可在任何 S3 资源上执行的所有 Amazon S3 操作,但删除存储桶的操作除外。这将不允许用户使用 ListAllMyBuckets
S3 API 操作,因为该操作需要“*”资源。此策略也不允许其他服务中的操作,因为其他服务操作不适用于 S3 资源。
"Effect": "Allow", "NotAction": "s3:DeleteBucket", "Resource": "arn:aws:s3:::*",
有时您可能需要允许访问大量操作。使用 NotAction
元素可有效地修改语句,生成更短的操作列表。例如,由于 Amazon 提供了如此多的服务,您可能需要创建一个策略,以允许用户执行除访问 IAM 操作之外的所有操作。
下面的示例允许用户访问除 IAM 之外的 Amazon 服务中的所有操作。
"Effect": "Allow", "NotAction": "iam:*", "Resource": "*"
在同一语句或一个策略内的不同语句中使用 NotAction
元素和 "Effect": "Allow"
时要谨慎。NotAction
匹配未显式列出或适用指定资源的所有服务和操作,并且可能导致向用户授予超出您意图的更多权限。
NotAction 与 Deny
可在一个语句中将 NotAction
元素与 "Effect":
"Deny"
结合使用,以拒绝访问列出的所有资源,在 NotAction
元素中指定的操作除外。此组合不允许列出的项目,而是显式拒绝未列出的操作。您仍必须允许您要允许的操作。
下面的条件示例在用户未使用 MFA 登录时拒绝其访问非 IAM 操作。如果用户已使用 MFA 登录,则 "Condition"
测试失败,最后的 "Deny"
语句将无效。但请注意,这不会向用户授予对任何操作的访问权限,只会明确拒绝除 IAM 操作之外的所有其他操作。
{ "Version": "2012-10-17", "Statement": [{ "Sid": "DenyAllUsersNotUsingMFA", "Effect": "Deny", "NotAction": "iam:*", "Resource": "*", "Condition": {"BoolIfExists": {"aws:MultiFactorAuthPresent": "false"}} }] }
有关拒绝访问特定区域以外的操作(来自特定服务的操作除外)的示例策略,请参阅Amazon:根据请求的区域拒绝访问 Amazon。