IAM および Amazon EC2 をトラブルシューティングする
以下の情報は、Amazon EC2 で発生した IAM の問題をトラブルシューティングする際に役立ちます。
トピック
インスタンスの起動時に、Amazon EC2 コンソールの [IAM ロール] リストにロールが表示されない
以下をチェックしてください:
-
IAM ユーザーとしてサインインしている場合、
ListInstanceProfiles
を呼び出す権限があることを確認します。ロールの操作に必要なアクセス許可については、「Amazon EC2 でのロールの使用に必要なアクセス許可」を参照してください。ユーザーに権限を付与する方法の詳細については、「IAM ポリシーを管理する」を参照してください。自身のアクセス許可を修正できない場合は、IAM を操作できる管理者へ問い合わせてアクセス許可を更新する必要があります。
-
IAM CLI または API を使用してロールを作成した場合は、以下のことを確認してください。
-
インスタンスプロファイルを作成し、そのインスタンスプロファイルにロールを追加していること。
-
ロールとインスタンスプロファイルに同じ名前を使用していること。ロールとインスタンスプロファイルに異なる名前を付けた場合は、Amazon EC2 コンソールに正しいロール名が表示されません。
Amazon EC2 コンソールの [IAMロール] リストには、ロール名ではなくインスタンスプロファイル名が表示されます。使用するロールが含まれるインスタンスプロファイルの名前を選択する必要があります。インスタンスプロファイルの詳細については、インスタンスプロファイルを使用する を参照してください。
注記
IAM コンソールを使用してロールを作成する場合は、インスタンスプロファイルを使用する必要はありません。IAM コンソールで作成する各ロールでは、ロールと同じ名前のインスタンスプロファイルが作成され、ロールは自動的にそのインスタンスプロファイルに追加されます。インスタンスプロファイルに含めることができる IAM ロールは 1 つのみであり、緩和できません。
-
インスタンスの認証情報が間違ったロールのものになっている
インスタンスプロファイルのロールが最近置き換えられている可能性があります。その場合は、アプリケーションは自動的に予定された次回の認証情報の更新を終えてからでなければ、ロールの認証情報にアクセスすることはできません。
変更を強制的に実行するには、インスタンスプロファイルの関連付けを解除してから、インスタンスプロファイルを関連付けるか、インスタンスを停止してから再起動します。
AddRoleToInstanceProfile
を呼び出そうとすると、AccessDenied
エラーが発生する。
IAM ユーザーとしてリクエストを発行する場合は、以下の条件が満たされていることを確認します。
-
iam:AddRoleToInstanceProfile
でインスタンスプロファイルの ARN (arn:aws:iam::999999999999:instance-profile/ExampleInstanceProfile
など) に一致するリソースが定義されている。
ロールの操作に必要なアクセス許可の詳細については、「使用を開始するには」を参照してください。ユーザーに権限を付与する方法の詳細については、「IAM ポリシーを管理する」を参照してください。
Amazon EC2: ロールを使用してインスタンスを起動しようとすると、AccessDenied
エラーが発生する
以下をチェックしてください:
-
インスタンスプロファイルを使用せずにインスタンスを起動します。この作業は、問題が Amazon EC2 インスタンスの IAM ロールに限定していることを確認するものです。
-
IAM ユーザーとしてリクエストを発行する場合は、以下の条件が満たされていることを確認します。
-
ec2:RunInstances
でリソースがワイルドカード (*) で定義されている -
iam:PassRole
でロールの ARN (arn:aws:iam::999999999999:role/ExampleRoleName
など) に一致するリソースが定義されている
-
-
IAM
GetInstanceProfile
アクションを呼び出し、有効なインスタンスプロファイル名またはインスタンスプロファイル ARN を使用していることを確認します。詳細については、「Amazon EC2 インスタンスで IAM ロールを使用する」を参照してください。 -
IAM
GetInstanceProfile
アクションを呼び出し、インスタンスプロファイルにロールがあることを確認します。空のインスタンスプロファイルは、AccessDenied
エラーとなります。ロールの作成に関する詳細については、「IAM ロールの作成」を参照してください。
ロールの操作に必要なアクセス許可の詳細については、「使用を開始するには」を参照してください。ユーザーに権限を付与する方法の詳細については、「IAM ポリシーを管理する」を参照してください。
EC2 インスタンスにある一時的なセキュリティ認証情報にアクセスできない
EC2 インスタンスの一時的なセキュリティ認証情報にアクセスするには、まず IAM コンソールを使用してロールを作成する必要があります。次に、そのロールを使用する EC2 インスタンスを起動し、実行中のインスタンスを確認します。詳細については、Amazon EC2 インスタンスで実行されるアプリケーションに IAM ロールを使用してアクセス許可を付与する の「開始方法」を参照してください。
引き続き 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
サブツリーは存在していますか? 存在していない場合、EC2DescribeInstances
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 ドキュメントのエラーは何を意味しますか? をご覧ください。[ec2-user@domU-12-31-39-0A-8D-DE ~]$
GET http://169.254.169.254/latest/meta-data/iam/info; echo
IAM サブツリーの info
ドキュメントのエラーは何を意味しますか?
iam/info
ドキュメントで "Code":"InstanceProfileNotFound"
が表示される
IAM インスタンスプロファイルが削除され、Amazon EC2 がインスタンスに認証情報を発行できません。有効なインスタンスプロファイルを Amazon EC2 インスタンスにアタッチする必要があります。
その名前が付いたインスタンスプロファイルが存在する場合、そのインスタンスプロファイルが削除されておらず、他のプロファイルが同じ名前で作成されていることを確認します。
-
IAM の
GetInstanceProfile
オペレーションを呼び出し、InstanceProfileId
を取得します。 -
DescribeInstances
の Amazon EC2 オペレーションを呼び出し、インスタンスのIamInstanceProfileId
を取得します。 -
IAM オペレーションで取得した
InstanceProfileId
が Amazon EC2 オペレーションで取得したIamInstanceProfileId
と一致することを確認します。
ID が異なる場合、インスタンスに付属したインスタンスプロファイルはすでに無効になっています。有効なインスタンスプロファイルをインスタンスにアタッチする必要があります。
iam/info
ドキュメントには完了と表示されるが、"Message":"Instance Profile does not
contain a role..."
が表示される
IAM の RemoveRoleFromInstanceProfile
アクションによりロールがインスタンスプロファイルから削除されています。IAM の AddRoleToInstanceProfile
アクションを使用すると、インスタンスプロファイルにロールをアタッチすることができます。アプリケーションは、次回に予定された更新を終えてからでなければ、ロールの認証情報にアクセスすることはできません。
変更を強制的に実行するには、インスタンスプロファイルの関連付けを解除してから、インスタンスプロファイルを関連付けるか、インスタンスを停止してから再起動します。
iam/security-credentials/[role-name]
ドキュメントで "Code":"AssumeRoleUnauthorizedAccess"
が表示される
Amazon EC2 にロールを引き受けるアクセス許可がありません。以下の例のように、ロールを引き受けるアクセス許可は、そのロールにアタッチされた信頼ポリシーで管理されます。IAM UpdateAssumeRolePolicy
API を使用して、信頼ポリシーを更新します。
{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": {"Service": ["ec2.amazonaws.com"]},"Action": ["sts:AssumeRole"]}]}
アプリケーションは、自動的に予定された次回の更新を終えてからでなければ、ロールの認証情報にアクセスすることはできません。
変更を強制的に実行するには、インスタンスプロファイルの関連付けを解除してから、インスタンスプロファイルを関連付けるか、インスタンスを停止してから再起動します。