デプロイされたエージェントのアクセスを管理する

Gemini Enterprise Agent Platform にデプロイされたエージェントのアクセスを管理するには、外部リソースにアクセスするエージェントと、エージェントにアクセスする外部クライアントの両方に対して認証と認可を構成する必要があります。このドキュメントでは、エージェント ID、サービス アカウント、API キー、OAuth クライアントなど、使用可能な認証方法について説明します。

アクセスモードに応じて、さまざまな認証方法を使用できます。

認証方法 ユースケース この認証方法について
エージェント ID(プレビュー) エージェント内からデータソースに直接アクセスします。 エージェント ID でデプロイされたエージェントは、エージェントに付与した IAM 権限に従ってリソースにアクセスできます。
サービス アカウント エージェント内からデータソースに直接アクセスします。 デプロイされたエージェントは、サービス アカウントにアクセス権が付与されているすべてのリソースにアクセスできます。
API キー エージェント内から API キーを使用してエンドポイントにリクエストを送信します。 この認証方法を使用する前に、使用する API が API キーをサポートしていることを確認してください。
OAuth クライアント ID エージェントのエンドユーザーのユーザー アカウント、登録、ログイン、認可を処理します。 エージェントがユーザーに同意をリクエストして受け取る必要があります。

エージェント ID

エージェント ID を使用してエージェントの ID と権限を設定した場合は、Agent Runtime でエージェント ID を使用してリソースへのアクセス制御を管理する方法をご覧ください。

サービス アカウント

サービス アカウントを使用してエージェントの ID と権限を設定した場合 、Agent Runtime に デプロイするエージェントは、AI Platform Reasoning Engine サービス エージェントまたはカスタム サービス アカウントを使用して実行されます。

AI Platform Reasoning Engine サービス エージェント

AI Platform Reasoning Engine サービス エージェント サービス アカウントは、 service-PROJECT_NUMBER@gcp-sa-aiplatform-re.iam.gserviceaccount.com の形式を使用します。

このサービス アカウントには、デプロイされたエージェントに必要なデフォルトの権限を付与する Gemini Enterprise Agent Platform Reasoning Engine サービス エージェント ロールroles/aiplatform.reasoningEngineServiceAgent)が割り当てられています。デフォルト権限の全一覧は IAM のドキュメントでご確認ください。

デプロイされたエージェントのロールを一覧表示する

コンソール

  1. [IAM] ページに移動します。

    IAM に移動

  2. プロジェクトに対応する Google Cloud プロジェクトを選択します。

  3. エージェント ID として使用する サービス アカウント に一致するプリンシパルを見つけます。

  4. デプロイされたエージェントのロールは、[ロール] 列に表示されます。

gcloud

まず、インストールして初期化 します。gcloud CLI次のコマンドを実行します。

gcloud projects get-iam-policy PROJECT_ID_OR_NUMBER \
  --flatten="bindings[].members" \
  --filter="bindings.members:serviceAccount:PRINCIPAL" \
  --format="value(bindings.role)"

ここで

  • PROJECT_ID_OR_NUMBER はプロジェクトの ID または番号です。
  • PRINCIPAL は、エージェントが Runtime にデプロイされたときに使用された サービス アカウント に基づいています。

詳細については、IAM のドキュメントCLI リファレンスをご覧ください。

Python

まず、次のコマンドを実行してクライアント ライブラリをインストールします。

pip install google-api-python-client

次に、認証を行い、 次のコマンドを実行して、デプロイされたエージェントのロールを一覧表示します。

from google.cloud import resourcemanager_v3
from google.iam.v1 import iam_policy_pb2

project_id = "PROJECT_ID"
principal = "PRINCIPAL"

crm_service = resourcemanager_v3.ProjectsClient()
policy = crm_service.get_iam_policy(iam_policy_pb2.GetIamPolicyRequest(
    resource=f"projects/{project_id}"
))
for binding in policy.bindings:
    for member in binding.members:
        if principal in member:
            print(binding.role)

ここで、PRINCIPAL は、 サービス アカウント が、エージェントが Runtime にデプロイされたときに使用されたことに基づいています。

デプロイされたエージェントにロールを付与する

  1. [IAM] ページに移動します。

    IAM に移動

  2. プロジェクトに対応する Google Cloud プロジェクトを選択します。

  3. エージェント ID として使用する サービス アカウント に一致するプリンシパルを見つけます。

  4. 編集ボタンをクリックしてロールを追加し、保存ボタンをクリックして、必要なロールをプリンシパル に追加します。

gcloud

まず、インストールして初期化 します。gcloud CLI次のコマンドを実行します。

