IAM での OIDC IdP フェデレーションに関連するエラーを解決する方法を教えてください。
AWS Identity and Access Management (IAM) で OpenID Connect (OIDC) ID プロバイダー (IdP) を使用するときに発生するエラーをトラブルシューティングしたいです。
解決策
IAM とのフェデレーションで OIDC IdP を使用する場合、次のエラーが発生することがあります。
重要: OIDC ID プロバイダーの URL の末尾に /.well-known/openid-configuration を追加すると、プロバイダーの設定ドキュメントとメタデータを確認できます。
注: server.example.com は、OIDC ID プロバイダーのサーバー名に置き換えてください。oidc_issuer_url は、OIDC ID プロバイダーの発行元 URL に置き換えてください。
「AssumeRoleWithWebIdentity 操作の呼び出し中にエラー (InvalidIdentityToken) が発生しました。 アカウントに OpenIDConnect プロバイダーが見つかりません。」
このエラーは、AssumeRoleWithWebIdentity API 操作の呼び出しで、OIDC ID プロバイダーが正しく参照されていない場合に発生します。
このエラーを解決するには、次の手順を実行します。
- AssumeRoleWithWebIdentity API 操作を呼び出すときに渡される OIDC ID プロバイダーの ARN を確認します。
注: 設定に AWS コマンドラインインターフェイス (AWS CLI) を使用すると、OIDC ID プロバイダーの ARN の末尾にスラッシュが自動的に追加されます。AWS SDK を使用する場合は、末尾のスラッシュは追加されません。
注: AWS CLI コマンドの実行中にエラーが発生した場合は、最新バージョンの AWS CLI を実行しているか確認してください。 - IAM ロールの信頼ポリシーが、OIDC ID プロバイダー経由でフェデレーションするプリンシパルに信頼を付与していることを確認します。
重要: クロスアカウントロールはサポートされていません。OIDC ID プロバイダーと IAM ロールは同じアカウントにある必要があります。 - AWS Security Token Service (AWS STS) リクエストで渡される OIDC ID プロバイダーの URL が、IAM OIDC ID プロバイダーの URL と一致していることを確認します。エラーメッセージに、AWS STS リクエストの URL が含まれる場合があります。
「リクエストに問題があります。以下の詳細をご覧ください。プロバイダー oidc_issuer_url の .well-known/openid-configuration が有効であることを確認してください。」
このエラーは、OIDC ID プロバイダーの URL が誤っている場合に発生します。
このエラーを解決するには、OIDC ID プロバイダーの URL が次の要件を満たしていることを確認します。
- URL が AWS アカウント内で一意である。
- URL の大文字と小文字が正確である。
- URL が https:// で始まっている。
- URL にはポート番号が含まれていない。
エラーが解決しない場合は、次の手順を実行してください。
- 発行元 URL の末尾にスラッシュ (/) を追加します。
- OIDC ID プロバイダーのサムプリントを手動で取得します。
- AWS CLI で OIDC ID プロバイダーを作成します。
「リクエストに問題があります。以下の詳細をご覧ください。プロバイダー oidc_issuer_url の openid 設定に接続できませんでした。」
このエラーは、OIDC ID プロバイダーの発行元が提示した証明書チェーンの順序が異常であるか、重複した証明書や追加の証明書が含まれている場合に発生します。
このエラーを解決するには、次の手順を実行します。
-
必要に応じて、OpenSSL コマンドラインツールをインストールして設定します。
注: keys.example.com は、OIDC ID プロバイダーのメタデータで jwks_uri にマップされている URL に置き換えてください。 -
OpenSSL コマンドラインツールで openssl-s_client コマンドを実行し、OIDC ID プロバイダーの証明書チェーンをダウンロードします。
openssl s_client -servername keys.example.com -showcerts -connect keys.example.com:443
-
OIDC ID プロバイダーの証明書チェーンを確認します。チェーンはドメインまたは発行元 URL で始まり、次に中間証明書があり、ルート証明書で終わる必要があります。
証明書チェーンの順序が異なる場合、署名の不一致エラーが表示され、STS は JSON ウェブトークン (JWT) の検証に失敗します。証明書チェーン規格の詳細については、RFC シリーズのウェブサイトで RFC 5246 の certificate_list を参照してください。
「AssumeRoleWithWebIdentity 操作の呼び出し中にエラー (InvalidIdentityToken) が発生しました。 指定した ID トークンは有効な JWT ではありません。」
このエラーは、OIDC ID プロバイダーの IAM へのフェデレーションにおいて、JWT が暗号化されているか、サポートされていない文字が使用されている場合に発生します。
このエラーを解決するには、次の手順を実行します。
- JWT ヘッダーに「string」形式のパラメータ値があることを確認します。 JWT ヘッダーに他のデータ型があると、エラーになります。
- オンラインデコーダーツールを実行して、JWT ヘッダーに渡される情報を確認します。
- 不要なヘッダーパラメータ値を削除するか、データ型を文字列に変更します。
注: カスタム OIDC は以下の署名アルゴリズムをサポートします。 RS256、RS384、RS512、HS256、HS384、HS512。IAM への OIDC フェデレーションは、暗号化された JWT をサポートしていません。
「AssumeRoleWithWebIdentity 操作の呼び出し中にエラー (InvalidIdentityToken) が発生しました。 ID プロバイダーから検証キーを取得できませんでした。要件については、AssumeRoleWithWebIdentity のドキュメントを参照してください。」
このエラーは、次の理由で発生する可能性があります。
- OIDC ID プロバイダーの .well-known および jwks_uri エンドポイントに、パブリックインターネットからアクセスできない。
- カスタムファイアウォールが API リクエストをブロックしている。
- OIDC ID プロバイダーから STS エンドポイントへの API リクエストに 5 秒を超える遅延がある。
- JSON Web キーセット (JWKS) に多数のキーがあり、STS が OIDC ID プロバイダーのキーを検証できないため、リクエストにスロットリングが発生している。
このエラーを解決するには、次の手順を実行します。
- OIDC ID プロバイダーの .well-known および jwks_uri エンドポイントが、パブリックにアクセス可能であることを確認します。
- ファイアウォールの設定をチェックして、ドメインが拒否リストに含まれていないことを確認します。
- 操作全体のレイテンシーを確認します。必要に応じて、エクスポネンシャルバックオフを使用します。
- JWKS から不要なキーを削除し、設定をテストします。
このエラーの解決に関する詳細については、「AWS STS AssumeRoleWithWebIdentity API 呼び出しエラー「InvalidIdentityToken」を解決する方法を教えてください」を参照してください。
注: この無効な IdentityToken エラーはクライアント側で発生するため、AWS CloudTrail のログファイルには記録されません。
「AssumeRoleWithWebIdentity で不明なエラーが発生しました。 サポートされていない条件キーが使用されています。」
このエラーは、OIDC ID プロバイダーの IAM ロール信頼ポリシーでサポートされていない条件キーを使用した場合に発生します。
このエラーを解決するには、AWS ウェブ ID フェデレーションで使用可能なキーを使用して信頼ポリシーを作成します。
「AssumeRoleWithWebIdentity 操作の呼び出し中にエラー (InvalidIdentityToken) が発生しました。 トークンのオーディエンスが正しくありません。」
このエラーは、JWT aud (オーディエンス) クレームが OIDC ID プロバイダーを使用するアプリケーションの一意の識別子と一致しない場合に発生します。
IAM OIDC プロバイダーのオーディエンスを確認するには、次のコマンドを実行します。
aws iam get-open-id-connect-provider --open-id-connect-provider-arn OIDC_ARN_Example-provider
注: OIDC_ARN_Example-provider は、OIDC プロバイダーの ARN に置き換えてください。
オーディエンス値はアプリケーションのクライアント ID と一致する必要があります。
「サムプリントが返されました (IAM に対して大きすぎます)。」
このエラーは、IAM の OIDC ID プロバイダーに誤ったサムプリントを手動で追加しようとしたときに発生します。
このエラーを解決するには、OIDC ID プロバイダーのサムプリントを手動で取得します。
「InvalidIdentityToken: トークンのオーディエンスには複数のオーディエンスが含まれていますが、権限のあるパーティがありません。」
このエラーは、JWT トークンに複数のオーディエンスが定義されている場合に発生します。AWS は複数のオーディエンスの JWT トークンをサポートしていません。しかし、複数のクライアント ID をオーディエンスとして設定した OIDC ID プロバイダーを設定することは可能です。
このエラーを解決するには、次の手順を実行します。
- JWT トークンには 1 つのオーディエンスのみが定義されていることを確認してください。
- 各アプリケーションを個別の OIDC ID プロバイダーに登録して、ユーザーが複数の ID プロバイダーからサインインできるようにします。
- OIDC ID プロバイダーを作成して管理し、必要に応じてオーディエンス値ごとに別々の IAM ロールを設定します。
注: OIDC ID プロバイダーの詳細については、「ウェブ ID または OIDC フェデレーション用のロールの作成 (コンソール)」を参照してください。
「OpenID Connect の設定をプライベートアプリケーション ( Gitlab インスタンスなど) で構成することはできません。」
このエラーは、.well-known/openid-configuration および jwks_uri エンドポイントがインターネット経由でパブリックにアクセスできないため、OIDC ID プロバイダーがプライベートとなっている場合に発生します。
このエラーを解決するには、次の手順を実行します。
- .well-known/openid-configuration および jwks_uri エンドポイントをインターネット経由でアクセスできるように設定します。
注: IAM への OIDC フェデレーションでは、プロキシ設定はサポートされていません。サムプリントを手動で追加しても、jwks_uri エンドポイントにはパブリックにアクセスできないため、STS への後続の AssumeRoleWithWebIdentity リクエストは同様に失敗します。STS は JWT の署名を検証して認証情報を発行することはできません。 - 必要な AWS IP アドレスを許可リストに追加します。次に、AssumeRoleWithWebIdentity API 操作を使用して、AWS アカウントの一時的な認証情報を生成します。IAM および STS サービスアドレスには、AWS の IP アドレス範囲を使用します。
- Amazon Cognito を使用して、アプリケーションから Amazon Cognito ユーザープールへのフェデレーションに使用できるクライアント認証情報を生成します。ユーザープールでは、アカウント内の特定の AWS ロールにアクセスできる Amazon Cognito ID プールのロールを引き受けることができます。
クライアント認証情報を使用して Amazon Cognito ID プールへの認証を行うことができます。クライアント認証情報を使用すると、アプリケーションごとに固有のクライアントを使用してアクセスレベルを区別できます。
重要: Amazon Cognito へ認証するには、アプリケーションタスクに Amazon Cognito を含める必要があるため、追加のコーディングが必要になる場合があります。 - プライベート認証機関を使用して IAM Roles Anywhere を実装することができます。
注: プライベート認証機関の詳細については、「AWS プライベート CA について」を参照してください。 - AWS STS のインターフェイス VPC エンドポイントを定義して、VPC 経由の認証トラフィックを制限します。
注: 詳細については、「AWS STS のインターフェイス VPC エンドポイントを使用する」を参照してください。
「IAM OIDC ID プロバイダーのサムプリントを取得中に OpenIdInvalidIDPResponseException エラーが発生しました。」
このエラーは、OIDC ID プロバイダーのメタデータに必要な属性が欠落している場合に発生します。このエラーを解決するには、次の手順を実行します。
- OIDC ID プロバイダーのメタデータと必須属性を確認します。
- 属性が欠落している場合は、OIDC ID プロバイダーに連絡して、不足している情報について検討してください。
注: メタデータのパターンと必須属性の詳細については、OpenID Connect errata のウェブページで「OpenID プロバイダーの設定情報を取得する」を参照してください。
「無効なログイントークンです。OpenIDConnect プロバイダーの HTTPS 証明書が、設定されているサムプリントと一致しません。」
このエラーは、OIDC ID プロバイダーで使用しているサムプリントの有効期限が切れているか、認証機関と一致しない場合に発生します。
このエラーを解決するには、次の手順を実行します。
- サムプリントを手動で取得します。
- UpdateOpenIDConnectProviderThumbprint または AWS マネジメントコンソールを使用して、OIDC ID プロバイダーに対してサムプリントを更新します。
「AssumeRoleWithWebIdentity に対するアクセス拒否エラーがログに記録されました。」
このエラーは、次の理由で発生する可能性があります。
- リクエストパラメータで渡された IAM ロール ARN が誤っている。
- AssumeRoleWithWebIdentity アクションを実行するプリンシパルに設定されているアクセス許可が不十分。
- DurationSeconds パラメータの値が IAM ロールの最大時間設定を超えている。
このエラーを解決するには、次の手順を実行します。
- AssumeRoleWithWebIdentity アクションで正しい IAM ロール ARN が渡されていることを確認します。
**注:**ロールの ARN は大文字と小文字を区別します。 - 必要な IAM アクセス許可が設定されていることを確認します。
- サービスコントロールポリシー (SCP) を確認します。
- リクエストにセッションタグが含まれている場合は、信頼ポリシーで aws: TagSession が許可されていることを確認します。
- IAM ロールの最大セッション時間設定が、常に SessionDuration パラメータ以上であることを確認します。
関連するコンテンツ
- 質問済み 2年前lg...
- 質問済み 2ヶ月前lg...