

# IAM 标识符
<a name="reference_identifiers"></a>

IAM 针对用户、IAM 组、角色、策略及服务器证书使用多个不同的标识符。本部分主要介绍标识符及您何时使用每个标识符。

**Topics**
+ [

## 易记名称和路径
](#identifiers-friendly-names)
+ [

## IAM ARN
](#identifiers-arns)
+ [

## 唯一标识符
](#identifiers-unique-ids)
+ [

## 了解唯一 ID 前缀
](#identifiers-prefixes)
+ [

## 获取唯一标识符
](#identifiers-get-unique-id)

## 易记名称和路径
<a name="identifiers-friendly-names"></a>

在您创建用户、角色、用户组或策略时，或在您上传服务器证书时，您可为其取一个易于识别的名称。例如 Bob、TestApp1、Developers、ManageCredentialsPermissions 或 ProdServerCert。

如果您使用 IAM API 或 AWS Command Line Interface（AWS CLI）创建 IAM 资源，则可以添加可选路径。您可以使用单个路径，或嵌套多个路径，就像它们是文件夹结构一样。例如，可使用嵌套路径 `/division_abc/subdivision_xyz/product_1234/engineering/` 以匹配贵公司的企业结构。您可以随后创建策略以允许该路径的所有用户访问策略模拟器 API。要查看该策略，请参阅 [IAM：基于用户路径访问策略模拟器 API](reference_policies_examples_iam_policy-sim-path.md)。有关如何指定友好名称的信息，请参阅[用户 API 文档](https://docs.aws.amazon.com/IAM/latest/APIReference/API_User.html)。有关如何使用路径的其他示例，请参阅 [IAM ARN](#identifiers-arns)。

使用 CloudFormation 创建资源时，您可以为用户、IAM 组和角色以及客户管理型策略指定路径。

如果您的用户和用户组位于同一路径中，IAM 不会自动将该用户置于该用户组中。例如，您可创建一个 Developers 组，并指定其路径为 `/division_abc/subdivision_xyz/product_1234/engineering/`。如果您创建了一个名为 Bob 的用户并向其添加了相同的路径，则这不会自动将 Bob 归入开发人员用户组。IAM 不会基于路径而强行在用户或 IAM 组之间划分边界。具有不同路径的用户可以使用相同的资源（假设他们已获权使用这些资源）。AWS 账户中 IAM 资源的数量和大小是有限的。有关更多信息，请参阅 [IAM 和 AWS STS 配额](reference_iam-quotas.md)。

## IAM ARN
<a name="identifiers-arns"></a>

大多数资源都有易记名称（例如，名为 `Bob` 的用户或名为 `Developers` 的用户组）。不过，权限策略语言要求您使用以下 *Amazon Resource Name (ARN)* 格式指定资源。

```
arn:partition:service:region:account:resource
```

其中：
+ `partition` 用于标识资源所在的分区。对于标准 AWS 区域，分区是 `aws`。如果资源位于其他分区，则分区是 `aws-partitionname`。例如，中国（北京）区域中的资源的分区为 `aws-cn`。您不能在不同分区的账户之间[委派访问权限](access_policies-cross-account-resource-access.md#access_policies-cross-account-delegating-resource-based-policies)。
+ `service` 标识 AWS 产品。IAM 资源始终使用 `iam`。
+ `region` 标识资源的区域。对于 IAM 资源，它始终保持空白。
+ `account` 指定没有连字符的 AWS 账户 ID。
+ `resource` 按名称标识特定资源。

您可以使用以下语法指定 IAM 和 AWS STS ARN。由于 IAM 资源是全球资源，因此，ARN 的区域部分是空的。

语法：

```
arn:aws:iam::account:root  
arn:aws:iam::account:user/user-name-with-path
arn:aws:iam::account:group/group-name-with-path
arn:aws:iam::account:role/role-name-with-path
arn:aws:iam::account:policy/policy-name-with-path
arn:aws:iam::account:instance-profile/instance-profile-name-with-path
arn:aws:sts::account:federated-user/user-name
arn:aws:sts::account:assumed-role/role-name/role-session-name
arn:aws:sts::account:self
arn:aws:iam::account:mfa/virtual-device-name-with-path
arn:aws:iam::account:u2f/u2f-token-id
arn:aws:iam::account:server-certificate/certificate-name-with-path
arn:aws:iam::account:saml-provider/provider-name
arn:aws:iam::account:oidc-provider/provider-name
arn:aws:iam::aws:contextProvider/context-provider-name
```

以下示例中有很多在 ARN 的资源部分中包含路径。不能在 AWS 管理控制台中创建或操作路径。要使用路径，必须通过使用 AWS API、AWS CLI 或 Tools for Windows PowerShell 与资源相结合。

示例：

```
arn:aws:iam::123456789012:root
arn:aws:iam::123456789012:user/John
arn:aws:iam::123456789012:user/division_abc/subdivision_xyz/Jane
arn:aws:iam::123456789012:group/Developers
arn:aws:iam::123456789012:group/division_abc/subdivision_xyz/product_A/Developers
arn:aws:iam::123456789012:role/S3Access
arn:aws:iam::123456789012:role/application_abc/component_xyz/RDSAccess
arn:aws:iam::123456789012:role/aws-service-role/access-analyzer.amazonaws.com/AWSServiceRoleForAccessAnalyzer
arn:aws:iam::123456789012:role/service-role/QuickSightAction
arn:aws:iam::123456789012:policy/UsersManageOwnCredentials
arn:aws:iam::123456789012:policy/division_abc/subdivision_xyz/UsersManageOwnCredentials
arn:aws:iam::123456789012:instance-profile/Webserver
arn:aws:sts::123456789012:federated-user/John
arn:aws:sts::123456789012:assumed-role/Accounting-Role/Jane
arn:aws:sts::123456789012:self
arn:aws:iam::123456789012:mfa/JaneMFA
arn:aws:iam::123456789012:u2f/user/John/default (U2F security key)
arn:aws:iam::123456789012:server-certificate/ProdServerCert
arn:aws:iam::123456789012:server-certificate/division_abc/subdivision_xyz/ProdServerCert
arn:aws:iam::123456789012:saml-provider/ADFSProvider
arn:aws:iam::123456789012:oidc-provider/GoogleProvider
arn:aws:iam::123456789012:oidc-provider/oidc.eks.us-west-2.amazonaws.com/id/a1b2c3d4567890abcdefEXAMPLE11111
arn:aws:iam::123456789012:oidc-provider/server.example.org
arn:aws:iam::aws:contextProvider/IdentityCenter
```

以下示例提供了更详细的信息，帮助您了解不同类型 IAM 和 AWS STS 资源的 ARN 格式。
+ 账户中的 IAM 用户：
**注意**  
每个 IAM 用户名都是唯一的。用户的用户名不区分大小写，例如在登录过程中，但在策略或 ARN 中使用时区分大小写。

  ```
  arn:aws:iam::123456789012:user/John
  ```
+ 具有反映组织结构图的路径的其他用户：

  ```
  arn:aws:iam::123456789012:user/division_abc/subdivision_xyz/Jane
  ```
+ 对于 IAM 用户组：

  ```
  arn:aws:iam::123456789012:group/Developers
  ```
+ 具有路径的 IAM 用户组：

  ```
  arn:aws:iam::123456789012:group/division_abc/subdivision_xyz/product_A/Developers
  ```
+ IAM 角色：

  ```
  arn:aws:iam::123456789012:role/S3Access
  ```
+ [服务相关角色](id_roles.md#iam-term-service-linked-role)：

  ```
  arn:aws:iam::123456789012:role/aws-service-role/access-analyzer.amazonaws.com/AWSServiceRoleForAccessAnalyzer
  ```
+ [服务角色](id_roles.md#iam-term-service-role)：

  ```
  arn:aws:iam::123456789012:role/service-role/QuickSightAction
  ```
+ 托管策略：

  ```
  arn:aws:iam::123456789012:policy/ManageCredentialsPermissions
  ```
+ 可与 Amazon EC2 实例关联的实例配置文件：

  ```
  arn:aws:iam::123456789012:instance-profile/Webserver
  ```
+ 在 IAM 中识别为“Paulo”的 AWS STS 联合用户主体：

  ```
  arn:aws:sts::123456789012:federated-user/Paulo
  ```
+ 担任“Accounting-Role”且角色会话名称为“Mary”的人的活动会话：

  ```
  arn:aws:sts::123456789012:assumed-role/Accounting-Role/Mary
  ```
+ 表示在调用会话上运行的 API 调用（例如 AWS STS [SetContext](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssecuritytokenservice.html) API）中用作资源时调用方自己的会话：

  ```
  arn:aws:sts::123456789012:self
  ```
+ 分配给名为 Jorge 的用户的多重身份验证设备：

  ```
  arn:aws:iam::123456789012:mfa/Jorge
  ```
+ 服务器证书：

  ```
  arn:aws:iam::123456789012:server-certificate/ProdServerCert
  ```
+ 具有反映组织结构图的路径的服务器证书：

  ```
  arn:aws:iam::123456789012:server-certificate/division_abc/subdivision_xyz/ProdServerCert
  ```
+ 身份提供程序 (SAML 和 OIDC)：

  ```
  arn:aws:iam::123456789012:saml-provider/ADFSProvider
  arn:aws:iam::123456789012:oidc-provider/GoogleProvider
  arn:aws:iam::123456789012:oidc-provider/server.example.org
  ```
+ OIDC 身份提供者，其路径反映了某个 Amazon EKS OIDC 身份提供者的 URL：

  ```
  arn:aws:iam::123456789012:oidc-provider/oidc.eks.us-west-2.amazonaws.com/id/a1b2c3d4567890abcdefEXAMPLE11111
  ```
+ 用于 AWS IAM Identity Center 可信身份传播的上下文提供程序 ARN，可信上下文断言就是从该 ARN 生成的：

  ```
  arn:aws:iam::aws:contextProvider/IdentityCenter
  ```

另一个重要的 ARN 是根用户 ARN。虽然这不是一个 IAM 资源，但您应熟悉此 ARN 的格式。它通常用于基于资源的策略的 [`Principal` 元素](reference_policies_elements_principal.md)。
+ AWS 账户 显示以下内容：

  ```
  arn:aws:iam::123456789012:root
  ```

以下示例说明了您可向 Richard 分配的策略，该策略允许其管理访问密钥。请注意，这里的资源即是 IAM 用户 Richard。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ManageRichardAccessKeys",
            "Effect": "Allow",
            "Action": [
                "iam:*AccessKey*",
                "iam:GetUser"
            ],
            "Resource": "arn:aws:iam::*:user/division_abc/subdivision_xyz/Richard"
        },
        {
            "Sid": "ListForConsole",
            "Effect": "Allow",
            "Action": "iam:ListUsers",
            "Resource": "*"
        }
    ]
}
```

------

**注意**  
使用 ARN 在 IAM policy 中标识资源时，您可以包含*策略变量*。策略变量可以包含表示运行时信息（如用户名称）的占位符，作为 ARN 的一部分。有关更多信息，请参阅 [IAM policy 元素：变量和标签](reference_policies_variables.md) 

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

您可以在 ARN 的 *resource* 部分中使用通配符来指定多个用户、IAM 组或策略。例如，如要指定使用 product\$11234 的所有用户，您应使用：

```
arn:aws:iam::123456789012:user/division_abc/subdivision_xyz/product_1234/*
```

如果您的用户名称以字符串 `app_` 开头，可以通过以下 ARN 引用所有这些用户。

```
arn:aws:iam::123456789012:user/division_abc/subdivision_xyz/product_1234/app_*
```

要指定您 AWS 账户 中的所有用户、IAM 组或策略，请分别在 ARN 的 `user/`、`group/` 或 `policy/` 部分之后使用通配符。

```
arn:aws:iam::123456789012:user/*
arn:aws:iam::123456789012:group/*
arn:aws:iam::123456789012:policy/*
```

如果为用户 `arn:aws:iam::111122223333:user/*` 指定以下 ARN，则它与以下两个示例相匹配。

```
arn:aws:iam::111122223333:user/John
arn:aws:iam::111122223333:user/division_abc/subdivision_xyz/JaneDoe
```

但是，如果您为用户 `arn:aws:iam::111122223333:user/division_abc*` 指定以下 ARN，则它匹配第二个示例，但不匹配第一个示例。

```
arn:aws:iam::111122223333:user/John
arn:aws:iam::111122223333:user/division_abc/subdivision_xyz/Jane
```

请勿在 ARN 的 `user/`、`group/` 或 `policy/` 部分中使用通配符。例如，IAM 不允许执行以下操作：

```
arn:aws:iam::123456789012:u*
```

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

**Example 针对基于项目的用户组使用路径和 ARN 的示例**  
不能在 AWS 管理控制台中创建或操作路径。要使用路径，必须通过使用 AWS API、AWS CLI 或 Tools for Windows PowerShell 与资源相结合。  
在此示例中，Marketing\$1Admin 用户组中的 Jules 在 /marketing/ 路径内创建一个基于项目的用户组。Jules 并将公司内不同部门的用户分配至该用户组。此示例说明，用户的路径与用户所在的用户组并无关系。  
市场部组负责一款即将上市的新产品，因此 Jules 在 /marketing/ 路径内创建了一个新的用户组，并命名为 Widget\$1Launch。随后，Jules 将下列策略分配至此用户组，而该策略将允许此用户组访问 `example_bucket`（专用于此款新产品）部分中的对象。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::example_bucket/marketing/newproductlaunch/widget/*"
    },
    {
      "Effect": "Allow",
      "Action": "s3:ListBucket*",
      "Resource": "arn:aws:s3:::example_bucket",
      "Condition": {"StringLike": {"s3:prefix": "marketing/newproductlaunch/widget/*"}}
    }
  ]
}
```
最后，Jules 将负责此款新产品的用户分配至该用户组。其中包括 /marketing/ 路径中的 Patricia 和 Eli。另外，还包括 /sales/ 路径中的 Chris 和 Chloe，及 /legal/ 路径中的 Alice 和 Jim。

## 唯一标识符
<a name="identifiers-unique-ids"></a>

当 IAM 创建用户、用户组、角色、策略、实例配置文件或服务器证书时，它会为每个资源分配一个唯一 ID。该唯一 ID 如下所示：

`AIDAJQABLZS4A3QDU576Q`

大多数情况下，在使用 IAM 资源时，您使用易于识别的名称和 [ARN](#identifiers-arns)。这样，您就不需要知道特定资源的唯一 ID。不过有时，当实际情况不允许使用好友名称时，唯一 ID 可能非常有用。

有一个示例涉及到对您的 AWS 账户 中的易记名称的重复使用。在您的账户中，用户、用户组、角色或策略的易记名称必须是唯一的。例如，您可以创建一个名为 `John` 的 IAM 用户。公司使用 Amazon S3 并有一个存储桶，其中包含每位员工的文件夹。IAM 用户 `John` 是名为 `User-S3-Access` 的 IAM 用户组的成员，该用户组的权限仅允许用户访问存储桶中其自己的文件夹。有关可以通过何种方式创建基于身份的策略以允许 IAM 用户使用其易记名称访问 S3 中其自己的存储桶对象的示例，请参阅 [Amazon S3：允许 IAM 用户以编程方式和在控制台中访问其 S3 主目录](reference_policies_examples_s3_home-directory-console.md)。

假设名为 John 的员工从贵公司离职，并且您删除了名为 `John` 的相应 IAM 用户。但后来另一位名为 John 的员工入职贵公司，并且您创建了一个名为 `John` 的新 IAM 用户。您将这位名为 `John` 的新 IAM 用户添加到了现有 IAM 用户组 `User-S3-Access` 中。如果与该用户组关联的策略指定易记的 IAM 用户名 `John`，则该策略将允许新 John 访问前一个 John 留下的信息。

一般情况下，建议您为策略中的资源指定 ARN，而不是其唯一 ID。但是，每位 IAM 用户都具有一个唯一 ID，即使您创建的新 IAM 用户重复使用之前已删除的易记名称，也是如此。在该示例中，旧 IAM 用户 `John` 和新 IAM 用户 `John` 具有不同的唯一 ID。您可以创建基于资源的策略，这些策略按唯一 ID 而不仅仅是用户名授予访问权限。这样做可以减少您无意中向员工授予了不应具备的信息访问权限的机会。

以下示例说明了如何在基于资源策略的 [`Principal` 元素](reference_policies_elements_principal.md)中指定唯一 ID。

```
"Principal": {
  "AWS": [
    "arn:aws:iam::111122223333:role/role-name",
    "AIDACKCEVSQ6C2EXAMPLE",
    "AROADBQP57FF2AEXAMPLE"
  }
```

以下示例说明了如何在策略的 [`Condition` 元素](reference_policies_elements_condition.md)中使用全局条件键 [`aws:userid`](reference_policies_condition-keys.md#condition-keys-userid) 指定唯一 ID。

```
"Condition": {
    "StringLike": {
      "aws:userId": [
        "AIDACKCEVSQ6C2EXAMPLE",
        "AROADBQP57FF2AEXAMPLE:role-session-name",
        "AROA1234567890EXAMPLE:*",
        "111122223333"
      ]
    }
  }
```

用户 ID 发挥作用的另一个示例是您维护自己的 IAM 用户或角色信息数据库（或其他存储）。唯一 ID 可为您创建的每个 IAM 用户或角色提供唯一标识符。当您有 IAM 用户或角色重复使用某个名称时也是如此，如前面的示例所示。

## 了解唯一 ID 前缀
<a name="identifiers-prefixes"></a>

IAM 使用以下前缀来指示每个唯一 ID 适用于的资源的类型。前缀可能会根据创建时间的不同而有所不同。


| Prefix | 资源类型 | 
| --- | --- | 
| ABIA | [AWS STS 服务持有者令牌](id_credentials_bearer.md) | 
| ACCA | 上下文特定凭证 | 
|  AGPA  | 用户组 | 
|  AIDA  |  IAM 用户   | 
| AIPA | Amazon EC2 实例配置文件 | 
| AKIA | 访问密钥 | 
| ANPA |  托管式策略  | 
|  ANVA  |  托管策略中的版本  | 
| APKA | 公有密钥 | 
| AROA | 角色 | 
| ASCA | 证书 | 
|  ASIA  |  [临时 (AWS STS) 访问密钥 ID](https://docs.aws.amazon.com/STS/latest/APIReference/API_Credentials.html) 使用此前缀，但仅在与秘密访问密钥和会话令牌结合使用时才具有唯一性。  | 

## 获取唯一标识符
<a name="identifiers-get-unique-id"></a>

无法通过 IAM 控制台获得 IAM 资源的唯一 ID。要获得唯一 ID，您可以使用下面的 AWS CLI 命令或 IAM API 调用。

AWS CLI:
+  [get-caller-identity](https://docs.aws.amazon.com/cli/latest/reference/sts/get-caller-identity.html) 
+  [get-group](https://docs.aws.amazon.com/cli/latest/reference/iam/get-group.html) 
+  [get-role](https://docs.aws.amazon.com/cli/latest/reference/iam/get-role.html) 
+  [get-user](https://docs.aws.amazon.com/cli/latest/reference/iam/get-user.html) 
+  [get-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/get-policy.html) 
+  [get-instance-profile](https://docs.aws.amazon.com/cli/latest/reference/iam/get-instance-profile.html) 
+  [get-server-certificate](https://docs.aws.amazon.com/cli/latest/reference/iam/get-server-certificate.html) 

IAM API：
+  [GetCallerIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetCallerIdentity.html) 
+  [GetGroup](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetGroup.html) 
+  [GetRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetRole.html) 
+  [GetUser](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetUser.html) 
+  [GetPolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetPolicy.html) 
+  [GetInstanceProfile](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetInstanceProfile.html) 
+  [GetServerCertificate](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServerCertificate.html) 