認可 ID を伴うアクセス拒否エラーメッセージのトラブルシューティング (プレビュー)
重要
Access Troubleshooter はパブリックプレビュー中です。
概要
AWS がサポート対象の API へのリクエストを拒否した場合、通常、アクセス拒否エラーレスポンスには認可 ID が含まれます。この ID は、拒否されたリクエストの認可評価を示します。評価の詳細を取得して拒否の原因を特定するには、GetRequestAuthorizationDetails API にリクエストして認可 ID を指定するか、エラーメッセージ内のリンクを開きます。これにより、アクセス拒否に 1 件ずつ対処することなく、1 回の呼び出しで拒否されたリクエストの原因を特定できます。
注記
AWS は、拒否されたリクエストごとに必ず認可 ID を提供するわけではありません。このドキュメント内の 認可 ID が提供されない場合 を参照してください。
以下は、ポリシー ARN、 AWS マネジメントコンソール
User: arn:aws:iam::123456789012:user/janedoe is not authorized to perform: iam:CreateInstanceProfile on resource: arn:aws:iam::123456789012:instance-profile/my-instance-profile with an explicit deny in an identity-based policy: arn:aws:iam::123456789012:policy/ExampleDenyPolicy. Go to https://us-east-1.console.aws.amazon.com/iam/home?region=us-east-1#/authorization-details/EXAMPLE1a2b3c4d5e6f7g8h9i0j for complete details, or call the GetRequestAuthorizationDetails API with the following authorization id: EXAMPLE1a2b3c4d5e6f7g8h9i0j
概念と定義
-
認可の詳細。認可の詳細には、リクエストコンテキスト、実行された評価、評価されたポリシーが記載されます。
-
認可 ID。サポート対象のアクセス拒否エラーレスポンスに含まれる一意の識別子。これは、拒否されたリクエストの認可評価を示すものであり、AWS マネジメントコンソール
のリンクまたは GetRequestAuthorizationDetailsAPI に渡す値です。 -
リクエストコンテキスト。リクエストに対して評価された条件コンテキストキーの値。グローバル条件コンテキストキーとサービス固有の条件コンテキストキーが含まれます。
-
評価。リクエスト内のアクションとリソースの各ペアについて、適用された条件コンテキストキーと評価結果 (
ALLOW、EXPLICIT_DENY(ポリシーによりアクションが明示的に拒否された場合)、またはIMPLICIT_DENY(アクションを許可するポリシーがない場合))、およびそのアクションとリソースのペアに一致した各ポリシーとステートメントへの参照。各参照は、レスポンス全体で再利用されるポリシー ARN (マネージドポリシーの場合) または URI (インラインポリシーおよびその他の非マネージドポリシーの場合) です。 -
認可中に評価されたポリシー。アクションとリソースのペアに一致しなかったポリシーなど、リクエストに対して AWS が考慮したポリシー。各エントリには、ポリシータイプ (アイデンティティベース、リソースベース、SCP、RCP、アクセス許可の境界、セッションポリシーなど) と、評価で使用されたものと同じ ARN (マネージドポリシーの場合) または URI (インラインポリシーおよびその他の非マネージドポリシーの場合) が含まれます。ARN または URI を使用して、ポリシーと、そのポリシーを参照した評価を対応付けます。「Attached to」フィールドには、評価されたポリシーがアタッチされているプリンシパルの ARN が表示されます。
これらの結果を組み合わせることで、アクセスを拒否したポリシーとその理由を特定できます。評価には、拒否時点でのポリシーが反映されます。その後にポリシーが変更されている可能性があります。
AWS は、サポート対象の API のアクセス拒否エラーレスポンスに認可 ID を自動的に追加しますが、認可 ID が必ず追加されるとは限りません。場合によっては、AWS は拒否に対する認可の詳細を記録せず、エラーレスポンスに認可 ID が含まれないこともあります。詳細が記録される場合でも、AWS による記録は非同期的に行われるため、すぐには取得できない場合があります。GetRequestAuthorizationDetails への呼び出しで、見つからない旨のレスポンスが返された場合は、しばらく待ってからもう一度試してください。AWS には、拒否後 24 時間、認可の詳細が保持されます。
AWS マネジメントコンソール を使用したトラブルシューティング
アクセス拒否エラーメッセージ内のリンクを選択して、Access Troubleshooter コンソールで認可の詳細を開きます。
-
確認すべき点。Access Troubleshooter コンソールには、リクエスト内のアクションとリソースの各ペアに対する評価、各ペアの評価結果 (
Allow、Explicit deny、またはImplicit deny)、および評価で考慮されたポリシーが表示されます。拒否されたペアと拒否の原因となったポリシーを確認します。以下は、その例を示すスクリーンショットです。
-
拒否が意図したとおりに起こったものかどうかを確認します。ポリシーを変更する前に、評価を確認します。拒否自体は適切で、その原因がポリシーではなくリクエストコンテキストにある場合もあります。例えば、リクエストに想定されているセッションタグがない場合や、想定外のネットワークパスを経由している場合などが挙げられます。
-
拒否の解決方法。アクセスに関する問題を解決するには、対応するポリシーを見つけて更新します。明示的な拒否の場合は、そのアクションに対する
Denyステートメントを削除するか、適用範囲を絞り込みます。暗黙的な拒否の場合は、アクションに対するAllowステートメントを追加します。詳細については、「IAM ポリシーを編集する」を参照してください。
認可の詳細にアクセスできるユーザー。1 つのアカウントまたは 1 つの組織内のリクエストの場合、iam:GetRequestAuthorizationDetails へのアクセス許可が付与されているユーザーであれば誰でもリクエストの詳細にアクセスできます。複数の組織にまたがるリクエストの場合、各ユーザーは自分の組織に関連する詳細のみを確認できます。
AWS API または AWS CLI を使用したトラブルシューティング
AWS API または AWS CLI を使用して拒否のトラブルシューティングを行う方法:
-
アクセス拒否エラーレスポンスで認可 ID を確認します。
-
拒否が発生したのと同じ AWS リージョン で、認可 ID を使用して
GetRequestAuthorizationDetailsを呼び出します。以下は、AWS CLI コマンドの例です。aws iam-toolbox get-request-authorization-details \ --region us-east-1 \ --authorization-id EXAMPLE1a2b3c4d5e6f7g8h9i0j -
評価結果を確認して、アクセスを拒否したポリシーと拒否の理由を特定します。
-
特定したポリシーを更新して、アクセスの問題を解決します。詳細については、「IAM ポリシーを編集する」を参照してください。
認可 ID が提供されない場合
次の場合、AWS は認可 ID を返しません。
-
認可情報のサイズが大きすぎて記録できない場合。リクエストに多数のポリシーが関係する場合、AWS はリクエストを記録しない場合があります。
-
サービスがまだサポートされていない場合。「サポートされるサービス」を参照してください。
-
API がサポートされていない場合。サポート対象のサービスでも、一部の API は認可 ID を返しません。
-
リクエストタイプがサポートされていない場合。これには、ユーザーに代わってサービスが実行したリクエストと匿名リクエストが該当します。
認可 ID が提供されない場合に拒否を診断するその他の方法については、アクセス拒否エラーメッセージをトラブルシューティングする を参照してください。
その他の考慮事項
必要なアクセス許可: GetRequestAuthorizationDetails を呼び出すには、iam:GetRequestAuthorizationDetails アクションのアクセス許可が必要です。
リージョン API。 GetRequestAuthorizationDetails はリージョン API です。アクセス拒否エラーと認可 ID が生成されたのと同じ AWS リージョン で呼び出します。
組織間のリクエスト。拒否されたリクエストが複数の組織にまたがる場合、GetRequestAuthorizationDetails は呼び出し元が属する組織に関する詳細のみを返します。これはどちらの方向にも適用されます。拒否された呼び出し元の組織に属している場合は、その組織に関連する詳細のみが表示されます。拒否されたリソースの組織に属している場合は、その組織に関連する詳細のみが表示されます。別の組織が所有する詳細 (別の組織のポリシーやコンテキストキー値など) は返されません。
認可 ID の返却にまだ対応していない API、サービス、またはリージョンからアクセス拒否エラーが返された場合は、アクセス拒否エラーメッセージをトラブルシューティングする を参照してください。
サポートされるサービス
GetRequestAuthorizationDetails のサポートは、AWS API と AWS リージョン で順次提供されています。GetRequestAuthorizationDetails をサポートしているサービスは次のとおりです。
-
IAM のほとんどの API