

# IAM JSON 策略元素：Resource
<a name="reference_policies_elements_resource"></a>

IAM 策略语句中的 `Resource` 元素指定了该语句适用的一个或多个对象。语句必须包含 `Resource` 或 `NotResource` 元素。

使用 Amazon 资源名称（ARN）指定资源。ARN 的格式取决于 AWS 服务 和所引用的特定资源。尽管 ARN 格式各不相同，但您始终使用 ARN 来标识资源。有关 ARN 格式的更多信息，请参见 [IAM ARN](reference_identifiers.md#identifiers-arns)。有关如何指定资源的信息，请参阅您编写的资源声明所对应的产品文档。

**注意**  
有些 AWS 服务 不允许您为单个资源指定操作。在这些情况下，您在 `Action` 或 `NotAction` 元素中列出的任何操作都适用于该服务中的所有资源。如果是这种情况，则可以在 `Resource` 元素中使用通配符（`*`）。

下列示例适用于特定的 Amazon SQS 队列。

```
"Resource": "arn:aws:sqs:us-east-2:account-ID-without-hyphens:queue1"
```

以下示例引用了 AWS 账户 中名为 `Bob` 的 IAM 用户。

**注意**  
在 `Resource` 元素中，IAM 用户名区分大小写。

```
"Resource": "arn:aws:iam::account-ID-without-hyphens:user/Bob"
```

## 在资源 ARN 中使用通配符
<a name="reference_policies_elements_resource_wildcards"></a>

您可在 ARN（用冒号分隔的部分）的各分段中使用通配符（`*` 和 `?`）来表示：
+ 字符的任意组合（`*`）
+ 任何单个字符（`?`）

您可以在每个分段中使用多个 `*` 或 `?` 字符。如果 `*` 通配符是资源 ARN 分段的最后一个字符，则它可以扩展以匹配冒号边界以外的内容。我们建议您在 ARN 分段内使用通配符（`*` 和 `?`），用冒号隔开。

**注意**  
不得在服务分段中使用可识别 AWS 产品的通配符。有关 ARN 分段的更多信息，请参阅 [使用 Amazon 资源名称（ARN）标识 AWS 资源](reference-arns.md)

以下示例引用了其路径为 `/accounting` 的所有 IAM 用户。

```
"Resource": "arn:aws:iam::account-ID-without-hyphens:user/accounting/*"
```

下列示例适用于特定 Amazon S3 存储桶内的所有项目。

```
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
```

星号（`*`）字符可以展开以替换分段中的所有内容，包括像正斜杠（`/`）这样的字符，否则这些字符可能在给定服务命名空间中显示为分隔符。例如，请考虑以下 Amazon S3 ARN，因为相同的通配符扩展逻辑适用于所有服务。

```
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*/test/*"
```

ARN 中的通配符适用于存储桶中的以下所有对象，而不仅仅是列出的第一个对象。

```
amzn-s3-demo-bucket/1/test/object.jpg
amzn-s3-demo-bucket/1/2/test/object.jpg
amzn-s3-demo-bucket/1/2/test/3/object.jpg 
amzn-s3-demo-bucket/1/2/3/test/4/object.jpg
amzn-s3-demo-bucket/1///test///object.jpg
amzn-s3-demo-bucket/1/test/.jpg
amzn-s3-demo-bucket//test/object.jpg
amzn-s3-demo-bucket/1/test/
```

考虑前一个列表中的最后两个对象。Amazon S3 对象名称可以常规分隔符正斜杠（`/`）字符开头或结尾。虽然 `/` 可作为分隔符，但在资源 ARN 中使用此字符时没有特定意义。它将被视为与任何其他有效字符相同。ARN 将不与以下对象匹配：

```
amzn-s3-demo-bucket/1-test/object.jpg
amzn-s3-demo-bucket/test/object.jpg
amzn-s3-demo-bucket/1/2/test.jpg
```

## 指定多个资源
<a name="reference_policies_elements_resource_multiple-resources"></a>

您可以使用 ARN 数组在 `Resource` 元素中指定多个资源。下列示例适用于两个 DynamoDB 表。

```
"Resource": [
    "arn:aws:dynamodb:us-east-2:account-ID-without-hyphens:table/books_table",
    "arn:aws:dynamodb:us-east-2:account-ID-without-hyphens:table/magazines_table"
]
```

## 在资源 ARN 中使用策略变量
<a name="reference_policies_elements_resource_policy-variables"></a>

在 `Resource` 元素中，您可以在标识特定资源的 ARN 部分 (即，ARN 尾部) 中使用 JSON [策略变量](reference_policies_variables.md)。例如，您可以使用键 `{aws:username}` 作为资源 ARN 的一部分，以表示应包含当前用户的名称作为资源名称的一部分。下列示例显示如何在 `{aws:username}` 元素中使用 `Resource` 键。该策略允许访问匹配当前用户名称的 Amazon DynamoDB 表。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Effect": "Allow",
        "Action": "dynamodb:*",
        "Resource": "arn:aws:dynamodb:us-east-2:111122223333:table/${aws:username}"
    }
}
```

------

有关 JSON 策略变量的更多信息，请参阅[IAM policy 元素：变量和标签](reference_policies_variables.md)。