トラブルシューティングとよくある質問

このドキュメントでは、Identity-Aware Proxy(IAP)に関するトラブルシューティングのガイダンスと、よくある質問への回答を紹介します。

ウェブログインのトラブルシューティング

ログイン中またはアプリケーションへのアクセス中にエラーが発生した場合は、ブラウザのネットワーク トラフィックを検査すると、問題の診断に役立ちます。

ネットワーク トラフィックの検査

  1. ブラウザで新しいシークレット モード(Chrome)ウィンドウまたはプライベート ウィンドウを開きます。
  2. ブラウザのデベロッパー ツールを開き、[Network] タブに移動します。
  3. [Preserve log] オプションを選択して、リダイレクト中のすべてのリクエストをキャプチャします。
  4. 問題が発生している URL に移動して、問題を再現します。
  5. ログ内のネットワーク リクエストを調べて、エラーが発生した場所を特定します。

ネットワーク トラフィックを分析している

IAP で保護されたアプリケーションにアクセスすると、ログインページにリダイレクトされます。ID プロバイダでの認証に成功すると、https://iap.googleapis.com ドメインにリクエストが送信され、認証が完了してから IAP Cookie が発行され、アプリケーションにリダイレクトされます。

エラーが発生したドメインに基づいてエラーのトラブルシューティングを行うことができます。

  • iap.googleapis.com のエラー: iap.googleapis.com ドメインでエラーが発生すると、ページに詳細なエラー メッセージが表示されます。エラーが OAuth クライアントの問題など、IAP 設定に関連している場合は、設定を調整します。対処方法がわからないクライアント エラーが発生した場合や、サーバーエラーが表示された場合は、Google Cloud サポート チケットを開いてください。
  • アプリケーション ドメインのエラー: IAP で保護されたアプリケーション ドメインにリダイレクトされた後にエラーが発生すると、エラーコードが表示されます。一般的なエラーの詳細については、エラーコードのセクションをご覧ください。問題を解決できない場合は、Google Cloud サポート チケットを開きます。

IAP でどのようなアプリを保護できますか?

