Apigee Extension Processor を Agent Gateway に接続する

このページは ApigeeApigee ハイブリッドに適用されます。

Apigee Edge のドキュメントを表示する

このページでは、Apigee 拡張機能プロセッサを Agent Gateway に接続して、AI エージェントがモデル、ツール、使用する Model Context Protocol(MCP)サーバーに対して行う呼び出しに Apigee ポリシーを適用する方法について説明します。この接続では、エージェントを変更する必要はありません。

Agent Gateway は、エージェントのトラフィックのネットワーク エントリ ポイントと出口ポイントです。ロードバランサではないため、トラフィック拡張機能は使用しません。代わりに、ゲートウェイは認可拡張機能認可を委任します。拡張機能プロセッサをその拡張機能として構成します。接続されると、ゲートウェイは各エージェントのリクエストとレスポンスを Apigee に送信して処理し、Apigee は判定を返します。

次の図は、このページで作成するリソースと、単一エージェント リクエストがそれらのリソースを通過するパスを示しています。

エージェント リクエストは Agent Gateway で保持され、Private Service Connect 経由で Apigee に送信されて判定を受け、転送されます。
図 1. Apigee 拡張機能プロセッサが Agent Gateway の認可拡張機能である場合のコンポーネントとリクエスト フロー。

図 1 では、リクエストは次のように処理されます。

  1. エージェントは、モデル、ツール、MCP サーバーに通常の HTTPS リクエストを送信します。エージェントは作成時にゲートウェイにバインドされるため、変更は必要ありません。
  2. ゲートウェイはリクエストを保持し、判定のために認可拡張機能を呼び出します。
  3. コールアウトはネットワーク アタッチメントを介して送信されるため、VPC ネットワーク内で発生します。
  4. プライベート DNS ゾーンは、コールアウト ホスト名を Private Service Connect エンドポイントの内部 IP アドレスに解決します。
  5. エンドポイントは、コールアウトを Apigee インスタンスのサービス アタッチメントに転送します。
  6. 環境グループは、ホスト名でコールアウトをターゲットなしプロキシにルーティングします。ここで、ポリシーが実行されます。
  7. プロキシがゲートウェイに判定結果を返します。Apigee はエージェントのトラフィックを転送しません。プロキシにターゲットはありません。
  8. 判定でリクエストが許可された場合、ゲートウェイは元のリクエストを宛先に転送します。

図 1 の AuthzPolicyAuthzExtension は、トラフィックではなく構成です。ポリシーは拡張機能をゲートウェイに接続し、拡張機能は実行される拡張機能プロセッサ プロキシに名前を付けます。どちらも、認可拡張機能を構成するで作成します。

拡張機能プロセッサをロードバランサに接続する場合は、Apigee 拡張機能プロセッサを使ってみるをご覧ください。

以降のセクションでは、手順について詳しく説明します。

始める前に

始める前に、次のタスクを完了します。

  1. Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Apigee, Compute Engine, Network Services, Network Security, and Cloud DNS APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Apigee, Compute Engine, Network Services, Network Security, and Cloud DNS APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  8. Google Cloud CLI をインストールします。

    Google Cloud CLI をインストールしたら、gcloud components update コマンドを実行して最新の gcloud コンポーネントを取得します。

  9. Apigee インスタンスをまだプロビジョニングしていない場合は、プロビジョニングします。

    Google Cloud コンソールで、[Apigee インスタンス] ページに移動します。

    [Apigee インスタンス] に移動

  10. Apigee インスタンスと同じリージョンに Agent Gateway をデプロイし、governedAccessPathAGENT_TO_ANYWHERE に設定して、ゲートウェイがエージェントのアウトバウンド トラフィックを制御するようにします。詳細については、Agent Gateway を構成するをご覧ください。

    このゲートウェイのネットワーク構成は、DNS ゾーンが存在するようになった後で、Agent Gateway を更新するで更新します。

  11. Agent Gateway と Private Service Connect エンドポイントの両方で使用できる VPC とサブネットがあることを確認します。

    [VPC ネットワーク] に移動

必要なロール

