AWS Security Token Service (AWS STS) の AssumeRoleWithWebIdentity API コールが失敗し、「InvalidIdentityToken」エラーが発生するため、このエラーをトラブルシューティングしたいです。
解決策
AssumeRoleWithWebIdentity API コールが失敗した場合、次のメッセージに類似したエラーが表示されることがあります。
「An error occurred (InvalidIdentityToken) when calling the AssumeRoleWithWebIdentity operation.Couldn't retrieve verification key from your identity provider」 (ID プロバイダーから検証キーを取得できませんでした)
注: この問題はクライアント側のエラーであるため、AWS CloudTrail のイベント履歴にはこのエラーは記録されません。
.well-known と jwks_uri に対するパブリックアクセスを検証する
ID プロバイダー (IdP) の .well-known URL および jwks_uri にアクセスできない場合、エラーが発生することがあります。IdP の .well-known URL および jwks_uri がパブリックアクセス可能であることを確認します。
アクセスを確認するには、ブラウザで次のリンクにアクセス移動します。
- https://BASE_SERVER_URL/.well-known/openid-configuration
- https://BASE_SERVER_URL/.well-known/jwks.json
または、
アクセスを確認するには、次のいずれかのコマンドを実行します。
Windows
wget https://BASE_SERVER_URL/.well-known/openid-configurationwget https://BASE_SERVER_URL/.well-known/jwks.json
Linux
curl https://BASE_SERVER_URL/.well-known/openid-configurationcurl https://BASE_SERVER_URL/.well-known/jwks.json
注: BASE_SERVER_URL は、実際の IdP のベース URL に置き換えます。
リンクにアクセスできるかどうかを確認するには、リクエスト応答に HTTP ステータスコード 200 があるかどうかを確認します。
ファイアウォールの設定を確認する
IdP の .well-known URL および jwks_uri にアクセスできない場合は、ファイアウォールの設定を確認します。ドメインが拒否リストに含まれていないことを確認してください。ファイアウォールの現在の構成によっては、ドメインを許可リストに追加する必要があります。
カスタムファイアウォールがリクエストをブロックしている場合、エラーが発生する可能性があります。
ファイアウォール設定にアクセスできない場合は、携帯電話などの別のネットワークにあるデバイスでブラウザを使用します。
ブラウザで次のリンクに移動します。
- https://BASE_SERVER_URL/.well-known/openid-configuration
- https://BASE_SERVER_URL/.well-known/jwks.json
注: BASE_SERVER_URL は、実際の IdP のベース URL に置き換えます。
AssumeRoleWithWebIdentity API コールを行うサーバーが Amazon Elastic Compute Cloud (Amazon EC2) インスタンスの場合は、構成設定を確認します。詳細については、「EC2 インスタンスでホストされているウェブサイトに接続できない理由を知りたいです」を参照してください。
操作の遅延を確認する
IdP からの API リクエストが AWS STS エンドポイントに到達するまでの遅延が 5 秒を超える場合、エラーが発生する可能性があります。
操作全体の遅延を確認します。これには、STS からのリクエストと応答時間、IdP 属性からのリクエストと応答時間が含まれます。
STS の遅延を最小化する
STS サービスには、グローバルエンドポイントの代わりに AWS リージョナルエンドポイントを使用してください。これにより、リクエストが地理的に最も近いサーバーにルーティングされ、レイテンシーが最小限に抑えられることが確認されます。詳細については、「AWS STS リージョンを使用するコードの記述」を参照してください。
**注記:**AWS SDK の場合、Region パラメータはリクエストの宛先エンドポイントを sts\ _region\ _endpoint 設定内で呼び出しが行われた場所にルーティングします。
IdP レイテンシーの評価
IdP は STS エンドポイントにリクエストを行います。STS エンドポイントへのリクエストに時間がかかりすぎているかどうかを確認するには、IdP ログに含まれる IdP の送信パケットを分析します。
注: IdP から STS エンドポイントへのリクエストの所要時間が 5 秒を超えている場合、リクエストはタイムアウトして失敗する可能性があります。この API コールの遅延を軽減するには、お使いの ID プロバイダーにお問い合わせの上、地理的な可用性を向上させてください。
(オプション) エクスポネンシャルバックオフを使用して再試行回数を増やす
IdP が状況を提供し、AssumeRoleWithWebIdentity をサポートします。ほとんどの IdP には、スロットリングエラーを回避するための API 制限があるため、IdP は API コールが必要とするキーを返さない場合があります。API で IdP にアクセスできない問題が断続的に発生する場合は、次のトラブルシューティングオプションを実施します。
.well-known と jwks_uri への STS リクエストを削減する
JSON Web キーセット (JWKS) が Pragma: no-cache または Cache-Control: no-cache 応答ヘッダーを設定している場合、STS は JWKS をキャッシュしません。STS は、ID_TOKEN で参照されているものの、キャッシュでは参照されていないキーに対してコールバックを実行します。この場合、STS が行う .well-known URL および jwks_uri へのリクエストが過多になる可能性があります。
STS からのコールバックを減らすには、JWKS にこれらの応答ヘッダーのどちらも設定していないことを確認してください。その後、STS は JWKS をキャッシュできるようになります。
JWKS のキー数を減らす
STS は JWKS 内の最大 100 個のキーのみをサポートします。JWKS に 100 個を超えるキーがある場合、STS はお使いのキーで署名されたトークンを検証できません。AssumeRoleWithWebIdentity を呼び出した際、JWKS に 100 個を超えるキーがある場合に「InvalidIdentityToken」エラーが発生することがあります。
このエラーを解決するには、不要になったキーを JWKS から削除します。または、JWKS にあるキーの数を減らします。
関連情報
AWS Security Token Service API リファレンス - はじめに
IAM と AWS STS で発生する、API のスロットリングまたは「Rate exceeded」エラーを解決する方法を教えてください