Cloud Run エージェントからのアウトバウンド リクエストが失敗するか、Agent Gateway をバイパスする場合は、次のチェックを使用してリクエストパスをトレースするか、一般的な問題と解決策をご覧ください。設定手順については、Agent Gateway でエージェントを管理するをご覧ください。
トラフィックが Agent Gateway に到達する前に、Cloud Run Envoy サイドカーが Traffic Director API からルーティングと証明書の構成を取得します。サイドカーは、mTLS CONNECT トンネルを介して Secure Web Proxy にアウトバウンド トラフィックを送信します。
Envoy サイドカー アクセスログでアウトバウンド ルーティングを確認する
Cloud Run Envoy サイドカーがアウトバウンド TCP 接続をインターセプトすると、jsonPayload.upstream_host フィールドを含む JSON アクセスログ エントリが run.googleapis.com%2Fvar%2Flog%2Fenvoy_sidecar_log に書き込まれます。
Cloud Run サービスからアウトバウンド リクエストをトリガーし、サイドカー アクセスログをクエリします。
gcloud logging read \ 'resource.type="cloud_run_revision" AND resource.labels.service_name="SERVICE_NAME" AND logName=~"envoy_sidecar_log$" AND jsonPayload.upstream_host:*' \ --project=PROJECT_ID \ --freshness=7d \ --limit=20 \ --format="table(timestamp, jsonPayload.sni, jsonPayload.upstream_host, jsonPayload.response_flags, jsonPayload.bytes_sent, jsonPayload.bytes_received, jsonPayload.duration)"
次のように置き換えます。
SERVICE_NAME: Cloud Run エージェント サービスの名前。PROJECT_ID: 実際の Google Cloud プロジェクト ID。
ゲートウェイを介した正常な接続では、次のような出力が返されます。
TIMESTAMP SNI UPSTREAM_HOST RESPONSE_FLAGS BYTES_SENT BYTES_RECEIVED DURATION 2026-10-09T05:07:48.340693Z example.com envoy://tunnel_internal_listener/ - 4101 2899 489
UPSTREAM_HOST と RESPONSE_FLAGS の値を確認します。
UPSTREAM_HOSTがenvoy://tunnel_internal_listener/で、RESPONSE_FLAGSが-の場合、接続は正常です。Envoy サイドカーがEgressRoutingポリシーと一致し、接続を Agent Gateway に転送しました。UPSTREAM_HOSTが宛先 IP アドレスとポート(93.184.216.34:443など)の場合、Traffic Director API はEgressRoutingポリシーを照合できなかったか、ターゲット ゲートウェイを解決できませんでした。Envoy はORIGINAL_DSTパススルーを使用し、Agent Gateway をバイパスしました。EgressRouting と AgentGateway のリソース URI を監査するをご覧ください。UPSTREAM_HOSTがenvoy://tunnel_internal_listener/で、RESPONSE_FLAGSがUFまたはUH、またはBYTES_RECEIVEDが0の場合、Envoy は Secure Web Proxy へのCONNECTトンネルを開くことができませんでした。Virtual Private Cloud(VPC)サブネットの接続を確認するか、Secure Web Proxy ゲートウェイを更新すると Envoy トンネリングが中断するをご覧ください。- 行が表示されない場合は、
run.googleapis.com%2Frequestsを確認して、リクエストが Cloud Run コンテナに到達したことを確認します。アクティブなリビジョンで--ambient-networkingが有効になっていることを確認します。それでも行が表示されない場合は、Envoy サイドカーの xDS と接続ログを確認するをご覧ください。
Envoy サイドカーの xDS と接続ログを確認する
Envoy サイドカーのアクセスログにエントリが返されないか、接続エラーが表示される場合は、サイドカーの xDS ログとアップストリーム接続ログを調べます。
Traffic Director API の xDS ストリーム エラーまたは起動ステータスを確認します。
gcloud logging read \ 'resource.type="cloud_run_revision" AND resource.labels.service_name="SERVICE_NAME" AND logName=~"envoy_sidecar_log$" AND (severity>=INFO OR textPayload:"DeltaAggregatedResources")' \ --project=PROJECT_ID \ --freshness=7d \ --limit=30 \ --format="table(timestamp, severity, textPayload, jsonPayload.message)"
ambient-swp-connect-clusterへのアップストリーム トンネル接続の試行を確認します。gcloud logging read \ 'resource.type="cloud_run_revision" AND resource.labels.service_name="SERVICE_NAME" AND logName=~"envoy_sidecar_log$" AND (textPayload:"ambient-swp-connect-cluster" OR jsonPayload.message:"ambient-swp-connect-cluster" OR jsonPayload.message:"tunnel_internal_listener")' \ --project=PROJECT_ID \ --freshness=7d \ --limit=30 \ --format="table(timestamp, severity, textPayload, jsonPayload.message)"
次のように置き換えます。
SERVICE_NAME: Cloud Run エージェント サービスの名前。PROJECT_ID: 実際の Google Cloud プロジェクト ID。
ログメッセージを確認します。
- ログに
DeltaAggregatedResources gRPC config streamとThe caller does not have permissionが含まれている場合、サービス ID にroles/trafficdirector.clientがありません。Envoy サイドカーが xDS 構成を受信できないをご覧ください。 - ログに
Creating connection to cluster ambient-swp-connect-clusterが含まれている場合、Envoy はEgressRouting構成を受信し、Secure Web Proxy への接続を試みています。
EgressRouting と AgentGateway のリソース URI を監査する
gcloud alpha network-services egress-routings create または gcloud beta network-services agent-gateways import を実行すると、API はターゲット リソースが存在するかどうかを確認せずに URI 構文を検証します。リソース名またはリージョンに誤字があると、Traffic Director API は EgressRouting 変換をスキップし、Envoy はパススルー ルーティングを使用します。
保存されている URI を検査し、デプロイされたリソースと比較します。
EgressRoutingリソースを検査します。出力では、プロジェクト ID がプロジェクト番号に正規化されます。gcloud alpha network-services egress-routings describe EGRESS_ROUTING_NAME \ --location=REGION \ --project=PROJECT_ID
リージョン内のすべての
EgressRoutingリソースを一覧表示して、同じサービスをターゲットとする重複するポリシーがないことを確認します。gcloud alpha network-services egress-routings list \ --location=REGION \ --project=PROJECT_ID
ターゲットの Secure Web Proxy ゲートウェイが
EgressRouting.gatewayとAgentGateway.selfManaged.resourceUrisの URI と一致していることを確認します。gcloud network-services gateways describe SWP_NAME \ --location=REGION \ --project=PROJECT_ID
次のように置き換えます。
EGRESS_ROUTING_NAME:EgressRoutingリソースの名前。REGION: デプロイのリージョン。PROJECT_ID: 実際の Google Cloud プロジェクト ID。SWP_NAME: Secure Web Proxy ゲートウェイの名前。
3 つの URI がすべて、プロジェクト ID または番号、リージョン、リソース名と一致していることを確認します。
EgressRouting.sources[].workloadUri:- サービス スコープ:
//run.googleapis.com/projects/PROJECT_ID/locations/REGION/services/SERVICE_NAME - プロジェクト スコープ:
//run.googleapis.com/projects/PROJECT_IDまたは//run.googleapis.com/projects/PROJECT_NUMBER
- サービス スコープ:
EgressRouting.gateway://networkservices.googleapis.com/projects/PROJECT_ID/locations/REGION/gateways/SWP_NAMEAgentGateway.selfManaged.resourceUris[]:projects/PROJECT_ID/locations/REGION/gateways/SWP_NAME
Secure Web Proxy のトランザクション ログを確認する
Envoy サイドカーがトラフィックを Secure Web Proxy に転送してもリクエストが失敗する場合は、プロキシ トランザクション ログを表示するの説明に従ってプロキシログを調べます。
- プロキシログにトラフィックが表示されない場合、リクエストは Secure Web Proxy に到達していません。EgressRouting と AgentGateway のリソース URI を監査すると一般的な問題と解決策で
EgressRoutingの構成を確認します。 - 予期しない
DENYまたはALLOWの決定が表示された場合は、ログエントリのjsonPayload.authzPolicyInfoとjsonPayload.agentGatewayInfoを確認して、一致したAuthzPolicyと宛先メタデータを検査し、Agent Gateway リソースに接続されているExtensionBindingルールを確認します。ExtensionBindingリソースを作成または更新した後、構成の変更がゲートウェイに反映されるまでに最大 5 分かかることがあります。
一般的な問題と解決策
以降のセクションでは、一般的な問題とその解決方法について説明します。
リソース URI の不一致により、アウトバウンド トラフィックが Agent Gateway をバイパスする
Cloud Run からのアウトバウンド トラフィックが Agent Gateway をバイパスするか、egress-routings create の成功後にタイムアウトします。envoy_sidecar_log では、jsonPayload.upstream_host に envoy://tunnel_internal_listener/ ではなく宛先 IP アドレスとポートが表示されます。
EgressRouting または AgentGateway リソース URI のいずれかが、存在しないリソース名または一致しないリージョンを参照しています。Traffic Director API が Cloud Run サービスから Secure Web Proxy へのチェーンを解決できない場合、トンネル変換をスキップして ORIGINAL_DST を提供します。
EgressRouting リソース URI と AgentGateway リソース URI を監査するのコマンドを実行して、一致しない URI を見つけます。一致するリソース名とリージョンで構成を更新し、AgentGateway リソースまたは EgressRouting リソースを再作成します。
Envoy サイドカーが xDS 構成を受信できない
Cloud Run コンテナからのアウトバウンド リクエストがタイムアウトするか失敗し、envoy_sidecar_log に次のエラーが含まれます。
DeltaAggregatedResources gRPC config stream to trafficdirector.REGION.rep.googleapis.com:443 closed: 7, The caller does not have permission
Cloud Run ランタイム サービス ID に roles/trafficdirector.client がありません。デフォルトでは、--functional-type=agent と --identity-type=agent-identity を使用してサービスをデプロイすると、roles/run.agentDefaultAccess が付与されます。これには roles/trafficdirector.client と roles/cloudtrace.agent が含まれます。サービス ID にこれらの権限がない場合は、ロールを付与します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="principal://agents.global.org-ORGANIZATION_ID.system.id.goog/resources/run/projects/PROJECT_NUMBER/locations/REGION/services/SERVICE_NAME" \ --role="roles/trafficdirector.client" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="principal://agents.global.org-ORGANIZATION_ID.system.id.goog/resources/run/projects/PROJECT_NUMBER/locations/REGION/services/SERVICE_NAME" \ --role="roles/cloudtrace.agent"
次のように置き換えます。
PROJECT_ID: 実際の Google Cloud プロジェクト ID。ORGANIZATION_ID: 実際の Google Cloud 組織 ID。PROJECT_NUMBER: Google Cloud プロジェクト番号。REGION: サービスのリージョン。SERVICE_NAME: Cloud Run エージェント サービスの名前。サービスが Agent Identity ではなくサービス アカウントを使用する場合は、--memberをserviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.comに設定します。
Cloud Run サービス エージェントが VPC ネットワークにアクセスできることを確認します。デフォルトでは、roles/run.serviceAgent にはこれらの権限が含まれています。サービス エージェントの権限を変更した場合は、roles/compute.networkUser を付与します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com" \ --role="roles/compute.networkUser"
Secure Web Proxy ゲートウェイを更新すると、Envoy トンネリングが中断される
既存の Secure Web Proxy ゲートウェイの ServerTlsPolicy、証明書、IP アドレス、ポートを更新すると、アウトバウンド リクエストが 502、503、504 エラーで失敗するか、envoy_sidecar_log が RESPONSE_FLAGS: UF を報告します。
Secure Web Proxy ゲートウェイの作成後に addresses または ports を変更することはできません。また、既存の Secure Web Proxy ゲートウェイの serverTlsPolicy または certificateUrls の更新は、Traffic Director API の EgressRouting エンドポイントに反映されません。
ワークロードのダウンタイムなしでこれらの Secure Web Proxy フィールドを変更するには、次の操作を行います。
- 別のリソース名と更新された構成で、代替の Secure Web Proxy ゲートウェイを作成します。
AgentGatewayリソースのselfManaged.resourceUrisを更新して、代替の Secure Web Proxy ゲートウェイ URI を参照します。- 置換用の Secure Web Proxy ゲートウェイを指すように
EgressRoutingリソースを再作成します。 - 交換用ゲートウェイがトラフィックをルーティングしたら、
AgentGatewayリソースから古い Secure Web Proxy ゲートウェイを削除し、古い Secure Web Proxy ゲートウェイを削除します。
Secure Web Proxy がすべてのアウトバウンド トラフィックを拒否する
EgressRouting ポリシーを作成するか、ExtensionBinding をアタッチすると、Cloud Run エージェントからのすべてのアウトバウンド リクエストが 403 エラーで失敗します。
Secure Web Proxy は、Agent Gateway リソースの ALLOW AuthzPolicy で許可されるまで、デフォルトですべてのトラフィックを拒否します。ExtensionBinding を接続しても、ALLOW AuthzPolicy のないトラフィックは許可されません。基盤となる Secure Web Proxy Gateway リソースに接続されたポリシーは無視されます。
承認されたトラフィックを許可するには、Agent Gateway リソースをターゲットとする ALLOW AuthzPolicy を接続します。手順については、ベースラインの下り(外向き)トラフィックと MCP トラフィックを許可するをご覧ください。
アウトバウンド モデル リクエストが 403 エラーで失敗する
Agent Gateway でポリシーを構成した後、Cloud Run エージェントから REGION-aiplatform.googleapis.com の Vertex AI などのモデル エンドポイントへの発信呼び出しが 403 Forbidden エラーで失敗する。
--vpc-egress=all はすべての送信コンテナ トラフィックを Secure Web Proxy 経由でルーティングするため、ALLOW AuthzPolicy が Model Context Protocol(MCP)メソッドのみに一致する場合、または Identity-Aware Proxy(IAP)ExtensionBinding が Identity and Access Management(IAM)統合アクセス ポリシーに許可ルールがない非 MCP ホストに一致する場合、モデル リクエストは失敗します。
アウトバウンド モデル呼び出しを許可するには、Agent Gateway リソースの ALLOW AuthzPolicy でモデル エンドポイントを許可します。また、IAP ExtensionBinding の matchConditions を prefix: "urn:mcp" にスコープ設定するか、IAM 統合アクセス ポリシーに destination.unregistered.host 許可ルールを追加します。手順については、ベースラインの下り(外向き)トラフィックと MCP トラフィックを許可すると IAP 下り(外向き)ポリシーを構成するをご覧ください。
Secure Web Proxy が GatewaySecurityPolicyRules を無視する
GatewaySecurityPolicyRules を作成したか、Secure Web Proxy Gateway リソースに AuthzPolicy を接続しましたが、アウトバウンド エージェント トラフィックには影響しません。
Secure Web Proxy が AgentGateway リソースに関連付けられている場合、Secure Web Proxy は AgentGateway リソースに接続されている認可ポリシーと拡張機能バインディングのみを適用します。基盤となる Secure Web Proxy Gateway に接続されている GatewaySecurityPolicyRules リソースまたは AuthzPolicy リソースは無視されます。
代わりに、AuthzPolicy リソースと ExtensionBinding リソースを Agent Gateway リソースに接続します。手順については、Agent Gateway でポリシーを構成するをご覧ください。
送信リクエストが TLS 検査に失敗する
Cloud Run エージェントからのアウトバウンド リクエストが、すべての接続で TLS エラーで失敗する。
Secure Web Proxy サービス アカウントに、Certificate Authority Service プールの roles/privateca.certificateManager がありません。
CA プールに対する roles/privateca.certificateManager を Secure Web Proxy サービス アカウントに付与します。手順については、サービス アカウントを作成するをご覧ください。
アウトバウンド TLS 検査接続が SSLV3_ALERT_HANDSHAKE_FAILURE または RemoteDisconnected で失敗する
エージェントからのアウトバウンド リクエストが、SSLV3_ALERT_HANDSHAKE_FAILURE を使用した宛先ホストへの最初の接続で失敗するか、RemoteDisconnected で失敗する。
宛先ホストへの最初の TLS 検査接続で、Secure Web Proxy は CA Service からリーフ証明書をミントしてキャッシュに保存します。これにより、一時的な handshake エラーが発生する可能性があります。urllib.request.urlopen など、デフォルトで Connection: close を送信する HTTP クライアントは、TLS インターセプト中に RemoteDisconnected で失敗することがあります。
エージェント コードでこれらのエラーを防止するには:
- 永続的な接続を再利用する HTTP クライアント(
httpx.AsyncClient、requests.Session()など)を使用します。 httpx.AsyncHTTPTransport(retries=2)やurllib3.util.Retryなどの HTTP クライアントで、接続とハンドシェイクの再試行を構成します。