

# 使用 Amazon 资源名称（ARN）标识 AWS 资源
<a name="reference-arns"></a>

Amazon Resource Name（ARN）唯一标识 AWS 资源。当您需要在 AWS 全局环境中（比如 IAM policy、Amazon Relational Database Service (Amazon RDS) 标签和 API 调用中）明确指定一项资源时，我们要求使用 ARN。虽然应像任何识别信息一样谨慎使用和共享 ARN，但不应将其视为机密、敏感或保密信息。

## ARN 格式
<a name="arns-syntax"></a>

以下是 ARN 的一般格式。特定格式取决于资源。要使用 ARN，请将*斜体* 文本替换为特定于资源的信息。请注意，某些资源的 ARN 忽略了区域、账户 ID 或同时忽略了这两者。

```
arn:partition:service:region:account-id:resource-id
arn:partition:service:region:account-id:resource-type/resource-id
arn:partition:service:region:account-id:resource-type:resource-id
```

*partition*  
资源所在的分区。*分区* 是一组 AWS 区域。每个 AWS 账户的作用域为一个分区。  
以下是支持的分区：  
+ `aws` - AWS 区域
+ `aws-cn` – 中国区域
+ `aws-us-gov` - AWS GovCloud (US) 区域

*service*  
标识 AWS 产品的服务命名空间。

*region*  
区域代码。例如，`us-east-2` 代表美国东部（俄亥俄）。有关区域代码的列表，请参阅《AWS 一般参考》中的 [区域端点](https://docs.aws.amazon.com/general/latest/gr/rande.html#regional-endpoints)**。

*account-id*  
拥有资源的 AWS 账户的 ID（不含连字符）。例如 `123456789012`。

*resource-type*  
资源类型。例如，虚拟私有云（VPC）的 `vpc`。

*resource-id*  
资源标识符。这是资源的名称、资源的 ID 或[资源路径](#arns-paths)。某些资源标识符包括父资源 (sub-resource-type/parent-resource/sub-resource) 或限定符（例如版本）(resource-type:resource-name:qualifier)。示例

IAM 用户  
arn:aws:iam::*123456789012*:user/*john*

SNS 主题  
arn:aws:sns:*us-east-1*:*123456789012*:*example-sns-topic-name*

VPC  
arn:aws:ec2:*us-east-1*:*123456789012*:vpc/*vpc-0e9801d129EXAMPLE*

## 查找资源的 ARN 格式
<a name="supported-arns"></a>

ARN 的具体格式取决于服务和资源类型。某些资源 ARN 可以包含路径、变量或通配符。如需查找特定 AWS 资源的 ARN 格式，请打开[服务授权参考](https://docs.aws.amazon.com/service-authorization/latest/reference/)，然后打开该服务的页面，并导航至资源类型表。

## ARN 中的路径
<a name="arns-paths"></a>

资源 ARN 可以包含路径。例如，在 Amazon S3 中，资源标识符是一个对象名称，它可以包含正斜杠（`/`）来形成路径。同样，IAM 用户名称和组名也可以包含路径。IAM 路径中只允许使用字母数字字符和以下字符：正斜杠（`/`）、加号（`+`）、等号（`=`）、英文逗号（`,`）、英文句号（`.`）、at 符（`@`）、下划线（`_`）和连字符（`-`）。

### 在路径中使用通配符
<a name="arns-paths-wildcards"></a>

路径可以包含一个通配符，即星号 (`*`)。某些策略元素允许使用通配符，而其他元素则不允许。您可以对 [Resource](reference_policies_elements_resource.md) 或 [NotResource](reference_policies_elements_notresource.md) 元素使用通配符，但不能对 [Principal](reference_policies_elements_principal.md) 或 [NotPrincipal](reference_policies_elements_notprincipal.md) 元素使用通配符。有关更多信息，请参阅 [IAM JSON 策略参考](reference_policies.md)。

您可以指定 `role/*` 来表示账户 123456789012 中的所有角色，如下例所示：

```
arn:aws:iam::123456789012:role/*
```

您也可以使用通配符结束资源名称。例如，您可以指定 **service-\$1** 来表示所有以 `service` 开头并以不同字符结尾的角色，如 `service-role1` 或 `service-test`：

```
arn:aws:iam::123456789012:role/service-*
```

以下示例显示了 Amazon S3 存储桶中的对象的 ARN，其中的资源名称包含一个路径。ARN `arn:aws:s3:::amzn-s3-demo-bucket/*` 适用于该存储桶内的所有对象，无论前缀是什么。ARN `arn:aws:s3:::amzn-s3-demo-bucket/Development/*` 适用于在 **/Development/** 前缀内创建的所有对象。

您还可以使用 `?` 通配符来指定 ARN 中的一个字符。例如，您可以将以下 ARN 用于名为 amzn-s3-demo-bucket 的 S3 存储桶中所有以四个字符开头并以 **-test** 结尾的文件夹。与此匹配的一些文件夹包括 `1234-test`、`2024-test` 或 `a100-test`。

```
arn:aws:s3:::amzn-s3-demo-bucket/????-test
```

您还可以在 ARN 的不同部分中使用通配符，以冒号“`:`”分隔。在以下示例中，两个通配符用于匹配账户 123456789012 的所有区域中的所有 Amazon Q 应用程序及应用程序中的资源：

```
arn:aws:qbusiness:*:123456789012:*
```

类似地，以下示例匹配账户 123456789012 的所有区域中的所有 Amazon VPC：

```
arn:aws:ec2:*:123456789012:vpc/*
```

以下示例匹配账户 123456789012 的所有区域中的所有 Amazon EBS 卷：

```
arn:aws:ec2:*:123456789012:volume/*
```

**ARN 中通配符使用的限制**  
您不能在指定资源类型的 ARN 部分中使用通配符。以下资源类型中带有通配符的示例 ARN 无效：

```
arn:aws:lambda:us-east-2:123456789012:functi*:my-function <== not allowed 
```

**注意**  
当您在基于身份的策略中指定不完整的 ARN（少于标准的六个字段）时，AWS 会通过在所有缺失字段中添加通配符 (\$1) 来自动完成 ARN。例如，指定 `arn:aws:sqs` 相当于 `arn:aws:sqs:*:*:*`，它让您有可以访问所有区域和账户中的所有 Amazon SQS 资源。

您也不能在前缀 ARN 中使用通配符，也不能在 ARN 的分区部分中使用通配符。

```
arn:aws:redshift:us-east-1:123456789012:? <== not allowed
```