

# IAM JSON 策略元素：NotAction
<a name="reference_policies_elements_notaction"></a>

`NotAction` 是与指定的操作列表*之外* 的所有内容显式匹配的高级策略元素。使用 `NotAction` 时只列出不应匹配的一些操作，而不是包括将匹配的长操作列表，因此生成的策略较短。`NotAction` 中指定的操作不受策略语句中 `Allow` 或 `Deny` 效果影响。这也就意味着，如果使用 `Allow` 效果，则允许未列出的所有适用操作或服务。此外，如果使用 `Deny` 效果，则拒绝此类未列出的操作或服务。将 `NotAction` 与 `Resource` 元素结合使用时，您需要提供策略的范围。这是 AWS 确定哪些操作或服务适用的方式。有关更多信息，请参阅以下策略示例。

**NotAction 与 Allow** 

可在包含 `"Effect": "Allow"` 的语句中使用 `NotAction` 元素来提供对 AWS 服务中所有操作（在 `NotAction` 中指定的操作除外）的访问权限。您可以将它与 `Resource` 元素结合使用以提供策略的范围，从而将允许的操作限制为那些可在指定资源上执行的操作。

以下示例允许用户访问可在任何 S3 资源上执行的所有 Amazon S3 操作，但删除存储桶的操作*除外*。此策略也不允许其他服务中的操作，因为其他服务操作不适用于 S3 资源。

```
"Effect": "Allow",
"NotAction": "s3:DeleteBucket",
"Resource": "arn:aws:s3:::*",
```

有时您可能需要允许访问大量操作。使用 `NotAction` 元素可有效地修改语句，生成更短的操作列表。例如，由于 AWS 提供了如此多的服务，您可能需要创建一个策略，以允许用户执行除访问 IAM 操作之外的所有操作。

下面的示例允许用户访问除 IAM 之外的 AWS 服务中的所有操作。

```
"Effect": "Allow",
"NotAction": "iam:*",
"Resource": "*"
```

在同一语句或一个策略内的不同语句中使用 `NotAction` 元素和 `"Effect": "Allow"` 时要谨慎。`NotAction` 匹配未显式列出或适用指定资源的所有服务和操作，并且可能导致向用户授予超出您意图的更多权限。

**NotAction 与 Deny**

可在一个语句中将 `NotAction` 元素与 `"Effect": "Deny"` 结合使用，以拒绝访问列出的所有资源，在 `NotAction` 元素中指定的操作除外。此组合不允许列出的项目，而是显式拒绝未列出的操作。您仍必须允许您要允许的操作。

下面的条件示例在用户未使用 MFA 登录时拒绝其访问非 IAM 操作。如果用户已使用 MFA 登录，则 `"Condition"` 测试失败，最后的 `"Deny"` 语句将无效。但请注意，这不会向用户授予对任何操作的访问权限，只会明确拒绝除 IAM 操作之外的所有其他操作。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Sid": "DenyAllUsersNotUsingMFA",
        "Effect": "Deny",
        "NotAction": "iam:*",
        "Resource": "*",
        "Condition": {"BoolIfExists": {"aws:MultiFactorAuthPresent": "false"}}
    }]
}
```

------

有关拒绝访问特定区域以外的操作（来自特定服务的操作除外）的示例策略，请参阅[AWS：根据请求的区域拒绝访问 AWS](reference_policies_examples_aws_deny-requested-region.md)。