エージェントを Cloud Run にデプロイするときに、API や他のエージェントと通信するときに安全に認証できる ID をエージェントに付与できます。
Google Cloud API、他のエージェント、ツールに対する認証
Cloud Run ワークロードが agent-identity ID タイプで構成されている場合、次の形式でシステム管理 ID を受け取ります。
principal://agents.global.org-ORGANIZATION_ID.system.id.goog/resources/run/projects/PROJECT_NUMBER/locations/REGION/services/SERVICE_NAME
組織のないプロジェクトの場合、形式ではプロジェクト番号を使用します。
principal://agents.global.project-PROJECT_NUMBER.system.id.goog/resources/run/projects/PROJECT_NUMBER/locations/REGION/services/SERVICE_NAME
この ID を使用して、 Google Cloud API、他のエージェント、ツールと通信するときにエージェントを安全に認証できます。
Google Cloud APIs に対する認証
エージェントは、割り当てられたエージェント ID を使用して、Cloud Run メタデータ サーバーから取得したアクセス トークンを使用して、Vertex AI、Cloud Storage などのGoogle Cloud API やその他のGoogle Cloud プロダクトに対して認証できます。
エージェントのプリンシパルに適切な IAM ロールを付与します。次に例を示します。
Vertex AI へのアクセス権を付与する:
gcloud projects add-iam-policy-binding
PROJECT_ID\ --member="AGENT_PRINCIPAL" \ --role="roles/aiplatform.user"他の Google Cloud API へのアクセス権を付与する:
ターゲット リソースに必要なロールを
AGENT_PRINCIPALに付与します。たとえば、Cloud Storage バケットに対するroles/storage.objectViewerなどです。詳細については、アプリケーションのデフォルト認証情報で認証するをご覧ください。
次のように置き換えます。
PROJECT_ID: 実際の Google Cloud プロジェクト ID。AGENT_PRINCIPAL: エージェントの ID(例:principal://agents.global.org-ORGANIZATION_ID.system.id.goog/resources/run/projects/PROJECT_NUMBER/locations/REGION/services/AGENT_NAME)。
エージェント アプリケーション コードで、標準の Google Cloud クライアント ライブラリを使用します。クライアント ライブラリは、アプリケーションのデフォルト認証情報(ADC)を使用して、メタデータ サーバーから有効期間の短いアクセス トークンを自動的に取得します。
または、コンテナ内のメタデータ サーバーからアクセス トークンを手動で取得することもできます。
curl -s -H "Metadata-Flavor: Google" \ "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token"
Cloud Run の他のエージェントに対する認証を行う
エージェントが Cloud Run でホストされている別のエージェント(A2A エージェントなど)を呼び出す必要がある場合は、Cloud Run の組み込み roles/run.invoker IAM チェックによって検証された JSON Web Token(JWT)ID トークンを使用して認証します。
呼び出し元エージェントの ID に、ターゲットの Cloud Run サービスに対する
roles/run.invokerロールを付与します。gcloud run services add-iam-policy-binding
TARGET_SERVICE_NAME\ --member="CALLER_AGENT_PRINCIPAL" \ --role="roles/run.invoker" \ --region=REGION次のように置き換えます。
TARGET_SERVICE_NAME: 宛先の Cloud Run エージェント サービスの名前。CALLER_AGENT_PRINCIPAL: 呼び出し元エージェントの ID。REGION: ターゲット サービスの Google Cloud リージョン。
トークン検証オプション
Cloud Run は、次の 2 つの ID トークン検証方法をサポートしています。
- バインドされていないトークン: メタデータ サーバーによって生成される標準のオーディエンス バインド ID トークン。これは、サービス間認証とエージェント間認証のデフォルトのメカニズムです。
- バウンド トークン: mTLS を使用して、トークンとワークロードの証明書間の暗号バインディングを提供します。バインドされたトークンを使用するには、呼び出し元クライアントがリクエストでリーフ証明書チェーンを提供します。
バインドされていない ID トークンを取得する
- 呼び出し元エージェント コンテナ内から、ターゲット サービスの URL をオーディエンスとして ID トークンを取得します。
TOKEN=$(curl -s -H "Metadata-Flavor: Google" \ "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=
TARGET_SERVICE_URL")TARGET_SERVICE_URLは、宛先 Cloud Run サービスの URL(例:https://target-agent-1234567890.us-central1.run.app)に置き換えます。 Authorizationヘッダーにトークンを含めて、ターゲット サービスにリクエストを送信します。curl -H "Authorization: Bearer $TOKEN" \
TARGET_SERVICE_URL/endpoint
バインドされた ID トークンを取得する(mTLS)
- 呼び出し元エージェント コンテナ内から、リーフ証明書チェーンを読み取り、POST リクエストを使用してメタデータ サーバーからバインド トークンをリクエストします。
CERT_PATH="/var/run/secrets/workload-spiffe-credentials/certificates.pem" JSON_PAYLOAD=$(jq -n --arg certs "$(cat $CERT_PATH)" '{"certificate_chain": $certs}') TOKEN=$(curl -s -X POST \ -H "Metadata-Flavor: Google" \ -H "Content-Type: application/json" \ -d "$JSON_PAYLOAD" \ "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=
TARGET_SERVICE_MTLS_URL") - TLS ハンドシェイク中にワークロード証明書を提示して、ターゲット サービスの mTLS エンドポイントを呼び出します。
KEY_PATH="/var/run/secrets/workload-spiffe-credentials/private_key.pem" curl --cert $CERT_PATH \ --key $KEY_PATH \ -H "Authorization: Bearer $TOKEN" \
TARGET_SERVICE_MTLS_URL/endpoint
Python の例
Python ベースのエージェント コードを作成する場合、証明書が存在すると、標準の Google Cloud クライアント ライブラリはデフォルトでバインド トークンを自動的にリクエストします。HTTP リクエストを手動で行う必要がある場合:
import os
import requests
import google.auth
from google.auth.transport.requests import Request
from google.oauth2 import id_token
# Target agent's mTLS URL
target_mtls_url = "TARGET_SERVICE_MTLS_URL"
# 1. Fetch the ID token.
# google-auth automatically requests a bound ID token via POST because
# the platform configures the workload certificate environment variables.
auth_req = Request()
token = id_token.fetch_id_token(auth_req, target_mtls_url)
# 2. Make the HTTP call over mTLS, presenting the workload certificates.
cert_path = "/var/run/secrets/workload-spiffe-credentials/certificates.pem"
key_path = "/var/run/secrets/workload-spiffe-credentials/private_key.pem"
response = requests.get(
target_mtls_url,
headers={"Authorization": f"Bearer {token}"},
cert=(cert_path, key_path)
)
print(response.text)TARGET_SERVICE_MTLS_URL は、宛先 Cloud Run サービスの mTLS URL(例: https://target-agent-12345.us-central1.mtls.run.app)に置き換えます。
Cloud Run の MCP サーバーに対する認証を行う
Cloud Run でホストされている MCP サーバーまたはツールに接続するには、--functional-type=mcp-server 識別子を使用して、Agent Registry での MCP サーバーの自動登録を有効にします。
MCP サーバーに Cloud Run で実行されている他のエージェントのみがアクセスする場合は、組み込みの IAM 起動元チェックを使用します。エージェントが標準の実行呼び出し元ポリシーを使用してネイティブに通信できるようにします。
gcloud run services add-iam-policy-bindingMCP_SERVICE_NAME\ --member="CALLING_AGENT_PRINCIPAL" \ --role="roles/run.invoker" \ --region=REGION
次のように置き換えます。
MCP_SERVICE_NAME: MCP サーバーをホストする宛先 Cloud Run サービスの名前。CALLING_AGENT_PRINCIPAL: MCP サーバーを呼び出すエージェントのプリンシパル ID。例:serviceAccount:my-agent@my-project.iam.iam.gserviceaccount.comREGION: MCP サーバーがデプロイされている Google Cloud リージョン。
run.invoker ロールを付与すると、呼び出し元エージェントは、トークン検証オプション セクションで説明されているように、ID トークンを取得できます。
IAP for CLI とプログラム SDK アクセスを使用して MCP サーバーを保護する方法については、MCP サーバーを認証するをご覧ください。
ユーザーに代わって認証する
エージェントがユーザーの代わりに外部ツールやサービスにアクセスする場合、プロビジョニングされたエージェント ID を使用して、MCP サーバーや外部エンドポイントとの認証を管理できます。
3-legged OAuth(3LO)同意、2-legged OAuth(2LO)、API キーなどの複雑な認可ワークフローを安全に処理するには、エージェント ID 認証マネージャーを構成します。
これらの認証マネージャーをツールセットにバインドする手順については、ツールとリソースに対する認証をご覧ください。