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

この記事では、Identity-Aware Proxy(IAP)に関するよくある質問を紹介します。

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

IAP は、次のものに使用できます。

  • App Engine スタンダード環境と App Engine フレキシブル環境のアプリ。
  • HTTP(S) 負荷分散バックエンド サービスを使用する Compute Engine インスタンス。
  • Google Kubernetes Engine コンテナ。
  • HTTP(S) 負荷分散バックエンド サービスを使用する Cloud Run アプリ。

現在、Cloud CDN では IAP を使用できません

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

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

リクエストが失敗して 405 Method Not Allowed ステータス コードが返されました。なぜですか?

これは、リクエストに Cookie が添付されていないと発生する可能性があります。デフォルトで、JavaScript メソッドはリクエストに Cookie を添付しません。

Cookie を含める方法は、リクエスト メソッドによって異なります。たとえば、XMLHttpRequest オブジェクトを使用して送信されるリクエストでは、withCredentials プロパティが true に設定されている必要があります。Fetch API を使用して送信されるリクエストでは、credentials オプションが include または same-origin に設定されている必要があります。

少し時間が経過してからエラーを処理する方法については、IAP セッションの管理をご覧ください。

HTTP 302 Redirect ではなく、HTTP 401 Unauthorized ステータス コードを受け取りました。なぜですか?

クライアントがリダイレクトを処理するように構成されている場合、IAP は 302 Redirect ステータス コードを返します。クライアントがリダイレクトを処理できることを示すには、HTTP Accept="text/html,*/*" をリクエストのヘッダーに含める必要があります。

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

IAP への呼び出しを POST リクエストで行うと、リダイレクトがトリガーされません。ブラウザは、POST リクエストに対するレスポンスとしてリダイレクトを行いません。このため、IAP は 302 Redirect ではなく、401 Unauthorized ステータス コードを返します。

IAP で POST リクエストを処理する必要がある場合は、ID トークンか有効な Cookie のいずれかをリクエストのヘッダーに渡す必要があります。

Authorization: Bearer ヘッダーに ID トークンを含めて、IAP で保護されたリソースに認証済みリクエストを送信します。セッションを更新して有効な Cookie を取得してください。

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

はい。IAP で保護されたリソースへのアクセスは無効の API でも機能しますが、IAM 権限を変更することはできません。

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

オーナー(roles/owner)役割は、できる限り使用しないでください。オーナー役割は、Google Cloud 全体にわたる権限を付与します。より限定した役割や権限を割り当てることで、プロジェクトのセキュリティを強化できます。詳細については、IAM のベスト プラクティスをご覧ください。

オーナー役割の使用を減らすことができない場合は、ファイアウォール ルールを使用すると、TCP での IAP をブロックできます。

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

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

プロキシ サーバーまたはファイアウォール経由で接続する場合は、これらのドメインへのトラフィックが許可されていることと、WebSocket 接続の使用をブロックしていないことを確認してください。

これらのドメインへのトラフィックをブロックすると、IAP for TCP を使用できなくなります。いくつかのエラー メッセージのうちの 1 つを受け取る場合があります。

gcloud を使用している場合、エラー メッセージは