Apigee 拡張機能プロセッサを Agent Gateway に接続するために必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

環境変数を設定する

次の環境変数を設定して、始める前にで作成したリソースを特定します。このページの以降の各セクションでは、名前付きリソースの作成時に必要な追加の変数を定義します。

export PROJECT_ID=PROJECT_ID
export ORG_NAME=$PROJECT_ID
export REGION=REGION
export INSTANCE=INSTANCE
export VPC_NETWORK_NAME=VPC_NETWORK_NAME
export SUBNET=SUBNET
export GATEWAY=GATEWAY

ここで

  • PROJECT_ID は、Apigee インスタンスを含むプロジェクトの ID です。
  • REGION は Apigee インスタンスの Google Cloud リージョンです。
  • INSTANCE: Apigee インスタンスの名前。
  • VPC_NETWORK_NAMESUBNET は、Agent Gateway と Private Service Connect エンドポイントが使用する VPC ネットワークとサブネットです。
  • GATEWAY は、デプロイした Agent Gateway の名前です。

環境変数が正しく設定されていることを確認するには、次のコマンドを実行して出力を確認します。

echo $PROJECT_ID $ORG_NAME $REGION $INSTANCE $VPC_NETWORK_NAME $SUBNET $GATEWAY

コールアウト ホスト名を選択する

ゲートウェイは、選択したプライベート ホスト名で Apigee にアクセスします。最初に作成するリソース(Apigee 環境グループ)は、これをホスト名として使用しますが、これを解決する DNS ゾーンは限定公開 DNS ゾーンを作成するまで作成されないため、今、何かを作成する前に選択します。

export DNS_DOMAIN=DNS_DOMAIN
export EXTPROC_HOST=apigee-extproc.$DNS_DOMAIN

ここで、DNS_DOMAIN はパブリック インターネットで解決する必要のない限定公開 DNS ドメインです。末尾のドットなしで記述します(例: internal.example.com)。これにより、EXTPROC_HOSTapigee-extproc.internal.example.com になります。ホスト名が DNS_DOMAIN 内に収まる限り、apigee-extproc 以外のラベルを使用できます。

認証トークンを構成する

export TOKEN=$(gcloud auth print-access-token)
echo $TOKEN

Apigee 拡張機能プロセッサを構成する

このセクションで作成する Apigee リソースに名前を付けます。

export EXTPROC_ENV=EXTPROC_ENV
export EXTPROC_ENVGROUP=EXTPROC_ENVGROUP
export PROXY_NAME=PROXY_NAME

ここで

  • EXTPROC_ENVEXTPROC_ENVGROUP は、拡張機能プロセッサ専用の Apigee 環境と環境グループに選択する名前です(extproc-envextproc-envgroup など)。各名前は、2 ~ 32 文字の小文字、数字、ハイフンで構成し、先頭は文字にする必要があります。末尾をハイフンにすることはできません。環境名は、組織内の他のすべての環境名と異なる必要があります。
  • PROXY_NAME は、拡張機能プロセッサ プロキシに選択する名前です(例: extproc-authz)。

構成の Apigee 側はロードバランサと同じです。クイックスタートの Apigee Extension Processor を構成するに沿って、次の操作を行います。

  1. プロパティ apigee-service-extension-enabledtrue に設定された Apigee 環境を作成し、インスタンスに接続して、ホスト名が $EXTPROC_HOST の環境グループを作成します。
  2. その環境にターゲットなしの拡張機能プロセッサ プロキシを作成してデプロイします。

次に、環境内のデプロイを一覧表示します。

curl -s -H "Authorization: Bearer $TOKEN" \
  "https://apigee.googleapis.com/v1/organizations/$ORG_NAME/environments/$EXTPROC_ENV/deployments"

環境には複数のプロキシをデプロイできるため、レスポンスで apiProxy$PROXY_NAME のエントリを見つけて、その revision をメモします。

プロキシは Google Cloud コンソールで確認できます。

[API プロキシ] に移動

次の変数をそのリビジョンに設定します。これは、接続を確認するで必要になります。

export REVISION=REVISION