gcloud projects add-iam-policy-binding PROJECT_ID --member=PRINCIPAL --role=ROLE_NAME

ここで

  • PRINCIPAL は、エージェントが Runtime にデプロイされたときに使用された サービス アカウント に基づいています。
  • ROLE_NAME は、付与するロールの名前です。 事前定義ロールのリストについては、ロールについてをご覧ください。

詳細については、IAM のドキュメントCLI リファレンスをご覧ください。

Python

デプロイされたエージェントのロールを付与または取り消すために、独自の Python コードを作成することをおすすめしません。代わりに、1 回限りのオペレーションには Google Cloud コンソールまたは gcloud を使用し、IAM アクセス制御をプログラムで管理するには Terraformを使用することをおすすめします。Python でこれを行う必要がある場合は、IAM クライアント ライブラリの ドキュメントをご覧ください。

デプロイされたエージェントからロールを取り消す

  1. [IAM] ページに移動します。

    IAM に移動

  2. プロジェクトに対応する Google Cloud プロジェクトを選択します。

  3. エージェント ID として使用する サービス アカウント に一致するプリンシパルを見つけます。

  4. 編集ボタンをクリックして対応するロールを削除し、保存ボタンをクリックして、プリンシパル からロールを取り消します。

gcloud

まず、インストールして初期化 します。gcloud CLI次のコマンドを実行します。

gcloud projects remove-iam-policy-binding PROJECT_ID --member=PRINCIPAL --role=ROLE_NAME

ここで

  • PRINCIPAL は、エージェントが Runtime にデプロイされたときに使用された サービス アカウント に基づいています。
  • ROLE_NAME は、取り消すロールの名前です。 事前定義ロールのリストについては、ロールについてをご覧ください。

詳細については、IAM のドキュメントCLI リファレンスをご覧ください。

Python

デプロイされたエージェントのロールを付与または取り消すために、独自の Python コードを作成することをおすすめしません。代わりに、1 回限りのオペレーションには Google Cloud コンソールまたは gcloud を使用し、IAM アクセス制御をプログラムで管理するには Terraformを使用することをおすすめします。Python でこれを行う必要がある場合は、IAM クライアント ライブラリの ドキュメントをご覧ください。

API キー

API キーはシークレットを使用します。シークレットには、1 つ以上のシークレット バージョンとともに、ラベルやレプリケーション情報などのメタデータが含まれます。シークレットの実際のペイロードは、 シークレット バージョンに保存されます。シークレットは プロジェクト レベルで管理され(Secret Manager 経由)、 デプロイされたエージェント間で共有できます。Secret Manager でエージェントに対応するシークレットを一覧表示するには、ラベルを追加してフィルタに使用します。

シークレットを作成する

コンソール

  1. [Secret Manager] ページに移動します。

    Secret Manager に移動

  2. [シークレット マネージャー] ページで、[シークレットを作成] をクリックします。

  3. [名前] フィールドに、シークレットの名前を入力します(例: my-secret)。

  4. 省略可: 最初のシークレットの作成時にシークレット バージョンも追加するには、[シークレットの値] フィールドにシークレットの値を入力します(例: abcd1234)。

  5. [ラベル] に移動して [ラベルを追加] をクリックします。

  6. キーと対応する値を入力してラベルを作成します。

  7. [シークレットの作成] をクリックします。

gcloud

まず、インストールして初期化 します。gcloud CLI次のコマンドを実行します。

gcloud secrets create SECRET_ID --replication-policy="automatic"
gcloud secrets versions add SECRET_ID --data-file="FILE_PATH"

ここで

  • SECRET_ID は、シークレットの ID またはシークレットの完全修飾識別子です。
  • FILE_PATH は、バージョンの詳細を含むファイルへの完全パス(ファイル名を含む)です。

詳細については、シークレットとシークレット バージョンを作成する Secret Manager のドキュメント、またはシークレットとシークレット バージョンをそれぞれ作成する CLI リファレンスをご覧ください。

Python

まず、次のコマンドを実行してクライアント ライブラリをインストールします。

pip install google-cloud-secret-manager

次に、認証を行い、 次のコマンドを実行します。

from google.cloud import secretmanager
import google_crc32c

client = secretmanager.SecretManagerServiceClient()
secret = client.create_secret(request={
    "parent": "projects/PROJECT_ID",
    "secret_id": "SECRET_ID",
    "secret": {  # google.cloud.secretmanager_v1.types.Secret
        # Required. The replication policy cannot be changed after the Secret has been created.
        "replication": {"automatic": {}},
        # Optional. Labels to associate with the secret.
        "labels": {"type": "api_key", "provider": "anthropic"},
        # Optional. The secret's time-to-live in seconds with format (e.g.,
        # "900s" for 15 minutes). If specified, the secret versions will be
        # automatically deleted upon reaching the end of the TTL period.
        "ttl": "TTL",
    },
})

