סקירה כללית
זהות הסוכן מספקת זהות לכל סוכן, שמאפשרת גישה של הרשאה מינימלית וקשורה למחזור החיים של הסוכן. לכן, זהות הסוכן היא חשבון משתמש מאובטח יותר מחשבונות שירות. אמצעי הבקרה הקיימים לניהול גישה באמצעות IAM תומכים בזהות של סוכן, כדי לאפשר ניהול חזק.
פרטי הכניסה של סוכן מוגנים כברירת מחדל באמצעות מדיניות של בקרת גישה מבוססת-הקשר (CAA) שמנוהלת על ידי Google. המדיניות הזו אוכפת קישור mTLS כדי להבטיח שאפשר להשתמש באישורים של הסוכן בצורה של אסימונים שקשורים לאישור רק בסביבת זמן הריצה המיועדת והמהימנה (לדוגמה, קונטיינר של Cloud Run). הגדרת בסיס האבטחה הזו מונעת שימוש חוזר בפרטי כניסה גנובים, ומגנה מפני גניבת פרטי כניסה והשתלטות על חשבונות (ATO).
בדף הזה מפורטים הנושאים הבאים:
יצירת סוכן עם זהות סוכן: יצירת סוכן כך שהסוכן יקבל באופן אוטומטי זהות ייחודית כשפורסים אותו ב-Agent Runtime.
אישור גישה ל- Google Cloud API באמצעות זהות הסוכן: שימוש בזהות הסוכן שהוקצתה כדי לאשר או לדחות את הגישה של הסוכן לכלים, לממשקי API ולמשאבים של צד ראשון ב- Google Cloud. הגישה כוללת גם סוכנים אחרים שמארחים ב-Agent Runtime באמצעות פרוטוקול Agent2Agent (A2A).
תיעוד פעילות הסוכן: הצגת זהות הסוכן ביומנים בשירותי Google Cloud . בתהליכי עבודה שמוקצים למשתמש, ביומנים מוצגים גם זהות המשתמש וגם זהות הסוכן.
רשימת הסוכנים וזהות הסוכן: הצגת רשימת הסוכנים והזהויות שלהם ב-Agent Runtime.
ביטול ההסכמה לבקרת גישה מבוססת-הקשר (לא מומלץ): ביטול ההסכמה למדיניות ברירת המחדל של בקרת הגישה מבוססת-הקשר (CAA).
מגבלות
אי אפשר להעניק זהויות של סוכנים תפקידים של קטגוריות מדור קודם (storage.legacyBucketReader, storage.legacyBucketWriter או storage.legacyBucketOwner) בקטגוריות של Cloud Storage.
יצירת סוכן עם זהות סוכן
כשיוצרים מופע של Agent Runtime, אפשר להקצות לסוכנים שפורסים ל-Agent Runtime זהות ייחודית. הזהות קשורה למזהה משאב הסוכן של Agent Runtime והיא לא תלויה במסגרת הסוכן שבה השתמשתם כדי לפתח את הסוכן.
כשיוצרים זהות של סוכן, יש לכם את האפשרויות הבאות:
יצירת מופע של Agent Runtime בלי לפרוס קוד של סוכן: אם רוצים להגדיר מדיניות IAM לפני פריסת הסוכן, אפשר ליצור זהות של סוכן בלי לפרוס את קוד הסוכן. כדי לעשות זאת, יוצרים מופע של Agent Runtime עם השדה
identity_typeבלבד:import vertexai from vertexai import agent_engines from vertexai import types client = vertexai.Client( project=PROJECT_ID, location=LOCATION, http_options=dict(api_version="v1beta1") ) remote_app = client.agent_engines.create( config={ "display_name": "identity-for-agent", "identity_type": types.IdentityType.AGENT_IDENTITY, }, )אחרי שיוצרים את מופע Agent Runtime עם זהות הסוכן, אפשר להוסיף קוד לסוכן באמצעות
agent_engine.update(...).יצירת מופע של Agent Runtime במהלך פריסת קוד הסוכן: אם רוצים להקצות את זהות הסוכן במהלך פריסת קוד הסוכן, צריך להשתמש ב-Agent Platform SDK for Python ובדגל
identity_type=AGENT_IDENTITY.מגדירים את הסוכן במסגרת המועדפת:
from google.adk.agents import Agent agent = Agent( model="gemini-2.5-flash", name="minimal_agent", instruction="You are a helpful assistant.", )לאחר מכן, פורסים אותו:
import vertexai from vertexai import types from vertexai.agent_engines import AdkApp # Initialize the Agent Platform client with v1beta1 API for agent identity support client = vertexai.Client( project=PROJECT_ID, location=LOCATION, http_options=dict(api_version="v1beta1") ) # Use the proper wrapper class for your Agent Framework app = AdkApp(agent=agent) # Deploy the agent with Agent Identity remote_app = client.agent_engines.create( agent=app, config={ "display_name": "running-agent-with-identity", "identity_type": types.IdentityType.AGENT_IDENTITY, "requirements": ["google-cloud-aiplatform[adk,agent_engines]"], "staging_bucket": f"gs://"BUCKET_NAME", }, ) print(f"Effective Identity: {remote_app.api_resource.spec.effective_identity}")כאשר BUCKET_NAME הוא השם של הקטגוריה ב-Cloud Storage.
פריסת סוכנים באמצעות Agents CLI: Agents CLI הוא כלי אידיאלי ללומדים, ליצירת אב טיפוס ולבדיקות מהירות, כי הוא מציע פתרון פריסה מהיר עם משאבים בסיסיים למעקב. הפקודה הבאה פורסת את הסוכן:
agents-cli deploy --agent-identityפריסת סוכנים עם זהות סוכן באמצעות ADK deploy: הגדרת הסוכן באמצעות ADK. לפני שמריצים את הפקודה
adk deploy, מריצים את הפקודות הבאות בתיקייה של הסוכן כדי להוסיף קובץ הגדרות עם זהות הסוכן.# Create the file $ touch .agent_engine_config.json # Update the file to specify that you're using Agent Identity $ echo '{ "identity_type": "AGENT_IDENTITY" }' > .agent_engine_config.json
מופע Agent Runtime נוצר עם זהות סוכן שאומתה על ידי המערכת וזמינה לקריאה בלבד (מזהה חשבון ראשי):
# Agent identity Format
principal://TRUST_DOMAIN/NAMESPACE/AGENT_NAME
# Example agent identity
principal://agents.global.org-ORGANIZATION_ID.system.id.goog/resources/aiplatform/projects/PROJECT_NUMBER/locations/LOCATION/reasoningEngines/AGENT_ENGINE_ID
החלקים הבאים מוקצים לכם אוטומטית כחלק מזהות הסוכן:
TRUST_DOMAIN: דומיין מהימן מוקצה לכם כשאתם מפעילים את Agent Platform API:
אם יש לכם ארגון, דומיין מהימן נוצר ברמת הארגון בפורמט
agents.global.org-ORGANIZATION_ID.system.id.goog.אם לפרויקט אין ארגון, נוצר דומיין מהימן ברמת הפרויקט בפורמט
agents.global.proj-PROJECT_NUMBER.system.id.goog.
NAMESPACE: נתיב המשאב הקבוע של הסוכן.
AGENT_NAME: הערך הקבוע
agent-reasoning-engine-id.
זהות הסוכן מבוססת על SPIFFE. אנחנו גם מקצים ומנהלים באופן אוטומטי אישור x509 בסוכן עם אותה זהות לאימות מאובטח. כברירת מחדל, לסוכן יש גישה לרישום הפעולות שלו, למדדים, לגישה למודל, לסשנים, לזיכרונות ולסביבות ארגז חול (גרסת טרום-השקה).
לזהויות של סוכנים מוקצים כברירת מחדל התפקידים roles/aiplatform.agentContextEditor ו-roles/aiplatform.agentDefaultAccess, כדי שלסוכנים יהיו הרשאות בסיסיות להפעלה.
אפשר לראות את הזהות דרך מסוף Agent Runtime Google Cloud וה-API.
גישה Google Cloud לממשקי API ולשירותים באמצעות זהות הסוכן
אחרי שיוצרים סוכן עם זהות סוכן, אפשר להעניק או לדחות את הגישה של הסוכן ל- Google Cloud API ולשירותים באמצעות מדיניות IAM הבאה:
מדיניות הרשאות: מעניקה לסוכן גישה למשאב Google Cloud .
כללי מדיניות דחייה: דחיית הגישה של סוכן ל Google Cloud משאב.
הענקת גישה לסוכן
מעניקים הרשאות IAM לזהות הסוכן. אנחנו ממליצים על התפקידים הבאים:
roles/aiplatform.expressUser: מתן גישה להסקת מסקנות, להפעלת סשנים ולזיכרון.
roles/serviceusage.serviceUsageConsumer: מעניקים לסוכן הרשאה להשתמש במכסה של הפרויקט וב-Agent Platform SDK.
roles/browser: הענקת גישה לפונקציות Google Cloud בסיסיות.
יכול להיות שתצטרכו הרשאות נוספות אם אתם משתמשים ברישום ביומן, במדדים ובמאגר של Cloud API, וגם לכל משאב אחר שאתם רוצים לחשוף לסוכן שלכם. דוגמאות נוספות מופיעות בהמשך.
יוצרים מדיניות הרשאה ב-IAM כדי להעניק לסוכן תפקיד ב-IAM:
# Example: Grant the agent access to vision API.
gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \
--member="principal://agents.global.org-ORGANIZATION_ID.system.id.goog/resources/aiplatform/projects/PROJECT_NUMBER/locations/LOCATION/reasoningEngines/AGENT_ENGINE_ID" \
--role="ROLE_NAME" \
מחליפים את מה שכתוב בשדות הבאים:
RESOURCE_TYPE: סוג המשאב (לדוגמה,
projectsאוorganizations).RESOURCE_ID: המזהה של המשאב שרוצים להעניק לו גישה.
ORGANIZATION_ID: המזהה של הארגון.
PROJECT_NUMBER: מספר הפרויקט.
LOCATION: האזור שלכם. אזורים נתמכים ב-Runtime
AGENT_ENGINE_ID: מזהה המשאב של מופע Agent Runtime.
ROLE_NAME: שם התפקיד שרוצים להעניק. לדוגמה,
roles/vision.user. רשימה של תפקידים מוגדרים מראש מופיעה במאמר הסבר על תפקידים.
אחרי שמגדירים את IAM, Application Default Credentials ב-Agent Platform SDK משתמשים אוטומטית בזהות של הסוכן כדי לבצע אימות למשאבים ב-Google Cloud .
הענקת גישה לכמה סוכנים
אתם יכולים להקצות תפקיד IAM לכל הסוכנים של Agent Runtime בפרויקט מסוים או בארגון שלם.
כדי להעניק תפקיד לכל הסוכנים של Agent Runtime בפרויקט, משתמשים באחת מהפקודות הבאות.
אם הפרויקט שייך לארגון:
# Grant all agents in a project the following role
gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \
--member="principalSet://agents.global.org-ORGANIZATION_ID.system.id.goog/attribute.platformContainer/aiplatform/projects/PROJECT_NUMBER" \
--role="ROLE_NAME"
אם הפרויקט לא שייך לארגון:
# Grant all agents in an orgless project the following role
gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \
--member="principalSet://agents.global.proj-PROJECT_NUMBER.system.id.goog/attribute.platformContainer/aiplatform/projects/PROJECT_NUMBER" \
--role="ROLE_NAME"
כדי לפשט את הפריסות, לפעמים כדאי להעניק הרשאות נפוצות כמו הרשאה לשימוש במכסות, הרשאה לרישום ביומן או הרשאת גישה למודלים לכל הסוכנים בפרויקט. לאחר מכן, מעניקים הרשאות ספציפיות מצומצמות לסוכנים בודדים להרשאות רגישות יותר, כמו גישה לנתונים. אפשר לתת הרשאות כאלה בכל שלב אחרי השימוש הראשון בתכונת זהות הסוכן בארגון או בפרויקט, כך שאפשר לבצע את הפעולה לפני פריסת הסוכן.
לדוגמה, הפקודות הבאות מקצות תפקידים בסיסיים לכל הסוכנים בפרויקט:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="principalSet://agents.global.org-ORGANIZATION_ID.system.id.goog/attribute.platformContainer/aiplatform/projects/PROJECT_NUMBER" \
--role=roles/serviceusage.serviceUsageConsumer
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="principalSet://agents.global.org-ORGANIZATION_ID.system.id.goog/attribute.platformContainer/aiplatform/projects/PROJECT_NUMBER" \
--role=roles/browser
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="principalSet://agents.global.org-ORGANIZATION_ID.system.id.goog/attribute.platformContainer/aiplatform/projects/PROJECT_NUMBER" \
--role=roles/aiplatform.expressUser
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="principalSet://agents.global.org-ORGANIZATION_ID.system.id.goog/attribute.platformContainer/aiplatform/projects/PROJECT_NUMBER" \
--role=roles/cloudapiregistry.viewer
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="principalSet://agents.global.org-ORGANIZATION_ID.system.id.goog/attribute.platformContainer/aiplatform/projects/PROJECT_NUMBER" \
--role=roles/logging.logWriter
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="principalSet://agents.global.org-ORGANIZATION_ID.system.id.goog/attribute.platformContainer/aiplatform/projects/PROJECT_NUMBER" \
--role=roles/monitoring.metricWriter
כדי להעניק תפקיד לכל הסוכנים של Agent Runtime בארגון:
# Grant all agents in an organization the following role
gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \
--member="principalSet://agents.global.org-ORGANIZATION_ID.system.id.goog/attribute.platform/aiplatform" \
--role="ROLE_NAME"
דחיית הגישה של סוכן
כדי לדחות את הגישה של סוכן למשאבים, אפשר להשתמש במדיניות הדחייה של IAM או להגדיר מדיניות לקביעת גבול הגישה לחשבונות משתמשים.
דחיית הגישה של הסוכן למשאבים מסוימים באמצעות מדיניות הדחייה ב-IAM.
// Deny policy (deny all agents across the org from ability to create or delete buckets) { "displayName": "Deny access to bucket for all agent identities in the org", "rules": [ { "denyRule": { "deniedPrincipals": [ "principalSet://<org.id>.global.agent.id.goog/*" ], "deniedPermissions": [ "iam.googleapis.com/roles.create", "storage.googleapis.com/buckets.delete" ] } } ] }מגדירים את תחום הגישה של החשבון הראשי כדי להגביל את המשאבים שהסוכן יכול לגשת אליהם, למרות הרשאות אחרות שיש לסוכן:
// PAB Policy (Only allow agents to operate within resource boundary) { "name":"organizations/ORGANIZATION_ID/locations/global/principalAccessBoundaryPolicies/example-policy", "details": { "rules": [ { "description": "Restrict agent identity inside a folder", "resources": [ "//cloudresourcemanager.googleapis.com/folder/0123456789012" ], "effect": "ALLOW" } ], } } // Bind PAB policy to all identities in the organization (incl agent id) gcloud iam principal-access-boundary-policies bindings create example-pab-binding \ --organization=organizations/ORGANIZATION_ID \ --policy=example-policy \ --target-principal-set=cloudresourcemanager.googleapis.com/organizations/ORGANIZATION_ID
הנחיות לגבי CI/CD ואוטומציה
בצינורות עיבוד נתונים לפריסה אוטומטית שמוחקים ויוצרים מחדש סוכנים (כמו פריסות כחולות-ירוקות, סביבות בדיקה זמניות או תהליכי עבודה של Terraform), יכול להיות שתהיה אובדן גישה שקט בזמן הריצה. מכיוון שכל פריסה מחדש יוצרת משאב reasoningEngines חדש עם מזהה ייחודי, הסוכן מקבל מזהה ראשי חדש. הרשאות קודמות ב-IAM שניתנו לישות הקודמת לא עוברות בירושה לישות החדשה.
כדי לנהל הרשאות בצינורות אוטומטיים, אפשר להשתמש באסטרטגיות הבאות:
אחזור דינמי של מזהה הישות המורשית החדשה: צריך לתעד את הערך
spec.effectiveIdentityמהתגובה של הפריסה, או לשלוח שאילתה ל-API בארכיטקטורת REST אחרי הפריסה כדי לקבל את הזהות הפעילה של הסוכן. מחילים את הקישורים הנדרשים של IAM על הגורם החדש הזה כשלב אחרי הפריסה.לדוגמה, אפשר לשלוח שאילתה לגבי הזהות הפעילה עם
gcloudבאמצעות הפקודה הבאה:gcloud ai reasoning-engines describe RESOURCE_ID \ --project=PROJECT_ID \ --location=LOCATION \ --format="value(spec.effectiveIdentity)"ב-Terraform, אפשר ליצור באופן דינמי את הזהות העיקרית של הסוכן ממזהה המשאב
google_vertex_ai_reasoning_engineשנפרס, ולהפנות אליה בקישורי IAM:resource "google_vertex_ai_reasoning_engine" "reasoning_engine" { provider = google-beta project = var.project_id region = var.region display_name = var.display_name description = var.agent_description spec { agent_framework = "google-adk" identity_type = "AGENT_IDENTITY" source_code_spec { inline_source { source_archive = filebase64(data.archive_file.agent_tarball.output_path) } python_spec { entrypoint_module = var.agent_python_spec.entrypoint_module entrypoint_object = var.agent_python_spec.entrypoint_object requirements_file = var.agent_python_spec.requirements_path version = var.agent_python_spec.version } } deployment_spec { env { name = "GOOGLE_CLOUD_AGENT_ENGINE_ENABLE_TELEMETRY" value = "true" } env { name = "OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT" value = "true" } } } } locals { agent_resource_id = element(split("/", google_vertex_ai_reasoning_engine.reasoning_engine.id), -1) agent_identity_principal = "principal://agents.global.org-${data.google_organization.org.org_id}.system.id.goog/resources/aiplatform/projects/${data.google_project.project.number}/locations/${var.region}/reasoningEngines/${local.agent_resource_id}" }שימוש ב-
principalSetsבהיקף הפרויקט להרשאות בסיסיות: מכיוון שקישוריprincipalSetמכוונים לכל הסוכנים בפרויקט, הם נשמרים גם אם הסוכן נמחק ונוצר מחדש. מקצים תפקידים נפוצים ולא רגישים (כמו שימוש בשירות, רישום ביומן והסקת מסקנות כללית של מודלים) ל-principalSetברמת הפרויקט במקום למנהלי סוכנים ספציפיים. הגבלת קשירתprincipal://של משתמשים בודדים למקורות נתונים רגישים מאוד.
תיעוד הפעילות של הסוכן
אם מפעילים את Cloud Logging, אפשר לראות את היומנים של הסוכן והמשתמשים שניגשו למשאב Google Cloud .
כשהנציג פועל בשם המשתמש, ביומנים מוצגים גם הזהות של הנציג וגם הזהות של המשתמש.
כשהסוכן פועל על סמך ההרשאה שלו, ביומנים מוצגת רק הזהות של הסוכן.
לפרט את רשימת הסוכנים והזהויות שלהם
אפשר לראות את רשימת הזהויות של הסוכנים ב-Agent Runtime באמצעות Google Cloud מסוף ושורת פקודה.
המסוף
- נכנסים לדף Deployments של Agent Platform במסוף Google Cloud .
סוכנים שפרסתם והם חלק מהפרויקט שנבחר יופיעו ברשימה. אפשר להשתמש בשדה Filter כדי לסנן את הרשימה לפי העמודה שצוינה.
בכל סוכן, זהות הסוכן מופיעה בעמודה זהות.
API בארכיטקטורת REST
אפשר לאחזר את זהות הסוכן כשמקבלים מופע של Agent Runtime באמצעות ה-API בארכיטקטורת REST.
התשובה כוללת את זהות הסוכן בפורמט הבא:
{
...
spec: {
"effectiveIdentity": "agents.global.org-ORGANIZATION_ID.system.id.goog/resources/aiplatform/projects/PROJECT_ID/locations/LOCATION/reasoningEngines/AGENT_ENGINE_ID"
}
...
}
במקרים של מופעי Agent Runtime שלא משתמשים בזהות סוכן, השדה effectiveIdentity מכיל את שם חשבון השירות או סוכן השירות שמשויך למופע Agent Runtime.
ביטול ההסכמה לשימוש בבקרת גישה מבוססת-הקשר (CAA)
כברירת מחדל, ניסיון להשתמש באסימון גישה מחוץ לסביבת זמן הריצה המיועדת של Agent Runtime מוביל לשגיאה הבאה:
Error Code: "401"
Error Details: "Context-Aware Access requirements are not met"
במקרים מיוחדים, כמו דרישות ספציפיות לשיתוף טוקנים בין סוכנים, אפשר לבטל את ההסכמה למדיניות ברירת המחדל של CAA. אנחנו לא ממליצים לבצע את הפעולה הזו, כי היא חושפת את הסוכן לגניבת פרטי כניסה.
כדי לבטל את ההסכמה למדיניות ברירת המחדל של בקרת הגישה מבוססת-הקשר (CAA), צריך להגדיר את משתנה הסביבה הבא כשיוצרים את מופע Agent Runtime:
config={
"env_vars": {
"GOOGLE_API_PREVENT_AGENT_TOKEN_SHARING_FOR_GCP_SERVICES": False,
}
}