Agent Gateway を Apigee に接続する

ゲートウェイは、プライベート DNS ゾーンで $EXTPROC_HOST を解決して見つけた VPC の Private Service Connect エンドポイントを介して Apigee に到達します。

サービス アタッチメントを見つける

Apigee インスタンスのサービス アタッチメントを見つけます。

curl -s -H "Authorization: Bearer $TOKEN" \
  "https://apigee.googleapis.com/v1/organizations/$ORG_NAME/instances"

次の変数を、リージョンのインスタンスの serviceAttachment 値に設定します。

export SERVICE_ATTACHMENT=SERVICE_ATTACHMENT

ネットワーク アタッチメントを作成する

Agent Gateway は、ネットワーク アタッチメントを介して VPC に下り(外向き)します。名前(agent-gateway-attachment など)を選択して作成します。

export NETWORK_ATTACHMENT=NETWORK_ATTACHMENT
gcloud compute network-attachments create $NETWORK_ATTACHMENT \
    --region=$REGION --subnets=$SUBNET --connection-preference=ACCEPT_AUTOMATIC

Private Service Connect エンドポイントを作成する

内部 IP アドレスを予約して、Private Service Connect エンドポイントを作成します。

gcloud compute addresses create apigee-extproc-psc-ip \
    --region=$REGION --subnet=$SUBNET --purpose=GCE_ENDPOINT
gcloud compute forwarding-rules create apigee-extproc-psc-endpoint \
    --region=$REGION --network=$VPC_NETWORK_NAME \
    --address=apigee-extproc-psc-ip \
    --target-service-attachment=$SERVICE_ATTACHMENT

Google Cloud コンソールで、[Private Service Connect] ページに移動します。

[Private Service Connect] に移動

エンドポイントが pscConnectionStatus: ACCEPTED を報告していることを確認し、次の変数をその IP アドレスに設定します。

gcloud compute forwarding-rules describe apigee-extproc-psc-endpoint \
    --region=$REGION --format="value(pscConnectionStatus,IPAddress)"
export PSC_IP=PSC_IP

ステータスが PENDING の場合、プロジェクトは Apigee インスタンスの consumerAcceptList に存在せず、接続を受け入れることができません。

限定公開 DNS ゾーンを作成する

$DNS_DOMAIN のプライベート DNS ゾーンと、$EXTPROC_HOST をエンドポイントの IP アドレスに解決する A レコードを作成します。

gcloud dns managed-zones create extproc-zone \
    --dns-name=$DNS_DOMAIN. --visibility=private --networks=$VPC_NETWORK_NAME \
    --description="Apigee extension processor callout host"
gcloud dns record-sets create $EXTPROC_HOST. --type=A --ttl=300 \
    --rrdatas=$PSC_IP --zone=extproc-zone

Agent Gateway を更新する

始める前にの説明に沿って Agent Gateway を更新し、ネットワーク アタッチメントを介して下り(外向き)トラフィックを送信し、作成したゾーンを解決できるようにします。

  1. 現在の構成をエクスポートします。

    gcloud network-services agent-gateways export $GATEWAY \
        --location=$REGION --destination=agent-gateway.yaml
  2. agent-gateway.yaml で、次の networkConfig ブロックを追加し、各プレースホルダを対応する環境変数の値に置き換えます。ファイルは直接編集されるため、シェル変数は置き換えられません。

    networkConfig:
      egress:
        networkAttachment: projects/PROJECT_ID/regions/REGION/networkAttachments/NETWORK_ATTACHMENT
      dnsPeeringConfig:
        domains: [ DNS_DOMAIN. ]
        targetProject: PROJECT_ID
        targetNetwork: projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME

    googleManaged.governedAccessPathprotocolsregistries など、残りのファイルはエクスポートされたままにします。

  3. 編集した構成をインポートします。

    gcloud network-services agent-gateways import $GATEWAY \
        --location=$REGION --source=agent-gateway.yaml

Agent Gateway のフィールドの完全なセットについては、Agent Gateway を構成するをご覧ください。

認可拡張機能を構成する