anthropic_api_key = "API_KEY"  # The secret to be stored.
payload_bytes = anthropic_api_key.encode("UTF-8")
# Optional. Calculate payload checksum.
crc32c = google_crc32c.Checksum()
crc32c.update(payload_bytes)

version = client.add_secret_version(request={
    "parent": secret.name,
    "payload": {
        "data": payload_bytes,
        "data_crc32c": int(crc32c.hexdigest(), 16),  # Optional.
    },
})
print(f"Added secret version: {version.name}")

シークレットを取得する

コンソール

  1. [Secret Manager] ページに移動します。

    Secret Manager に移動

  2. [Secret Manager] ページで、記述するシークレットの名前をクリックします。

  3. [シークレットの詳細] ページにシークレットに関する情報が一覧表示されます。

gcloud

まず、インストールして初期化 します。gcloud CLI次のコマンドを実行します。

gcloud secrets versions describe VERSION_ID --secret=SECRET_ID

ここで

  • VERSION_ID はシークレット バージョンの ID です。
  • SECRET_ID は、シークレットの ID またはシークレットの完全修飾された識別子です。

詳細については、Secret Manager のドキュメント、 または CLI リファレンスをご覧ください。

Python

まず、次のコマンドを実行してクライアント ライブラリをインストールします。

pip install google-cloud-secret-manager

次に、認証を行い、 次のコマンドを実行します。

from google.cloud import secretmanager

client = secretmanager.SecretManagerServiceClient()
name = client.secret_path("PROJECT_ID", "SECRET_ID")
response = client.get_secret(request={"name": name})

シークレットの一覧表示

コンソール

  1. [Secret Manager] ページに移動します。

    Secret Manager に移動

  2. [シークレット] テーブルで、[フィルタ] フィールドをクリックします。

  3. フィルタ プロパティとその対応する値を選択します(例: Location:asia-east1)。

  4. 入力した値に基づいて、テーブルが自動的にフィルタされます。

  5. (省略可)シークレット バージョンをフィルタするには、シークレットを選択してそのバージョンにアクセスし、[バージョン] テーブルの [フィルタ] オプションを使用します。

gcloud

まず、インストールして初期化 します。gcloud CLI

プロジェクトのすべてのシークレットを一覧表示するには、次のコマンドを実行します。

gcloud secrets list --filter="FILTER"

ここで、FILTER は文字列(name:asecret OR name:bsecret など) または正規表現(name ~ "secret_ab.*" など)です。

シークレットのすべてのバージョンを一覧表示するには、次のコマンドを実行します。

gcloud secrets versions list SECRET_ID

ここで、SECRET_ID は、シークレットの ID またはシークレットの完全修飾識別子です。

詳細については、シークレットのフィルタリングとシークレット バージョンの一覧表示に関する Secret Manager のドキュメント、またはシークレットとシークレット バージョンをそれぞれ一覧表示する CLI リファレンスをご覧ください。

Python

まず、次のコマンドを実行してクライアント ライブラリをインストールします。

pip install google-cloud-secret-manager

次に、認証を行い、 次のコマンドを実行します。

from google.cloud import secretmanager
client = secretmanager.SecretManagerServiceClient()
for secret in client.list_secrets(request={
    "parent": "projects/PROJECT_ID",
    "filter": "FILTER", # e.g. "labels.provider=anthropic"
}):
    print(f"Found secret: {secret.name}")

シークレットを更新する

コンソール

  1. [Secret Manager] ページに移動します。

    Secret Manager に移動

  2. [Secret Manager] ページで、シークレットの名前の横にあるチェックボックスをオンにします。

  3. [情報パネル] が閉じている場合は、[情報パネルを表示] をクリックして表示します。

  4. 情報パネルで、[ラベル] タブを選択します。

  5. [ラベルを追加] をクリックし、ラベルのキーと値を入力します。

  6. [保存] をクリックします。

gcloud

まず、インストールして初期化 します。gcloud CLI次のコマンドを実行します。

gcloud secrets update SECRET_ID --update-labels=KEY=VALUE

ここで

  • SECRET_ID は、シークレットの ID またはシークレットの完全修飾識別子です。
  • KEY はラベルキーです。
  • VALUE はラベルの対応する値です。

