

# IAM JSON 策略元素：NotResource
<a name="reference_policies_elements_notresource"></a>

`NotResource` 是高级策略元素，可明确匹配除指定资源以外的所有资源。使用 `NotResource` 时只列出不应匹配的一些资源，而不是包括将匹配的长资源列表，因此生成的策略较短。这对于在单个 AWS 服务中应用的策略特别有用。

例如，假设您有名为 `HRPayroll` 的组。不应允许 `HRPayroll` 的成员访问除 `HRBucket` 存储桶中的 Amazon S3 文件夹之外的任何 `Payroll` 资源。以下策略显式拒绝访问除所列资源外的所有 Amazon S3 资源。但请注意，该策略不向用户授予对任何资源的访问权限。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Deny",
    "Action": "s3:*",
    "NotResource": [
      "arn:aws:s3:::HRBucket/Payroll",
      "arn:aws:s3:::HRBucket/Payroll/*"
    ]
  }
}
```

------

通常，为了显式拒绝对某一资源的访问，可以编写一条策略，其中使用 `"Effect":"Deny"`，而且包含一个单独列出每个文件夹的 `Resource` 元素。但是，在这种情况下，每次向 `HRBucket` 添加文件夹或向 Amazon S3 添加不应访问的资源时，都必须将其名称添加到 `Resource` 元素中的列表中。如果改用 `NotResource` 元素，除非将文件夹名称添加到 `NotResource` 元素，否则会自动拒绝用户访问新文件夹。

使用 `NotResource` 时应注意，在此元素中指定的资源是不受限的*唯一*资源。反过来，这限制了将应用于该操作的所有资源。在上述示例中，该策略只影响 Amazon S3 操作，因此只影响 Amazon S3 资源。如果 `Action` 元素还包含 Amazon EC2 操作，则该策略将拒绝访问 `NotResource` 元素中未指定的任何 EC2 资源。要了解服务中的哪些操作允许指定资源的 ARN，请参阅 [AWS 服务的操作、资源和条件键](reference_policies_actions-resources-contextkeys.html)。

## 具有其他元素的 NotResource
<a name="notresource-element-combinations"></a>

您应**从不**将 `"Effect": "Allow"`、`"Action": "*"` 和 `"NotResource": "arn:aws:s3:::HRBucket"` 元素一起使用。此语句非常危险，因为它允许对在 `HRBucket` S3 存储桶之外的所有资源执行 AWS 中的所有操作。这甚至允许用户向自己添加策略，从而允许他们访问 `HRBucket`。请勿执行此操作。

在同一语句或一个策略内的不同语句中使用 `NotResource` 元素和 `"Effect": "Allow"` 时要谨慎。`NotResource` 允许未显式列出的所有服务和资源，并且可能导致向用户授予超出您意图的更多权限。在同一语句中使用 `NotResource` 元素和 `"Effect": "Deny"` 将拒绝未显式列出的服务和资源。