

# IAM ID
<a name="reference_identifiers"></a>

IAM は、ユーザー、IAM グループ、ロール、ポリシー、およびサーバー証明書に対していくつかの異なった ID を使います。このセクションでは、ID およびそれぞれの ID の使い方について説明します。

**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、開発者、ManageCredentialsPermissions、ProdServerCert などがあります。

IAM API または AWS Command Line Interface (AWS CLI) を使用して IAM リソースを作成する場合、オプションのパスを追加できます。単一のパスを使用することも、複数のパスをフォルダー構造としてネストすることもできます。たとえば、会社の組織構造に一致するように、入れ子パス `/division_abc/subdivision_xyz/product_1234/engineering/` を使用できます。その後、パスのユーザーすべてが Policy Simulator API にアクセス許可するためのポリシーを作成できます。このポリシーを表示するには、[IAM: ユーザーパスに基づいた Policy Simulator API へのアクセス](reference_policies_examples_iam_policy-sim-path.md) を参照してください。フレンドリ名の指定方法については、[User 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 が Developers ユーザーグループに分類されるわけではありません。IAM は、パスに基づいてユーザーまたは IAM グループ間の境界を強制しません。パスの異なるユーザーでも、それらのリソースにアクセス許可さえ与えられていれば）、同じリソース使うことができます。AWS アカウントの IAM リソースの数とサイズには制限があります。詳細については、「[IAM と AWS STSクォータ](reference_iam-quotas.md)」を参照してください。

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

ほとんどのリソースはフレンドリ名を持っています (`Bob` という名前のユーザー、`Developers` という名前のユーザーグループなど)。ただし、アクセス許可ポリシー言語では、以下の *Amazon リソースネーム (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 または Windows PowerShell 用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
  ```
+ 「Paulo」として IAM で識別された 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
  ```
+ ID プロバイダー (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
  ```
+ Amazon EKS OIDC ID プロバイダー URL を反映するパスを持つ OIDC ID プロバイダー:

  ```
  arn:aws:iam::123456789012:oidc-provider/oidc.eks.us-west-2.amazonaws.com/id/a1b2c3d4567890abcdefEXAMPLE11111
  ```
+ 信頼できるコンテキストアサーションを生成した AWS IAM アイデンティティセンター の信頼できる ID の伝播で使用されるコンテキストプロバイダー ARN。

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

もう 1 つの重要な 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 ポリシー内のリソースを識別する場合、*ポリシー変数*を含めることができます。ポリシー変数には、ARN の一部としてランタイム情報（ユーザー名など）のプレースホルダを含めることができます。詳細については、「[IAM ポリシーの要素: 変数とタグ](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 を指定すると、2番目の例と一致しますが、最初の例には一致しません。

```
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 (標準の 6 フィールド未満の ARN) を指定すると、AWS では、欠落しているすべてのフィールドにワイルドカード文字 (\$1) が追加されて ARN が自動的に完全な形になります。例えば、`arn:aws:sqs` を指定することは `arn:aws:sqs:*:*:*` に相当します。この場合、すべてのリージョンとアカウントですべての Amazon SQS リソースへのアクセスが許可されます。

**Example プロジェクトベースのユーザーグループ用のパスと ARN の使用例**  
パスをAWS マネジメントコンソールで作成、操作することはできません。パスを使用するには、AWS API、AWS CLI、またはTools for WindowsPowerShellを使用してリソースを操作する必要があります。  
この例では、Marketing\$1Admin ユーザーグループの Jules が /marketing/ パス内にプロジェクトベースのユーザーグループを作成します。Jules は、会社のさまざまな部分のユーザーをユーザーグループに割り当てます。この例では、ユーザーのパスが本人の所属するユーザーグループには関連のないことを示しています。  
マーケティング部門には、リリース間近の新製品があり、そのため Jules は /marketing/ パスに Widget\$1Launch という新しいユーザーグループを作成します。次に、Jules はグループに以下のポリシーを割り当てます。これにより、Widget\$1Launch ユーザーグループには、新製品プロジェクト用に確保された `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 は、この新製品プロジェクトに参加しているユーザーを Widget\$1Launch ユーザーグループに割り当てます。具体的には、/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 が役立つこともあります。

1 つの例では、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` に追加されます。ユーザーグループに関連付けられたポリシーで、`John` という名前の IAM ユーザーのフレンドリ名が指定されていた場合、このポリシーにより、新しい John は、以前の John によって残された情報にアクセスできるようになります。

一般に、ポリシーでは、一意の ID ではなく、リソースの ARN を指定することをお勧めします。一方で、新しい IAM ユーザーが以前削除したフレンドリ名を再利用したとしても、すべての ユーザーが一意の ID を持っています。この例では、前の IAM ユーザーである `John` と、新しい IAM ユーザーである `John` は、それぞれ異なる一意の ID を持ちます。ユーザー名だけでなく一意の ID でアクセスを許可するリソースポリシーを作成できます。これにより、従業員が所有してはならない情報へのアクセスを誤って許可する可能性が低くなります。

次の例は、リソースベースのポリシーの [`Principal` 要素](reference_policies_elements_principal.md)に一意の ID を指定する方法を示しています。

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

次の例は、グローバル条件キー [`aws:userid`](reference_policies_condition-keys.md#condition-keys-userid) を使用して、ポリシーの [`Condition` 要素](reference_policies_elements_condition.md)に一意の ID を指定する方法を示しています。

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

また IAM ユーザーまたはロールの情報に関する独自のデータベース (またはその他のデータストア) を維持するときなども、ユーザー ID が役立ちます。一意の 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 リソースに対する一意の ID は、IAM コンソールでは取得できません。一意の 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) 