詳細については、Secret Manager のドキュメントまたは CLI リファレンスをご覧ください。

Python

まず、次のコマンドを実行してクライアント ライブラリをインストールします。

pip install google-cloud-secret-manager

次に、認証を行い、 次のコマンドを実行します。

from google.cloud import secretmanager
client = secretmanager.SecretManagerServiceClient()
name = client.secret_path("PROJECT_ID", "SECRET_ID")
response = client.update_secret(request={
    "secret": {
        "name": name,
        "labels": {"type": "api_key", "provider": "anthropic"}, # updated labels
    },
    "update_mask": {"paths": ["labels"]},
})
print(f"Updated secret: {response.name}")

シークレットを削除する

コンソール

  1. [Secret Manager] ページに移動します。

    Secret Manager に移動

  2. [Secret Manager] ページのシークレットの [アクション] 列で、[もっと見る] をクリックします。

  3. 表示されるメニューで [削除] をクリックします。

  4. [シークレットの削除] ダイアログで、シークレットの名前を入力します。

  5. [シークレットを削除] ボタンをクリックします。

gcloud

まず、インストールして初期化 します。gcloud CLI

シークレット バージョンを削除するには、次のコマンドを実行します。

gcloud secrets versions destroy VERSION_ID --secret=SECRET_ID

ここで

  • VERSION_ID はシークレット バージョンのリソース名です。
  • SECRET_ID は、シークレットの ID またはシークレットの完全修飾された識別子です。

シークレットとそのすべてのバージョンを削除するには、次のコマンドを実行します。

gcloud secrets delete SECRET_ID

ここで、SECRET_ID は、シークレットの ID またはシークレットの完全修飾識別子です。

詳細については、シークレットを削除してシークレット バージョンを破棄する Secret Manager のドキュメント、またはシークレットを削除してシークレット バージョンを破棄する CLI リファレンスをご覧ください。

Python

まず、次のコマンドを実行してクライアント ライブラリをインストールします。

pip install google-cloud-secret-manager

次に、認証を行い、 次のコマンドを実行します。

from google.cloud import secretmanager
client = secretmanager.SecretManagerServiceClient()
name = client.secret_path("PROJECT_ID", "SECRET_ID")
client.delete_secret(request={"name": name})

OAuth クライアントと認証情報

クライアント ID は、Google の OAuth サーバーで単一のエージェントを識別するために使用されます。エージェントが複数のプラットフォームで実行される場合、各プラットフォームに独自のクライアント ID が必要になります。OAuth ベースのエージェントを統合する大まかな手順は次のとおりです。

  1. OAuth クライアントと認証情報を作成します。

  2. クライアント ID とシークレットを Secret Manager に保存します(シークレットを作成するをご覧ください)。

  3. 開発中にエージェントのシークレットにアクセスします。

OAuth クライアント認証情報を作成する

  1. コンソールで、[Google Auth Platform] > [クライアント] ページに移動します。 Google Cloud

    Google Auth Platform > クライアントに移動

  2. (必要に応じて)画面に「Google Auth Platform はまだ構成されていません」と表示されたら、[スタートガイド] をクリックして、[プロジェクト構成] に入力します(後で更新できます)。本番環境の準備の詳細については、OAuth 2.0 ポリシーの遵守をご覧ください。

  3. [クライアントを作成] をクリックします。

  4. [アプリケーションの種類] を Web application に設定します。

  5. OAuth クライアントの名前を OAUTH_CLIENT_DISPLAY_NAME に設定します。

  6. [承認済みのリダイレクト URI] に、REDIRECT_URI の URI を追加します。

  7. [クライアント シークレット] で、[JSON をダウンロード] ボタンをクリックします。次の内容の client_secret.json ファイルがダウンロードされます。

{'web': {
    'client_id': "CLIENT_ID",
    'client_secret': "CLIENT_SECRET",
    'project_id': "PROJECT_ID",
    'redirect_uris': [REDIRECT_URIs],
    'auth_uri': 'https://accounts.google.com/o/oauth2/auth',
    'token_uri': 'https://www.googleapis.com/oauth2/v3/token',
    'auth_provider_x509_cert_url': 'https://www.googleapis.com/oauth2/v1/certs',
    'javascript_origins': "JAVASCRIPT_ORIGINS",  # Optional.
}}
  1. クライアント ID とシークレットを Secret Manager に保存します(例:)。
from google.cloud import secretmanager
import google_crc32c
import json

client = secretmanager.SecretManagerServiceClient()
secret = client.create_secret(request={
    "parent": "projects/PROJECT_ID",
    "secret_id": "OAUTH_SECRET_ID", # e.g. "oauth-client-demo"
    "secret": {
        "labels": {"type": "oauth_client"},
        "replication": {"automatic": {}},
    },
})