2 つのリソースがゲートウェイを拡張プロセッサ プロキシに接続します。1 つは Apigee を指す認可拡張機能、もう 1 つは拡張機能をゲートウェイに接続する認可ポリシーです。

認可拡張機能を作成する

認可拡張機能の名前を選択します(例: apigee-authz-extension)。metadata フィールドは、実行する Apigee プロキシと、メッセージ本文をそのプロキシに送信するかどうかを選択します。

export AUTHZ_EXT=AUTHZ_EXT
cat > authz-extension.yaml <<EOF
name: projects/$PROJECT_ID/locations/$REGION/authzExtensions/$AUTHZ_EXT
authority: $EXTPROC_HOST
service: $EXTPROC_HOST
timeout: 5s
metadata:
  apigee-extension-processor: $PROXY_NAME
  apigee-request-body: 'true'
  apigee-response-body: 'true'
EOF
gcloud service-extensions authz-extensions import $AUTHZ_EXT \
    --source=authz-extension.yaml --location=$REGION

ここで

  • apigee-extension-processor は、トラフィックを処理する拡張機能プロセッサ プロキシを選択します。
  • apigee-request-bodyapigee-response-body は、リクエストとレスポンスの本文をプロキシで request.contentresponse.content として使用できるようにします。これらがないと、ペイロードを検査するポリシーは何も見つけられません。

認可ポリシーを作成する

認可ポリシーの名前を選択します(例: apigee-content-authz-policy)。このポリシーは、拡張機能をゲートウェイに接続し、Apigee に送信されるトラフィックを決定します。

export AUTHZ_POLICY=AUTHZ_POLICY
cat > authz-policy.yaml <<EOF
name: projects/$PROJECT_ID/locations/$REGION/authzPolicies/$AUTHZ_POLICY
action: CUSTOM
policyProfile: CONTENT_AUTHZ
customProvider:
  authzExtension:
    resources:
    - projects/$PROJECT_ID/locations/$REGION/authzExtensions/$AUTHZ_EXT
httpRules:
- to:
    operations:
    - paths:
      - prefix: "/"
target:
  resources:
  - projects/$PROJECT_ID/locations/$REGION/agentGateways/$GATEWAY
EOF
gcloud beta network-security authz-policies import $AUTHZ_POLICY \
    --source=authz-policy.yaml --location=$REGION

メッセージ本文が検査されるように policyProfile: CONTENT_AUTHZ を使用します。REQUEST_AUTHZ ポリシーはリクエスト ヘッダーのみを評価します。

接続を確認する

トラフィックを生成するには、このゲートウェイによって下り(外向き)が制御されるエージェントが必要です。エージェントが作成されるときに、エージェントの Agent Gateway 構成を $GATEWAY に設定することで、エージェントはゲートウェイにバインドされます。ゲートウェイへの直接 HTTP リクエストで接続を確立することはできません。詳細については、Agent Gateway を構成するをご覧ください。

拡張機能プロセッサ プロキシで Apigee のデバッグ セッションを開始し、エージェントを介して 1 つのリクエストを送信します。

curl -s -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  "https://apigee.googleapis.com/v1/organizations/$ORG_NAME/environments/$EXTPROC_ENV/apis/$PROXY_NAME/revisions/$REVISION/debugsessions?timeout=600" \
  -d '{"count":15,"tracesize":5120,"filter":"(request.uri Like \"*generateContent*\")"}'

キャプチャされたトランザクションで、次のことを確認します。

  • リクエスト URL は、Apigee ベースパスではなく、モデル エンドポイントやツールホストなど、エージェントが呼び出したアドレスです。
  • request.contentresponse.content が入力されます。これにより、認可拡張機能の本文メタデータが機能していることが確認されます。

トランザクションが表示されない場合は、環境グループのホスト名、DNS レコード、拡張機能の authority フィールドと service フィールドがすべて $EXTPROC_HOST であること、Private Service Connect エンドポイントが ACCEPTED を報告していること、ゲートウェイの governedAccessPathAGENT_TO_ANYWHERE であることを確認します。

次のステップ