エージェントを共有する

このページでは、ユーザーまたはサービス アカウントに Identity and Access Management の権限を付与して、プロジェクト内の単一のエージェントを共有する方法について説明します。

エージェントを共有するには、特定のエージェント リソースに対する aiplatform.reasoningEngines.query 権限を付与します。

エージェントを共有する場合

エージェントを共有すると、複数のユーザーまたは自動化されたシステムがエージェントにクエリを実行できます。 エージェントを共有する一般的なシナリオは次のとおりです。

  • コラボレーション: エージェントをチームや 組織の他のメンバーと共有して、タスクに使用します。
  • アプリケーション統合: サービス アカウントにアクセス権を付与して、 内部チャットボットやカスタマー サポート ポータルなどのカスタム アプリケーションがエージェントを呼び出して特定のユーザー リクエストを処理できるようにします。
  • エージェント間通信: マルチエージェント システムでは、1 つのエージェントが別のエージェントを呼び出して情報を取得したり、サブタスクを委任したりすることが 必要になる場合があります。
  • 情報アクセス: 基盤となるデータソースに直接アクセス権を付与することなく、 会話型インターフェースを介してデータへの制御されたアクセスを ユーザーに提供します。たとえば、ナレッジベース(人事ポリシーや技術ドキュメントなど)に接続されたエージェントをすべての従業員と共有します。

始める前に

  1. 共有するエージェントを特定します。エージェントのプロジェクト ID と Reasoning Engine ID が必要です。
  2. アクセス権を付与するユーザーまたはサービス アカウントを特定します。

ステップ 1: カスタムロールを作成する

最小権限の原則に従って、aiplatform.reasoningEngines.query 権限のみを含むカスタムロールを作成します。

gcloud

プロジェクトにカスタムロールを作成するには、次のコマンドを実行します。

gcloud iam roles create ROLE_ID  --project=PROJECT_ID \
  --title="ROLE_TITLE" \
  --description="ROLE_DESCRIPTION" \
  --permissions=aiplatform.reasoningEngines.query

または、組織全体にロールを作成するには、次のようにします。

gcloud iam roles create ROLE_ID --organization=ORGANIZATION_ID \
  --title="ROLE_TITLE" \
  --description="ROLE_DESCRIPTION" \
  --permissions=aiplatform.reasoningEngines.query

次のように置き換えます。

  • ROLE_ID: ロールの ID(agentUser など)。
  • ROLE_TITLE: ロールのタイトル(Agent runtime user など)。
  • ROLE_DESCRIPTION: ロールの簡単な説明(Allows querying agents など)。
  • PROJECT_ID: プロジェクト ID。
  • ORGANIZATION_ID: 組織 ID。

Terraform

Terraform を使用してカスタムロールを作成するには、google_project_iam_custom_role リソースを使用します。

resource "google_project_iam_custom_role" "reasoning_engine_query" {
role_id     = "ROLE_ID"
title       = "ROLE_TITLE"
project     = "PROJECT_ID"
permissions = ["aiplatform.reasoningEngines.query"]
}

次のように置き換えます。

  • ROLE_ID: ロールの ID(agentUser など)。
  • ROLE_TITLE: ロールのタイトル(Agent runtime user など)。
  • PROJECT_ID: プロジェクト ID。

カスタムロール名は projects/PROJECT_ID/roles/ROLE_ID または organizations/ORGANIZATION_ID/roles/ROLE_ID になります。

ステップ 2: エージェントにロールを付与する

ロールが作成されたら、ロールをエージェントにバインドし、権限を付与するユーザーまたはサービス アカウントを指定します。

Python

Python を使用してロールを付与するには、google-cloud-aiplatform ライブラリを使用します。

from google.cloud.aiplatform_v1 import ReasoningEngineServiceClient
from google.api_core.client_options import ClientOptions

# Initialize the client
client = ReasoningEngineServiceClient(
  client_options=ClientOptions(api_endpoint="LOCATION-aiplatform.googleapis.com")
)

# Define the resource path
resource = "projects/PROJECT_ID/locations/LOCATION/reasoningEngines/REASONING_ENGINE_ID"

# Get the current IAM policy and add the new binding
policy = client.get_iam_policy(request={"resource": resource})
binding = policy.bindings.add()
binding.role = "projects/PROJECT_ID/roles/ROLE_ID"
binding.members.append("USER_OR_SA")

# Update the IAM policy on the resource
client.set_iam_policy(request={"resource": resource, "policy": policy})

次のように置き換えます。

  • LOCATION: エージェントがデプロイされているリージョン(us-central1 など)。
  • PROJECT_ID: プロジェクト ID。
  • REASONING_ENGINE_ID: エージェントの Reasoning Engine ID。
  • ROLE_ID: ロールの ID(agentUser など)。
  • USER_OR_SA: ユーザーのメールアドレスまたはサービス アカウント(user:someone@example.comserviceAccount:my-sa@my-project.iam.gserviceaccount.com など)。

Terraform

Terraform を使用してロールを付与するには、google_vertex_ai_reasoning_engine_iam_member リソースを使用します。

resource "google_vertex_ai_reasoning_engine_iam_member" "example" {
project          = "PROJECT_ID"
region           = "REGION"
reasoning_engine = google_vertex_ai_reasoning_engine.my_engine.name
role             = google_project_iam_custom_role.reasoning_engine_query.name
member           = "USER_OR_SA"
}

次のように置き換えます。

  • PROJECT_ID: プロジェクト ID。
  • REGION: リージョン。
  • USER_OR_SA: ユーザーまたはサービス アカウント。

セキュリティ上の考慮事項

エージェントへのアクセス権を付与すると、エージェントの FastAPI エンドポイントにメッセージを直接送信できます。セキュリティ保証は、受信エージェントのコードによって決まります。

  • 信頼できるフロントエンド: ほとんどのデフォルト ADK エージェントは、信頼できる フロントエンドから動作します。エージェントはフロントエンド コマンドを信頼するため、フロントエンドはセッションとユーザーを完全に制御できます。このような場合は、信頼できないエンティティにエージェントへの直接アクセス権を付与しないでください。
  • A2A エージェント: Agent2Agent(A2A)エージェントなどの他のエージェントは、独自の認証と 認可を実装している場合、信頼できないエンティティに 公開される可能性があります。エージェント ランタイムは、エージェント インターフェースへの粗いアクセス制御のみを提供します。