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