Error while connecting [[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed

ブラウザからの SSH 接続 を使用している場合、エラー メッセージは

Cloud Identity-Aware Proxy Failed

関連するエラーコードはありません。

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

次のエラー メッセージが表示される場合は、ファイアウォールが IP 130.211.0.0/2235.191.0.0/16 を許可していない可能性があります。

Error: 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/2235.191.0.0/16 がバックエンドに到達できない場合、アプリケーションにアクセスできない可能性があります。詳細については、外部 HTTPS ロードバランサの設定をご覧ください。

IAP for TCP を使用して特定の VM に接続する場合、VM は 35.235.240.0/20 の範囲のアドレスからの接続を受け入れる必要があります。

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

An internal server error occurred while authorizing your request. Error code X」形式のエラー メッセージが表示される場合は、内部障害を示します。エラーコード 1 または 30 の内部エラーは、バックエンド障害を示します。これらのバックエンド エラーの発生率が低い場合、通常は一時的な問題です。クライアントは指数バックオフを使用してリクエストを再試行する必要があります。

エラーコード

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

エラーコードまたはメッセージ 説明 トラブルシューティング
エラーコード 7 OAuth クライアント ID またはシークレット値が空です。 認証情報ページで、クライアント ID とシークレットがアプリに正しく構成されていることを確認してください。クライアント ID とシークレットが正しく構成されている場合は、GET メソッドで現在の状態を確認し、PATCH メソッドでクライアント ID とシークレットをリセットします。
Compute Engine API: GETPATCH
App Engine API: GETPATCH
エラーコード 9 OAuth リダイレクトを完了できませんでした。 これは内部エラーで、確認のためにログに記録されました。
エラーコード 9(パスの書き換えルールあり) OAuth リダイレクトを完了できませんでした。 Google Cloud ロードバランサのパスの書き換えルールにより、IAP が OAuth フローを正常に完了できません。Google Cloud ロードバランサの背後で複数のバックエンドをホストしており、パスの書き換えルールを使用する場合は、両方のバックエンドで IAP に同じ OAuth クライアント ID を使用していることを確認してください。バックエンド サービスの OAuth クライアント ID を変更するには、gcloud compute backend-services update コマンドを使用します。
エラーコード 11 OAuth クライアント ID が正しく構成されていません。 認証情報ページで、クライアント ID とシークレットがアプリに正しく構成されていることを確認してください。クライアント ID とシークレットが正しく構成されている場合は、GET メソッドで現在の状態を確認し、PATCH メソッドでクライアント ID とシークレットをリセットします。
Compute Engine API: GETPATCH
App Engine API: GETPATCH
エラーコード 13 OpenID Connect(OIDC)トークンが無効です。 認証情報ページで、IAP 用に構成されたクライアント ID が削除されていないことを確認します。
エラーコード 51 お使いのブラウザで接続プーリングがサポートされていません。 現在、最新のブラウザでは、接続プーリング エラーを処理できます。エンドユーザーが最新のブラウザを使用していることを確認してください。 詳細については、リソースへのアクセスを特定のドメインに制限するをご覧ください。
エラーコード 52 指定されたホスト名が、サーバー上の SSL 証明書と一致しません。 システム管理者が SSL 証明書を更新する必要がある場合があります。 詳細については、リソースへのアクセスを特定のドメインに制限するをご覧ください
エラーコード 53 ホスト名が、IAP 管理者が許可しているドメインと一致しません。 管理者は、許可されるドメインのリストを更新して、ホスト名を含める必要があります。詳細については、リソースへのアクセスを特定のドメインに制限するをご覧ください
エラーコード 429 プロジェクトで、1 分あたりのリクエスト数のしきい値を超えています。 IAP プロジェクトでは、1 分あたりのリクエスト数は最大 360,000 件に制限されています。このエラーが発生した場合は、プロジェクトのリクエスト数を減らしてください。ご不明な点がございましたら、Google Cloud サポートまでお問い合わせください。
エラーコード 4003 インスタンスが、接続を試みているポートでリッスンしていないか、ファイアウォールが終了している可能性があります。どちらの問題も、VM インスタンスへの起動接続テストが失敗する原因になる可能性があります。 VM のリスニング プロセスが実行中で、正しいポートでリッスンしていることを確認します。また、Google Cloud ファイアウォールが正しく構成され、接続先のポートで開いていることを確認します。
エラーコード 4010 接続は確立されましたが、宛先インスタンスによって閉じられました。これは通常、インスタンスまたは宛先ポートをリッスンしているプログラムに問題があることを意味します。 インスタンスをリセットします。SSH を使用して接続している場合は、auth.log ログで予期しないエラーを確認します。ログファイルのデフォルトの場所は /var/log/ です。SSH を使用してログにアクセスできない場合は、シリアル コンソールを使用するか、新しい VM にディスクを切断、再接続して、ログを表示できるか試します。カスタマー サポートに連絡する際に、ログを添付します。
エラーコード 4033 インスタンスに対するアクセス権限がないか、インスタンスが存在しません。あるいは、インスタンスが停止しています。 Identity-Aware Proxy ページで、IAP で保護されたトンネル ユーザーの IAM 役割が接続先のリソースに適用されていることを確認します。
エラーコード 4047 インスタンスが存在しないか、インスタンスが停止しています。 VM の電源がオンで、起動が完了していることを確認してください。

問題の解決方法がわからない場合は、カスタマー サポートに連絡して、どのようなエラーが発生しているのか詳しく説明してください。また、API への GET 呼び出しで返されたレスポンスも伝えてください。レスポンスからクライアント シークレットを削除できます。