payload_bytes = json.dumps(cred).encode("UTF-8")
crc32c = google_crc32c.Checksum()
crc32c.update(payload_bytes)

client.add_secret_version(request={
    "parent": secret.name,
    "payload": {
        "data": payload_bytes,
        "data_crc32c": int(crc32c.hexdigest(), 16),
    },
})

OAuth クライアントのリストを取得する

  1. コンソールで、[Google Auth Platform] > [クライアント] ページに移動します。このページには、OAuth クライアント認証情報が一覧表示されます。 Google Cloud

    Google Auth Platform > クライアントに移動

OAuth クライアントを削除する

  1. コンソールで、[Google Auth Platform] > [クライアント] ページに移動します。 Google Cloud

    Google Auth Platform > クライアントに移動

  2. 削除する OAuth クライアント認証情報を選択し、[削除] をクリックします。

顧客管理の暗号鍵(CMEK)

デフォルトでは、 Google Cloud は、保存されているデータを自動的に暗号化します Google が管理する暗号鍵を使用して。データを保護する鍵について特定のコンプライアンスや 規制の要件がある場合は、デプロイされた エージェントに 顧客管理の暗号鍵(CMEK)を使用できます。

Gemini Enterprise Agent Platform で CMEK を使用するための一般的な要件とガイダンスについては、Gemini Enterprise Agent Platform の CMEK のドキュメントをご覧ください。以下が含まれます。

  • プロジェクトの設定(課金と有効な API)
  • キーリングと鍵の作成
  • 必要な権限付与

エージェントで CMEK を有効にするには、Agent Platform インスタンスの作成時に Cloud KMS 鍵で encryption_spec を指定する必要があります。コードサンプルについては、顧客管理の暗号鍵を構成するをご覧ください。

制限事項

Agent Runtime で CMEK を使用する場合、次の制限が適用されます。

  • マルチリージョン鍵は使用できません: 単一リージョン鍵のみがサポートされています。キーリングと鍵のリージョンは、Agent Platform インスタンスと同じである必要があります。

  • CMEK インスタンスの暗号鍵を更新できません: CMEK 鍵を使用してエージェントをデプロイすると、そのデプロイの暗号鍵を変更できません。新しい鍵を使用するには、新しい Agent Platform インスタンスをデプロイする必要があります。

  • 特定のメタデータとオペレーション データは鍵で暗号化されません: CMEK は、エージェントのコアデータを保存時に暗号化します。ただし、特定のメタデータとランタイム オペレーション データは鍵で暗号化されません 。代わりに、Google のデフォルトの暗号化を使用して暗号化されます。以下に例を示します。

    • エージェントのメタデータ:
      • 表示名
      • 説明
    • ランタイム オペレーション データ:
      • サービス アカウントのメールアドレス
      • エージェント オブジェクト クラス メソッド名
      • 環境変数

VPC Service Controls(VPC-SC)

Agent Runtime は、VPC Service Controls データ セキュリティを強化し、データの引き出しのリスクを軽減するために、をサポートしています。

VPC Service Controls が構成されている場合、デプロイされたエージェントは、BigQuery API、Cloud SQL Admin API、Agent Platform API などの Google API とサービスへの安全なアクセスを維持し、定義された境界内でのシームレスなオペレーションを確認します。 VPC Service Controls は、すべての公共のインターネット アクセスを効果的にブロックし、データ移動を承認済みネットワーク境界内に制限することで、企業のセキュリティ ポスチャーを大幅に強化します。

使用可能なデプロイ オプションは、エージェントをデプロイする に記載されています。デプロイ オプションに応じて、次の上り(内向き)ルールを構成する必要があります。

  • pickle ベースのデプロイの場合、storage.googleapis.com サービスと artifactregistry.googleapis.com サービスへの上り(内向き)トラフィックが必要です。
  • ソースベースのデプロイ、Git ベースのデプロイ、Bring Your Own Dockerfile(BYOD)デプロイの場合、artifactregistry.googleapis.com サービスへの上り(内向き)トラフィックが必要です。
  • Bring Your Own Container(BYOC)デプロイの場合、追加の上り(内向き)ルールは必要ありません。

制限事項

VPC Service Controls は Agent Gateway ではサポートされていません。

ただし、カスタム組織のポリシー制約を使用して、エージェントに関連付けることができるゲートウェイを制限できます。詳細については、 「Agent Gateway を介してトラフィックをルーティングする 」をご覧ください。