IAP は、次の対象で使用できます。

  • App Engine スタンダード環境と App Engine フレキシブル環境のアプリ

  • HTTP(S) ロード バランシング バックエンド サービスを使用する Compute Engine インスタンス

  • Google Kubernetes Engine コンテナ

  • HTTP(S) ロード バランシング バックエンド サービスを使用する Cloud Run アプリ

  • ワンクリックで Cloud Run、ロード バランシング バックエンド サービスなし

    Cloud CDN では IAP を使用できません。

    アプリにログインすると、URL の末尾に # があります。なぜですか?

    一部のブラウザでは、特定の条件下で、認証後に # が URL に追加されることがあります。これは正常であり、ログイン時に問題は発生しません。

    リクエストが失敗して 405 Method Not Allowed が返されるのはなぜですか?

    これは通常、リクエストに Cookie が添付されていない場合に発生します。JavaScript メソッドは、デフォルトでは Cookie を添付しません。

    リクエスト メソッドによって、異なるアプローチが必要になります。

    • XMLHttpRequest の場合、withCredentials を true に設定します。

    • Fetch API の場合は、credentials を include または same-origin に設定します。

    セッション関連のエラーの処理については、IAP セッションの管理をご覧ください。

    302 Redirect ではなく HTTP 401 Unauthorized が届くのはなぜですか?

    IAP は、クライアントがリダイレクトを処理するように構成されている場合にのみ 302 Redirect を送信します。

    リクエスト ヘッダーに HTTP Accept="text/html,*/*" を追加して、リダイレクトのサポートを示します。

    POST リクエストがリダイレクトをトリガーしません。なぜですか?

    ブラウザは POST リクエストに応答してリダイレクトしません。代わりに、IAP は 401 Unauthorized ステータス コードを返します。

    IAP で保護されたリソースへの POST リクエストには、次のいずれかを含めます。

    API を無効にしている場合、IAP を使用できますか?

    はい。API が無効になっている場合でも、IAP で保護されたリソースには引き続きアクセスできますが、IAM 権限を変更することはできません。

    オーナー役割を持つユーザーが TCP に IAP を使用しないように制限するには、どうしたらよいですか?

    理想的には、オーナー(roles/owner)ロールの使用を制限し、よりきめ細かい権限を使用することをおすすめします。ガイダンスについては、IAM のベスト プラクティスをご覧ください。

    それが不可能な場合は、ファイアウォール ルールを使用して TCP の IAP をブロックできます。

    IAP for TCP で使用されるのは、どのドメインですか?

    IAP は、次の Google 所有のドメインを使用します。

    Server Error が表示されるのはなぜですか?

    次のように表示される場合

    The server encountered a temporary error and could not complete your request. Please try again in 30 seconds.
    

    ファイアウォールがロードバランサの IP をブロックしている可能性があります。

    ファイアウォールで 130.211.0.0/22 と 35.191.0.0/16 からのトラフィックが許可されていることを確認します。これらの IP がバックエンドに到達できない場合、アプリケーションにアクセスできなくなります。

    特定の VM への IAP TCP 接続の場合は、VM が 35.235.240.0/20 の範囲からの接続を受け入れることも確認してください。

    内部サーバーエラーが断続的に表示されるのはなぜですか?

    An internal server error occurred while authorizing your request. Error code X などのメッセージは、バックエンド障害を示します。

    エラーコード 1、30、62、63、64、または 703 は、通常、一時的な問題を示します。再試行に指数バックオフを実装する。

    Identity Platform エラー(エラーコード 38)を修正する方法

    エラーコード 38 は、外部 ID の Identity Platform 認証 URL が IAP で正しく構成されていないことを示します。

    URL を確認する手順は次のとおりです。

    1. IAP ページに移動します。

      IAP に移動

    2. [アプリケーション] タブをクリックします。

    3. [リソース] 列でアプリケーションを見つけて、チェックボックスをオンにします。

    4. [認証 URL] または [ログイン URL] で、URL が正しいことを確認します。

    IAP で外部 ID を使用する方法については、外部 ID を使用してユーザーを認証するをご覧ください。

    割り当て超過エラー(エラーコード 429)に対処するにはどうすればよいですか?

    エラーコード 429 は、アプリケーションが IAP のリクエスト上限を超えた場合に発生します。このサービスでは、個別の割り当てが適用されます。

    • ブラウザベースのリクエスト: 1 プロジェクト、1 分あたり 360,000 件

    • プログラムによるリクエスト: 1 プロジェクト、1 分あたり 360,000 件

    プログラムによるリクエストとは、AUTHORIZATION ヘッダーまたは PROXY-AUTHORIZATION ヘッダーが含まれ、IAP Cookie が含まれていないリクエストです。他のすべてのリクエスト(認証情報のないリクエストを含む)は、ブラウザ リクエストと見なされます。

    これらの上限は、プロジェクト内のすべての IAP で保護されたリソースにまとめて適用されます。

    割り当て関連のエラーが発生した場合は、次の解決策を検討してください。

    • 本番環境での負荷テストは避けてください。代わりに、IAP をバイパスする代替ネットワーク パスを使用します。

    • サービス間のトラフィックの場合は、指数バックオフを実装して 429 エラーを適切に処理します。

    • トラフィックの多いアプリケーションを複数のプロジェクトに分散する。

    • API ベースのアプリケーションには、Apigee または同様の API ゲートウェイ ソリューションを使用します。

    • オーガニックな成長が問題の原因となっている場合は、Google Cloud サポートに連絡して割り当ての増加をリクエストしてください。

    Identity Platform を使用した IAP でのログインに関する問題または予期しない動作

    Identity Platform でサードパーティの ID プロバイダ(IdP)を使用する場合、ID トークン内の大きなクレームデータにより、IAP セッション Cookie がブラウザのサイズ制限(通常は約 4 KB)を超える可能性があります。IAP は、これらのクレームを含むセッション情報をブラウザの Cookie に保存します。

    セッション Cookie のサイズ上限を超えると、ログインに失敗したり、ログインが無限ループしたりする可能性があります。これらの問題を回避するには、次の対応を検討してください。

    • クレームを減らす: 重要なクレームのみを Identity Platform に送信するようにサードパーティの IdP を構成します。トークンに含まれるクレームのサイズと数を最小限に抑えます。

    • Cookie のサイズを調べる: ブラウザのデベロッパー ツールを使用して、アプリケーションのドメインに設定されている Cookie のサイズを確認します。Cookie のサイズ(特に IAP 関連の Cookie)に関する警告を探します。

    • 最小限のクレームをテストする: 可能な限り最小のクレームセットを送信するように IdP を一時的に構成します。これで問題が解決した場合は、Cookie のサイズ制限が根本原因であることが確認されます。

    「Google アカウントの OAuth クライアント ID / シークレットが空です」という HTTP 502 エラーが表示されるのはなぜですか?

    IAP で保護されたアプリケーションにアクセスしたときに、Empty Google Account OAuth client ID(s)/secret(s). というメッセージを含む HTTP 502 Bad Gateway エラーが表示された場合、IAP はアプリケーションの OAuth 認証情報を見つけることができません。

    このエラーは通常、次のようなシナリオで発生します。

    • プロジェクトが組織に属していない: デフォルトの Google 管理の OAuth クライアントは、Google Cloud 組織に属するプロジェクトでのみ使用できます。プロジェクトが組織に属していない場合は、App Engine 用のカスタム OAuth 認証情報を構成するか、それぞれのプラットフォーム用に構成する必要があります。
    • OAuth 認証情報が削除されたか、構成されていない: 以前にカスタム OAuth 認証情報を構成し、OAuth クライアントが削除された場合は、[認証情報] ページで認証情報を再作成し、IAP でカスタム OAuth クライアントを使用するの説明に従って IAP 設定を更新します。

    エラーコード

    次の表に、IAP の構成時または使用時に返される一般的なエラーコードとメッセージを示します。

    エラーコード 説明 トラブルシューティング
    7、HTTP 502 OAuth クライアント ID またはシークレットが空です(Empty Google Account OAuth client ID(s)/secret(s).) プロジェクトが組織に属していない場合は、カスタム OAuth 認証情報を構成します。それ以外の場合は、[認証情報] ページにアクセスしてクライアント ID とシークレットを確認するか、API メソッド(Compute Engine の場合は GET、App Engine の場合は GET)を使用して設定を確認し、PATCH でリセットします。詳細については、HTTP 502 エラーをご覧ください。
    9 OAuth リダイレクトに失敗しました これは内部エラーで、自動的にログに記録されました。お客様側での手続きは必要ありません。
    9(パスの書き換えルールあり) OAuth リダイレクトに失敗しました ロードバランサのパス書き換えルールにより、OAuth の完了が妨げられています。ロードバランサの背後にあるすべてのバックエンドで、同じ OAuth クライアント ID が使用されていることを確認してください。これは、gcloud compute backend-services update コマンドを使用して更新できます。
    9(パス ルーティング ルールあり) OAuth リダイレクトに失敗しました 各パスの両方のバージョン(末尾にスラッシュがある場合とない場合)のパスルール バリアントを作成し、同じバックエンドに転送します。たとえば、/path/ と /path の両方のルールを含めます。
    11 OAuth クライアント ID が正しく構成されていない [認証情報] ページでクライアント ID とシークレットを確認します。正しいように見えるのに機能しない場合は、API メソッドを使用して設定を確認し(Compute Engine の場合は GET、App Engine の場合は GET)、PATCH でリセットします。
    13 無効な OIDC トークン [認証情報] ページに移動して、クライアント ID が削除されていないこと、または誤って変更されていないことを確認します。
    51 ブラウザで接続プーリングがサポートされていない エンドユーザーにブラウザを最新バージョンに更新するよう伝えます。接続要件の詳細については、リソースへのアクセスを制限するをご覧ください。
    52 ホスト名と SSL 証明書の不一致 システム管理者が SSL 証明書を更新して、ホスト名と一致させる必要があります。ガイダンスについては、リソースへのアクセスを制限するをご覧ください。
    52(プライマリ証明書マップエントリあり) ホスト名と SSL 証明書の不一致 IAP は、プライマリ証明書マップのエントリをサポートしていません。個別のエントリを使用して、各証明書を正しいホスト名にマッピングします。手順については、証明書マップエントリを作成するをご覧ください。
    53 ホスト名が許可されたドメインに含まれていません 管理者がホスト名を許可されたドメインのリストに追加する必要があります。手順については、リソースへのアクセスを制限するをご覧ください。
    253、HTTP 429 リクエストの割り当てを超過しました リクエスト数の上限(リクエスト タイプごとに 360,000/分)に達しました。複数のプロジェクトにワークロードを分散する、クライアントサイドのリクエスト スロットリングを実装する、正当な成長のために必要な場合はサポートに連絡して割り当ての増加をリクエストすることを検討してください。
    551 複数の場所で IAP が有効になっている 転送ルールとバックエンド サービスの両方で IAP を有効にすることはできません。Compute Engine で有効にするのガイダンスに沿って、1 つのロケーションで無効にします。
    700、701 Workforce プール プロバイダの問題 Workforce プールにプロバイダを 1 つだけ構成します。詳細な要件については、Workforce プールの制限事項をご覧ください。
    705 Workforce Identity の OAuth クライアント ID がありません 設定プロセス全体に沿って、まず OAuth クライアント ID を作成し、次に IAP 設定を更新します。
    708 Workforce プール名が無効です Workforce プールが存在し、正しい形式(locations/global/workforcePools/WORKFORCE_POOL_ID)を使用していることを確認します。
    4003 接続またはファイアウォールの問題 VM プロセスが実行され、想定されるポートでリッスンしていることを確認します。また、ファイアウォール ルールでそのポートでの接続が許可されていることを確認します。
    4010 接続が宛先によって閉じられました VM をリセットします。問題が解決しない場合は、auth.log(通常は /var/log/)を調べるか、シリアル コンソールを使用してより詳細な診断を行います。
    4033 権限、存在、または VM の状態に関する問題 IAP ページで、リソースにトンネル ユーザーのロールが割り当てられていることを確認し、VM が存在し、実行中であることを確認します。
    4047 インスタンスが存在しないか、停止している VM の電源がオンで、起動シーケンスが完全に完了していることを確認してください。

    問題を解決できない場合や、このページにエラーが表示されない場合は、エラーの説明と API への GET 呼び出しから取得したレスポンスを添えて、Cloud カスタマーケアにお問い合わせください。レスポンスからクライアント シークレットを削除してください。