

# IAM および Amazon EC2 をトラブルシューティングする
<a name="troubleshoot_iam-ec2"></a>

以下の情報は、Amazon EC2 で発生した IAM の問題をトラブルシューティングする際に役立ちます。

**Topics**
+ [インスタンスの起動時に、Amazon EC2 コンソールの **[IAM ロール]** リストにロールが表示されない](#troubleshoot_iam-ec2_missingrole)
+ [インスタンスの認証情報が間違ったロールのものになっている](#troubleshoot_iam-ec2_wrongrole)
+ [`AddRoleToInstanceProfile` を呼び出そうとすると、`AccessDenied` エラーが発生する。](#troubleshoot_iam-ec2_access-denied-adding-role)
+ [Amazon EC2: ロールを使用してインスタンスを起動しようとすると、`AccessDenied` エラーが発生する](#troubleshoot_iam-ec2_access-denied-launch)
+ [EC2 インスタンスにある一時的なセキュリティ認証情報にアクセスできない](#troubleshoot_iam-ec2_no-keys)
+ [IAM サブツリーの `info` ドキュメントのエラーは何を意味しますか?](#troubleshoot_iam-ec2_errors-info-doc)

## インスタンスの起動時に、Amazon EC2 コンソールの **[IAM ロール]** リストにロールが表示されない
<a name="troubleshoot_iam-ec2_missingrole"></a>

以下をチェックしてください:
+ IAM ユーザーとしてサインインしている場合、`ListInstanceProfiles` を呼び出す権限があることを確認します。ロールの操作に必要なアクセス許可については、「[Amazon EC2 でのロールの使用に必要なアクセス許可](id_roles_use_switch-role-ec2.md#roles-usingrole-ec2instance-permissions)」を参照してください。ユーザーに権限を付与する方法の詳細については、「[IAM ポリシーを管理する](access_policies_manage.md)」を参照してください。

  自身のアクセス許可を修正できない場合は、IAM を操作できる管理者へ問い合わせてアクセス許可を更新する必要があります。
+ IAM CLI または API を使用してロールを作成した場合は、以下のことを確認してください。
  + インスタンスプロファイルを作成し、そのインスタンスプロファイルにロールを追加していること。
  + ロールとインスタンスプロファイルに同じ名前を使用していること。ロールとインスタンスプロファイルに異なる名前を付けた場合は、Amazon EC2 コンソールに正しいロール名が表示されません。

  Amazon EC2 コンソールの [**IAMロール**] リストには、ロール名ではなくインスタンスプロファイル名が表示されます。使用するロールが含まれるインスタンスプロファイルの名前を選択する必要があります。インスタンスプロファイルの詳細については、[インスタンスプロファイルを使用する](id_roles_use_switch-role-ec2_instance-profiles.md) を参照してください。
**注記**  
IAM コンソールを使用してロールを作成する場合は、インスタンスプロファイルを使用する必要はありません。IAM コンソールで作成する各ロールでは、ロールと同じ名前のインスタンスプロファイルが作成され、ロールは自動的にそのインスタンスプロファイルに追加されます。インスタンスプロファイルに含めることができる IAM ロールは 1 つのみであり、緩和できません。

## インスタンスの認証情報が間違ったロールのものになっている
<a name="troubleshoot_iam-ec2_wrongrole"></a>

インスタンスプロファイルのロールが最近置き換えられている可能性があります。その場合は、アプリケーションは自動的に予定された次回の認証情報の更新を終えてからでなければ、ロールの認証情報にアクセスすることはできません。

変更を強制的に実行するには、[インスタンスプロファイル](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DisassociateIamInstanceProfile.html)の関連付けを解除してから、[インスタンスプロファイルを関連付ける](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AssociateIamInstanceProfile.html)か、インスタンスを停止してから再起動します。

## `AddRoleToInstanceProfile` を呼び出そうとすると、`AccessDenied` エラーが発生する。
<a name="troubleshoot_iam-ec2_access-denied-adding-role"></a>

IAM ユーザーとしてリクエストを発行する場合は、以下の条件が満たされていることを確認します。
+ `iam:AddRoleToInstanceProfile` でインスタンスプロファイルの ARN (`arn:aws:iam::999999999999:instance-profile/ExampleInstanceProfile` など) に一致するリソースが定義されている。

ロールの操作に必要なアクセス許可の詳細については、「[使用を開始するには](id_roles_use_switch-role-ec2.md#roles-usingrole-ec2instance-get-started)」を参照してください。ユーザーに権限を付与する方法の詳細については、「[IAM ポリシーを管理する](access_policies_manage.md)」を参照してください。

## Amazon EC2: ロールを使用してインスタンスを起動しようとすると、`AccessDenied` エラーが発生する
<a name="troubleshoot_iam-ec2_access-denied-launch"></a>

以下をチェックしてください:
+ インスタンスプロファイルを使用せずにインスタンスを起動します。この作業は、問題が Amazon EC2 インスタンスの IAM ロールに限定していることを確認するものです。
+ IAM ユーザーとしてリクエストを発行する場合は、以下の条件が満たされていることを確認します。
  + `ec2:RunInstances` でリソースがワイルドカード (\*) で定義されている
  + `iam:PassRole` でロールの ARN (`arn:aws:iam::999999999999:role/ExampleRoleName` など) に一致するリソースが定義されている
+ IAM `GetInstanceProfile` アクションを呼び出し、有効なインスタンスプロファイル名またはインスタンスプロファイル ARN を使用していることを確認します。詳細については、「[Amazon EC2 インスタンスで IAM ロールを使用する](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UsingIAM.html#UsingIAMrolesWithAmazonEC2Instances)」を参照してください。
+ IAM `GetInstanceProfile` アクションを呼び出し、インスタンスプロファイルにロールがあることを確認します。空のインスタンスプロファイルは、`AccessDenied` エラーとなります。ロールの作成に関する詳細については、「[IAM ロールの作成](id_roles_create.md)」を参照してください。

ロールの操作に必要なアクセス許可の詳細については、「[使用を開始するには](id_roles_use_switch-role-ec2.md#roles-usingrole-ec2instance-get-started)」を参照してください。ユーザーに権限を付与する方法の詳細については、「[IAM ポリシーを管理する](access_policies_manage.md)」を参照してください。

## EC2 インスタンスにある一時的なセキュリティ認証情報にアクセスできない
<a name="troubleshoot_iam-ec2_no-keys"></a>

EC2 インスタンスの一時的なセキュリティ認証情報にアクセスするには、まず IAM コンソールを使用してロールを作成する必要があります。次に、そのロールを使用する EC2 インスタンスを起動し、実行中のインスタンスを確認します。詳細については、[Amazon EC2 インスタンスで実行されるアプリケーションに IAM ロールを使用してアクセス許可を付与する](id_roles_use_switch-role-ec2.md) の「**開始方法**」を参照してください。

引き続き EC2 インスタンスで一時的なセキュリティ認証情報にアクセスできない場合は、以下を確認してください。
+ インスタンスメタデータサービス (IMDS) の他の部分にアクセスできますか? アクセスできない場合、IMDS への要求アクセスを遮断するファイアウォールのルールがないことを確認します。

  ```
  [ec2-user@domU-12-31-39-0A-8D-DE ~]$ GET http://169.254.169.254/latest/meta-data/hostname; echo
  ```
+ IMDS の `iam` サブツリーは存在していますか? 存在していない場合、EC2 `DescribeInstances` API オペレーションを呼び出すか、`aws ec2 describe-instances` CLI コマンドを使用して、インスタンスに関連する IAM インスタンスプロファイルがあることを確認します。

  ```
  [ec2-user@domU-12-31-39-0A-8D-DE ~]$ GET http://169.254.169.254/latest/meta-data/iam; echo
  ```
+ IAM サブツリーの `info` ドキュメントにエラーがあるか確認します。エラーがある場合は、[IAM サブツリーの `info` ドキュメントのエラーは何を意味しますか?](#troubleshoot_iam-ec2_errors-info-doc) をご覧ください。

  ```
  [ec2-user@domU-12-31-39-0A-8D-DE ~]$ GET http://169.254.169.254/latest/meta-data/iam/info; echo
  ```

## IAM サブツリーの `info` ドキュメントのエラーは何を意味しますか?
<a name="troubleshoot_iam-ec2_errors-info-doc"></a>

### `iam/info` ドキュメントで `"Code":"InstanceProfileNotFound"` が表示される
<a name="troubleshoot_iam-ec2_errors-info-doc-profile-not-found"></a>

IAM インスタンスプロファイルが削除され、Amazon EC2 がインスタンスに認証情報を発行できません。有効なインスタンスプロファイルを Amazon EC2 インスタンスにアタッチする必要があります。

その名前が付いたインスタンスプロファイルが存在する場合、そのインスタンスプロファイルが削除されておらず、他のプロファイルが同じ名前で作成されていることを確認します。

1. IAM の `GetInstanceProfile` オペレーションを呼び出し、`InstanceProfileId` を取得します。

1. `DescribeInstances` の Amazon EC2 オペレーションを呼び出し、インスタンスの `IamInstanceProfileId` を取得します。

1. IAM オペレーションで取得した `InstanceProfileId` が Amazon EC2 オペレーションで取得した `IamInstanceProfileId` と一致することを確認します。

ID が異なる場合、インスタンスに付属したインスタンスプロファイルはすでに無効になっています。有効なインスタンスプロファイルをインスタンスにアタッチする必要があります。

### `iam/info` ドキュメントには完了と表示されるが、`"Message":"Instance Profile does not contain a role..."` が表示される
<a name="troubleshoot_iam-ec2_errors-info-doc-no-role"></a>

IAM の `RemoveRoleFromInstanceProfile` アクションによりロールがインスタンスプロファイルから削除されています。IAM の `AddRoleToInstanceProfile` アクションを使用すると、インスタンスプロファイルにロールをアタッチすることができます。アプリケーションは、次回に予定された更新を終えてからでなければ、ロールの認証情報にアクセスすることはできません。

変更を強制的に実行するには、[インスタンスプロファイル](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DisassociateIamInstanceProfile.html)の関連付けを解除してから、[インスタンスプロファイルを関連付ける](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AssociateIamInstanceProfile.html)か、インスタンスを停止してから再起動します。

### `iam/security-credentials/[role-name]` ドキュメントで `"Code":"AssumeRoleUnauthorizedAccess"` が表示される
<a name="troubleshoot_iam-ec2_errors-info-doc-unauthorized-access"></a>

Amazon EC2 にロールを引き受けるアクセス許可がありません。以下の例のように、ロールを引き受けるアクセス許可は、そのロールにアタッチされた信頼ポリシーで管理されます。IAM `UpdateAssumeRolePolicy` API を使用して、信頼ポリシーを更新します。

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

****  

```
{"Version":"2012-10-17",		 	 	 "Statement": [{"Effect": "Allow","Principal": {"Service": ["ec2.amazonaws.com"]},"Action": ["sts:AssumeRole"]}]}
```

------

アプリケーションは、自動的に予定された次回の更新を終えてからでなければ、ロールの認証情報にアクセスすることはできません。

変更を強制的に実行するには、[インスタンスプロファイル](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DisassociateIamInstanceProfile.html)の関連付けを解除してから、[インスタンスプロファイルを関連付ける](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AssociateIamInstanceProfile.html)か、インスタンスを停止してから再起動します。