בדף הזה מוסבר איך לנתב את התנועה של Agent Runtime דרך Agent Gateway. Agent Gateway הוא רכיב מרכזי של רשת ואבטחה בסביבה העסקית של Gemini Enterprise Agent Platform. הוא מספק קישוריות מאובטחת ומנוהלת לכל האינטראקציות של הסוכנים, בין אם הן מתרחשות בין משתמשים לסוכנים, בין סוכנים לכלים או בין הסוכנים עצמם.
לפני שמתחילים
חשוב לוודא שאתם מכירים את תהליך פריסת הסוכנים ב-Agent Runtime.
מידע ולמידה על Agent Gateway אתם יכולים להשתמש ב-Agent Gateway במצב "סוכן לכל מקום" (תעבורת נתונים יוצאת) כדי לאבטח ולנהל את כל התקשורת היוצאת עם תנועה יוצאת לכלים, למודלים, לממשקי API ולסוכנים אחרים. אתם משתמשים בשער במצב Client-to-Agent (כניסה) כדי לקבוע אילו לקוחות יכולים לגשת לסוכנים שלכם. השער מאפשר לכם לבחור אילו כללי מדיניות של IAP ואילו תבניות של Model Armor יחולו על האינטראקציות האלה.
מופע יחיד של זמן ריצה יכול להיות מקושר בו-זמנית גם לשער Agent-to-Anywhere (תעבורת נתונים יוצאת) וגם לשער Client-to-Agent (תעבורת נתונים נכנסת).
בודקים את המגבלות שקשורות לפריסות של סביבות זמן ריצה שמשויכות ל-Agent Gateway.
ניתוב התנועה של Agent Runtime דרך Agent Gateway
כדי לנתב את התנועה של Agent Runtime דרך Agent Gateway:
יצירת Agent Gateway
יוצרים משאב Agent Gateway ומצרפים אליו את כללי מדיניות ההרשאה לפי הצורך. אפשר ליצור שער במצב Agent-to-Anywhere (תעבורה יוצאת) או במצב Client-to-Agent (תעבורה נכנסת).
- במצב "מלקוח לסוכן" (ingress), צריך ליצור את הסוכן ואת השער באותו פרויקט ובאותו אזור.
- במצב "מסוכן לכל מקום" (תעבורת נתונים יוצאת), אפשר ליצור את השער בפרויקט אחר מזה של הסוכן, אבל צריך ליצור אותו באותו אזור. חשוב לזכור שכל הרישומים המשויכים ב-Agent Registry וקישורי מדיניות ה-IAM צריכים להיווצר באותו פרויקט כמו Agent Gateway.
הוראות מפורטות מופיעות במאמר הגדרת Agent Gateway.
מוודאים שהשער מוגדר בהתאם לצרכים של הפריסה. לדוגמה, אם הסוכן דורש גישה ל-LLM, צריך להגדיר את השער כך שיאפשר את הגישה הזו כדי למנוע כשלים פוטנציאליים בפריסה של Agent Runtime.
אופציונלי: הגדרת גישה לשער תעבורת נתונים יוצאת בפרויקטים שונים
אם שער ה-Agent-to-Anywhere (תעבורת נתונים יוצאת) נמצא בפרויקט אחר מזה של סוכן זמן הריצה, צריך לבצע את השלבים הבאים כדי לתת לסוכן השירות של זמן הריצה גישה לפרויקט של שער תעבורת הנתונים היוצאת:
gcloud
- יוצרים תפקיד IAM בהתאמה אישית בפרויקט של Agent Gateway:
gcloud iam roles create ar_agw_cross_project_sa \ --project=AGENT_GATEWAY_PROJECT_ID \ --title="Runtime Agent Gateway Cross-Project SA" \ --description="Custom role for the cross-project service agent to access Agent Gateway" \ --permissions="networkservices.agentGateways.get,networkservices.operations.get"
מחליפים את
AGENT_GATEWAY_PROJECT_IDבמזהה הפרויקט שבו נפרס Agent Gateway.- מקצים את התפקיד בהתאמה אישית בפרויקט של השער לסוכן השירות של Agent Runtime בפרויקט של הסוכן:
gcloud projects add-iam-policy-binding AGENT_GATEWAY_PROJECT_ID \ --member="serviceAccount:service-AGENT_RUNTIME_PROJECT_NUMBER@gcp-sa-aiplatform." \ --role="projects/AGENT_GATEWAY_PROJECT_ID/roles/ar_agw_cross_project_sa"
מחליפים את הערך
AGENT_RUNTIME_PROJECT_NUMBERבמספר הפרויקט שבו נפרס הסוכן של סביבת זמן הריצה.Terraform
כדי לתת גישה בין פרויקטים מכמה פרויקטים של עומסי עבודה של סביבת זמן ריצה לפרויקט מרכזי של Agent Gateway באופן הצהרתי, יוצרים את תפקיד ה-IAM בהתאמה אישית בפרויקט המרכזי של השער ונותנים אותו לסוכן השירות של סביבת זמן הריצה של כל פרויקט של עומס עבודה:
variable "runtime_project_numbers" { type = set(string) description = "Project numbers hosting cross-project Agent Runtime workloads" default = ["AGENT_RUNTIME_PROJECT_NUMBER"] } resource "google_project_iam_custom_role" "ar_agw_cross_project_sa" { project = "AGENT_GATEWAY_PROJECT_ID" role_id = "ar_agw_cross_project_sa" title = "Runtime Agent Gateway Cross-Project SA" description = "Custom role for cross-project service agents to access Agent Gateway" permissions = [ "networkservices.agentGateways.get", "networkservices.operations.get", ] } resource "google_project_iam_member" "ar_agw_cross_project_binding" { for_each = var.runtime_project_numbers project = "AGENT_GATEWAY_PROJECT_ID" role = google_project_iam_custom_role.ar_agw_cross_project_sa.name member = "serviceAccount:service-${each.value}@gcp-sa-aiplatform." }הגדרת הסוכן לניתוב תנועה דרך Agent Gateway
בהתאם לפריסה של סוכן חדש או להגדרה של סוכן קיים, בוחרים באחת מהאפשרויות הבאות:
לנציגים חדשים שמשתמשים ב-Python SDK
מציינים את משאב השער כשפורסים את הסוכן. לדוגמה, כדי לפרוס את הסוכן ב-Agent Runtime, משתמשים ב-
client.runtimes.createכדי להעביר את האובייקטlocal_agentיחד עם הגדרות אופציונליות.אם אתם רוצים להשתמש בתכונות של פלטפורמה מבוססת-שער כמו הגנה מוגברת על המודל או מדיניות פיקוח בשפה טבעית עם הנציג הזה, צריך להגדיר גם את
agent_gateway_configוגם אתidentity_type=AGENT_IDENTITYבקריאה ליצירה, כמו בדוגמה הזו. ה-backend אוכף אתidentity_type = "AGENT_IDENTITY"ברמת ה-API בכל פעם שצויןagent_gateway_config, וכתוצאה מכך אימות הפריסה נכשל אם הזהות של מכונת זמן הריצה הושמטה או הוגדרה באופן שגוי.מסוכן לכל מקום
remote_agent = client.runtimes.create( agent=local_agent, config={ "agent_gateway_config": { "agent_to_anywhere_config": {"agent_gateway": projects/AGENT_GATEWAY_PROJECT_ID/locations/REGION/agentGateways/AGENT_GATEWAY_TO_ANYWHERE_NAME} }, "identity_type": types.IdentityType.AGENT_IDENTITY, # Other optional configuration ... # "requirements": requirements, # "gcs_dir_name": gcs_dir_name, # https://docs.cloud.google.com/gemini-enterprise-agent-platform/scale/runtime/agent-identity#opt-out-caa "env_vars": { "GOOGLE_API_PREVENT_AGENT_TOKEN_SHARING_FOR_GCP_SERVICES": False, } }, )
מחליפים את מה שכתוב בשדות הבאים:
-
AGENT_GATEWAY_PROJECT_ID: מזהה הפרויקט שבו נפרס Agent Gateway -
REGION: האזור שבו נפרסים הסוכן והשער -
AGENT_GATEWAY_TO_ANYWHERE_NAME: השם של Agent Gateway שיצרתם במצב Agent-to-Anywhere (תעבורת נתונים יוצאת)
מהלקוח לנציג
remote_agent = client.runtimes.create( agent=local_agent, config={ "agent_gateway_config": { "client_to_agent_config": {"agent_gateway": projects/PROJECT_ID/locations/REGION/agentGateways/AGENT_GATEWAY_CLIENT_TO_AGENT_NAME} }, "identity_type": types.IdentityType.AGENT_IDENTITY, # Other optional configuration ... # "requirements": requirements, # "gcs_dir_name": gcs_dir_name, # https://docs.cloud.google.com/gemini-enterprise-agent-platform/scale/runtime/agent-identity#opt-out-caa "env_vars": { "GOOGLE_API_PREVENT_AGENT_TOKEN_SHARING_FOR_GCP_SERVICES": False, } }, )
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט שבו נפרסו הסוכן והשער -
REGION: האזור שבו נפרסים הסוכן והשער -
AGENT_GATEWAY_CLIENT_TO_AGENT_NAME: השם של Agent Gateway שיצרתם במצב Client-to-Agent (תעבורת נתונים נכנסת)
-
לסוכנים חדשים שמשתמשים ב-Terraform
כשמקצים את הנציג באמצעות Terraform, משתמשים בספק
google-betaומגדירים את הבלוקagent_gateway_configבתוך המשאבgoogle_vertex_ai_reasoning_engine. למידע נוסף על הגדרת Terraform, קראו את המאמר הקצאת נציגים באמצעות Terraform.מסוכן לכל מקום
כדי לשייך סוכן לשער Agent-to-Anywhere לתעבורת נתונים יוצאת, משתמשים בהגדרות הבאות של Terraform.
resource "google_vertex_ai_reasoning_engine" "agent" { provider = google-beta project = "AGENT_RUNTIME_PROJECT_ID" region = "REGION" display_name = "AGENT_DISPLAY_NAME" description = "AGENT_DESCRIPTION" spec { identity_type = "AGENT_IDENTITY" container_spec { image_uri = "REGION-docker.pkg.dev/AGENT_RUNTIME_PROJECT_ID/REPOSITORY/IMAGE:TAG" } deployment_spec { agent_gateway_config { agent_to_anywhere_config { agent_gateway = "projects/AGENT_GATEWAY_PROJECT_ID/locations/REGION/agentGateways/AGENT_GATEWAY_TO_ANYWHERE_NAME" } } } } }
מחליפים את מה שכתוב בשדות הבאים:
-
AGENT_RUNTIME_PROJECT_ID: מזהה הפרויקט שבו הנציג פרוס -
REGION: האזור שבו נפרסו הסוכן והשער -
AGENT_DISPLAY_NAME: השם המוצג של הנציג -
AGENT_DESCRIPTION: תיאור של הסוכן -
REPOSITORY: המאגר ב-Artifact Registry שמכיל את קובץ האימג' של הקונטיינר -
IMAGE: השם של קובץ האימג' של הקונטיינר -
TAG: התג של קובץ האימג' של הקונטיינר -
AGENT_GATEWAY_PROJECT_ID: מזהה הפרויקט שבו פרוס Agent Gateway -
AGENT_GATEWAY_TO_ANYWHERE_NAME: השם של Agent Gateway שיצרתם במצב Agent-to-Anywhere (תעבורת נתונים יוצאת)
מהלקוח לנציג
כדי לשייך סוכן לשער Client-to-Agent לתעבורת נתונים נכנסת, משתמשים בהגדרות הבאות של Terraform.
resource "google_vertex_ai_reasoning_engine" "agent" { provider = google-beta project = "PROJECT_ID" region = "REGION" display_name = "AGENT_DISPLAY_NAME" description = "AGENT_DESCRIPTION" spec { identity_type = "AGENT_IDENTITY" container_spec { image_uri = "REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE:TAG" } deployment_spec { agent_gateway_config { client_to_agent_config { agent_gateway = "projects/PROJECT_ID/locations/REGION/agentGateways/AGENT_GATEWAY_CLIENT_TO_AGENT_NAME" } } } } }
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט שבו נפרסו הנציג והשער -
REGION: האזור שבו נפרסו הסוכן והשער -
AGENT_DISPLAY_NAME: השם המוצג של הנציג -
AGENT_DESCRIPTION: תיאור של הסוכן -
REPOSITORY: המאגר ב-Artifact Registry שמכיל את קובץ האימג' של הקונטיינר -
IMAGE: השם של קובץ האימג' של הקונטיינר -
TAG: התג של קובץ האימג' של הקונטיינר -
AGENT_GATEWAY_CLIENT_TO_AGENT_NAME: השם של Agent Gateway שיצרתם במצב Client-to-Agent (תעבורת נתונים נכנסת)
-
לסוכנים קיימים שמשתמשים ב-API בארכיטקטורת REST
מסוכן לכל מקום
כדי לשייך סוכן קיים לשער Agent-to-Anywhere לתעבורת נתונים יוצאת, משתמשים בבקשת API בארכיטקטורת REST הבאה.
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "spec": { "deploymentSpec": { "agentGatewayConfig": { "agentToAnywhereConfig": { "agentGateway": "projects/AGENT_GATEWAY_PROJECT_ID/locations/REGION/agentGateways/AGENT_GATEWAY_TO_ANYWHERE_NAME" } } } } }' \ "https://REGION-aiplatform.googleapis.com/v1/projects/AGENT_RUNTIME_PROJECT_ID/locations/REGION/reasoningEngines/RESOURCE_ID?updateMask=spec.deploymentSpec.agentGatewayConfig"
מחליפים את מה שכתוב בשדות הבאים:
-
AGENT_GATEWAY_PROJECT_ID: מזהה הפרויקט שבו נפרס שער ה-API -
AGENT_RUNTIME_PROJECT_ID: מזהה הפרויקט שבו הנציג פרוס -
REGION: האזור שבו נפרסים הסוכן והשער -
AGENT_GATEWAY_TO_ANYWHERE_NAME: השם של Agent Gateway שיצרתם במצב Agent-to-Anywhere (תעבורת נתונים יוצאת) -
RESOURCE_ID: מזהה המשאב של הנציג
מהלקוח לנציג
כדי לשייך סוכן קיים לשער Client-to-Agent לתעבורת נתונים נכנסת, משתמשים בבקשת ה-API בארכיטקטורת REST הבאה.
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "spec": { "deploymentSpec": { "agentGatewayConfig": { "clientToAgentConfig": { "agentGateway": "projects/PROJECT_ID/locations/REGION/agentGateways/AGENT_GATEWAY_CLIENT_TO_AGENT_NAME" } } } } }' \ "https://REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/reasoningEngines/RESOURCE_ID?updateMask=spec.deploymentSpec.agentGatewayConfig"
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט שבו נפרסו הסוכן והשער -
REGION: האזור שבו נפרסים הסוכן והשער -
AGENT_GATEWAY_CLIENT_TO_AGENT_NAME: השם של Agent Gateway שיצרתם ב-Client-to-Agent (תעבורת נתונים נכנסת) -
RESOURCE_ID: מזהה המשאב של הנציג
-
רישום הסוכן ב-Agent Registry
מוודאים שהסוכן רשום במכונה של Agent Registry באותו פרויקט ואזור כמו Agent Gateway.
gcloud
gcloud agent-registry services create RUNTIME_AGENT_SERVICE_NAME \ --project=AGENT_GATEWAY_PROJECT_ID \ --location=REGION \ --display-name="RUNTIME_AGENT_DISPLAY_NAME" \ --endpoint-spec-type=no-spec \ --interfaces=url="https://REGION-aiplatform.mtls.googleapis.com/v1/projects/RUNTIME_AGENT_PROJECT_NUMBER/locations/REGION/reasoningEngines/ENGINE_ID",protocolBinding="jsonrpc" \ --format="value(registryResource)"
מחליפים את מה שכתוב בשדות הבאים:
-
RUNTIME_AGENT_SERVICE_NAME: השם שרוצים לתת לרשומת הנציג במרשם -
AGENT_GATEWAY_PROJECT_ID: מזהה הפרויקט שבו נפרס שער הגישה -
REGION: האזור שבו נפרסים הסוכן והשער -
RUNTIME_AGENT_DISPLAY_NAME: השם המוצג של רשומת הסוכן במרשם, שקריא לאנשים -
RUNTIME_AGENT_PROJECT_NUMBER: מספר הפרויקט שבו פרוס סוכן זמן הריצה -
ENGINE_ID: מזהה המשאב של הנציג
Terraform
resource "google_agent_registry_service" "runtime_agent_entry" { project = "AGENT_GATEWAY_PROJECT_ID" location = "REGION" service_id = "RUNTIME_AGENT_SERVICE_NAME" display_name = "RUNTIME_AGENT_DISPLAY_NAME" endpoint_spec { no_spec {} } interfaces { url = "https://REGION-aiplatform.mtls.googleapis.com/v1/projects/RUNTIME_AGENT_PROJECT_NUMBER/locations/REGION/reasoningEngines/ENGINE_ID" protocol_binding = "jsonrpc" } }מידע נוסף זמין במאמר רישום נציגים. במאמר רישום סוכן מפרויקט אחר מוסבר איך רושמים סוכנים באופן ידני בהגדרות של כמה פרויקטים.
-
יצירת קישור של מדיניות IAM בין הסוכן למאגר
מבצעים את השלב הזה באותו פרויקט ובאותו אזור שבהם נמצא Agent Gateway.
gcloud
gcloud iap web add-iam-policy-binding \ --resource-type=agent-registry \ --endpoint=AGENT_ENDPOINT_ID \ --region=REGION \ --project=AGENT_GATEWAY_PROJECT_ID \ --member=MEMBER \ --role=roles/iap.egressor
Terraform
resource "google_iap_agent_registry_endpoint_iam_member" "egress_binding" { project = "AGENT_GATEWAY_PROJECT_ID" location = "REGION" endpoint_id = "AGENT_ENDPOINT_ID" role = "roles/iap.egressor" member = "MEMBER" }מחליפים את מה שכתוב בשדות הבאים:
-
AGENT_ENDPOINT_ID: המזהה של נקודת הקצה של השירות של הסוכן הרשום. הערך הזה נלקח מהפלט של השלב הקודם.
MEMBER: חשבון המשתמש של זהות הסוכן שרוצים לתת לו את התפקיד. הפורמט של מנוע חשיבה רציונלית ספציפי הוא:principal://TRUST_DOMAIN/resources/aiplatform/projects/AGENT_RUNTIME_PROJECT_NUMBER/locations/REGION/reasoningEngines/ENGINE_ID.אם רוצים לתת גישה לתעבורת נתונים יוצאת לכל הסוכנים בפרויקט או בארגון, במקום לקשר מכונות ספציפיות, אפשר לקשר את מדיניות ה-IAM לקבוצת חשבונות משתמשים:
- כדי לתת גישה לכל הנציגים בפרויקט:
principalSet://TRUST_DOMAIN/attribute.platformContainer/aiplatform/projects/AGENT_RUNTIME_PROJECT_NUMBER - כדי לתת גישה לכל הנציגים בארגון:
principalSet://TRUST_DOMAIN/*
במחרוזות ה-principal האלה,
TRUST_DOMAINהוא בדרך כללagents.global.org-ORGANIZATION_ID.system.id.goog.- כדי לתת גישה לכל הנציגים בפרויקט:
-
הוספת ממשקי API חיוניים לרשימת ההיתרים של פעולות בזמן ריצה
בשלב הזה, תנועת הסוכן מופנית דרך Agent Gateway. עם זאת, ב-Agent Gateway מוגדרת מדיניות דחייה כברירת מחדל. כדי להפעיל פונקציות מסוימות של Agent Platform, צריך לוודא שהסוכן יכול לתקשר עם נקודות הקצה הבאות:
ההתאמה של שם המארח ב-Agent Gateway היא מדויקת. אין תמיכה בתווים כלליים לחיפוש, כמו
*.googleapis.com, או בתבניות של קידומות. אתם צריכים לרשום כל וריאציה של שם מארח רגיל, אזורי ומאובטח (mTLS) שאפליקציית הלקוח או ה-SDK של הנציג פותרים.כדי להפעיל פונקציות מסוימות של Agent Platform ולוודא שהאתחול והטלמטריה יתבצעו בהצלחה, צריך לאפשר תנועה לנקודות הקצה הבאות ב-Agent Registry:
נקודות קצה חיוניות בפלטפורמה
בטבלה הבאה מפורטות נקודות הקצה החיוניות של הפלטפורמה שהסוכנים צריכים בשביל פעולות רגילות, מעקב, רישום ביומן ורזולוציית מטא-נתונים:
שם השירות שם מארח רגיל שם המארח של mTLS וריאציות אזוריות ואחרות Agent Registry agentregistry.googleapis.com— — Cloud Logging logging.googleapis.comlogging.mtls.googleapis.com— Cloud Trace / Telemetry telemetry.googleapis.comtelemetry.mtls.googleapis.com— Trace API cloudtrace.googleapis.comcloudtrace.mtls.googleapis.com— Cloud Monitoring monitoring.googleapis.commonitoring.mtls.googleapis.com— Secret Manager secretmanager.googleapis.comsecretmanager.mtls.googleapis.com— מנהל המשאבים cloudresourcemanager.googleapis.comcloudresourcemanager.mtls.googleapis.com— פרטי כניסה ל-IAM iamcredentials.googleapis.comiamcredentials.mtls.googleapis.com— פלטפורמת הסוכנים (aiplatform) aiplatform.googleapis.comaiplatform.mtls.googleapis.comREGION-aiplatform.googleapis.com
REGION-aiplatform.mtls.googleapis.com
aiplatform.REGION.rep.googleapis.comנקודות קצה (endpoint) ספציפיות לתכונות
בנוסף, אם הנציגים שלכם משתמשים בתכונות כמו Sessions או Agent Platform Memory Bank, אתם צריכים לוודא שהנציגים יכולים לתקשר עם נקודות הקצה הספציפיות שבהן השירותים האלה משתמשים:
- לסשנים:
https://REGION-aiplatform.googleapis.com/API_VERSION/projects/PROJECT_ID/locations/REGION/reasoningEngines/RESOURCE_ID/sessions - ב-Memory Bank:
https://REGION-aiplatform.googleapis.com/API_VERSION/projects/PROJECT_ID/locations/REGION/reasoningEngines/RESOURCE_ID/memories
מטעמי אבטחה, מומלץ לרשום ולהוסיף לרשימת ההיתרים רק את כתובות ה-URI הספציפיות שהנציג ניגש אליהן. מכיוון שהשער מתאים ישירות לשמות המארחים, אתם צריכים לוודא שאתם רושמים את כל הווריאציות שבהן משתמש ה-SDK של הנציג. לדוגמה, בהתאם לגרסת ה-SDK, להגדרת הלקוח האזורית או לשימוש ב-mTLS, אפשר לפתור את Google API באמצעות שמות המארחים הבאים של נקודות הקצה:
https://REGION-aiplatform.googleapis.comhttps://REGION-aiplatform.mtls.googleapis.comhttps://aiplatform.REGION.rep.googleapis.com
במאמר רישום נקודות קצה מוסבר איך רושמים נקודות קצה. אם יש לכם הגדרה של כמה פרויקטים, אתם יכולים לרשום כמה נקודות קצה ל-API של Google בשירות Agent Registry אחד. מידע נוסף זמין במאמר רישום נקודת קצה מורכבת ל-Google APIs. אתם צריכים גם לוודא שלנציג יש את ההרשאה
iap.resources.egressViaIAPלנקודות הקצה האלה. להוראות, ראו יצירת מדיניות תעבורת נתונים יוצאת מסוכן לנקודת קצה.- לסשנים:
אימות הגדרות הנציג
המסוף
- במסוף Google Cloud , נכנסים לדף Deployments ב-Agent Platform.
לוחצים על השם של הנציג שפרסתם.
לוחצים על הגדרת שירות. החלונית Observability של הנציג נפתחת.
לוחצים על Deployment details. הגדרות הכניסה והיציאה של Agent Gateway זמינות בשדה Deployment spec.
gcloud
כדי לוודא שהסוכן משויך עכשיו לשער, משתמשים בבקשת API בארכיטקטורת REST הבאה. אם הפלט שמוחזר הוא
null, המשמעות היא שזמן הריצה לא הצליח להתחבר לשער.curl -s -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://REGION-aiplatform.googleapis.com/v1/projects/AGENT_RUNTIME_PROJECT_ID/locations/REGION/reasoningEngines/RESOURCE_ID" \ | jq '.spec.deploymentSpec.agentGatewayConfig'
מחליפים את מה שכתוב בשדות הבאים:
-
AGENT_RUNTIME_PROJECT_ID: מזהה הפרויקט -
REGION: האזור שבו הסוכן פרוס -
RESOURCE_ID: מזהה המשאב של הנציג
- במסוף Google Cloud , נכנסים לדף Deployments ב-Agent Platform.
הגדרת סוכנים של קונטיינר בהתאמה אישית (BYOC) ל-Agent Gateway
אם אתם רוצים לנתב תנועה יוצאת דרך Agent Gateway מסוג Agent-to-Anywhere (תנועה יוצאת) לסוכן שנפרס עם קובץ אימג' של קונטיינר בהתאמה אישית (Bring Your Own Container / BYOC), אתם צריכים להטמיע את אישור רשות אישורי הבסיס (CA) של השער במאגר האישורים של קובץ האימג' של הקונטיינר בהתאמה אישית.
מכיוון ש-Agent Gateway מבצע פענוח ובדיקה של TLS בתקשורת יוצאת של סוכנים, פריסות של סוכנים שאינם BYOC (מבוססי מקור) מחדירות באופן אוטומטי את האישור של רשות האישורים במהלך יצירת התמונה. אם אתם משתמשים בקובצי אימג' של קונטיינרים בהתאמה אישית, אתם צריכים לאחזר באופן מפורש את אישור ה-CA של השער, להתקין אותו במאגר האישורים של ה-CA במערכת בתוך Dockerfile, ולהגדיר את משתני הסביבה של חבילת האישורים שנדרשים על ידי ערכות ה-SDK של Python, ספריות הלקוח של HTTP ו-gRPC.
כדי להגדיר קובץ אימג' של קונטיינר BYOC לתעבורת נתונים יוצאת של Agent Gateway:
מאחזרים את אישורי הבסיס מהמשאב של Agent Gateway.
מייצאים את מחרוזת ה-PEM של אישור הבסיס של ה-CA ישירות מהשדה
agentGatewayCard.rootCertificatesשל משאב Agent Gateway:export AGW_CERT=$(gcloud network-services agent-gateways describe AGENT_GATEWAY_NAME \ --location=REGION \ --project=PROJECT_ID \ --format="value[delimiter=\\n](agentGatewayCard.rootCertificates)")
לחלופין, אתם יכולים להשתמש ב-API בארכיטקטורת REST כדי לאחזר את משאב השער:
curl -s -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://networkservices.googleapis.com/v1/projects/AGENT_GATEWAY_PROJECT_ID/locations/REGION/agentGateways/AGENT_GATEWAY_NAME" \ | jq -r '.agentGatewayCard.rootCertificates[]'
מחליפים את מה שכתוב בשדות הבאים:
-
AGENT_GATEWAY_NAME: השם של ה-Agent Gateway לתעבורת נתונים יוצאת -
REGION: האזור שבו נפרס שער הגישה -
AGENT_GATEWAY_PROJECT_ID: מזהה הפרויקט שבו השער פרוס
-
מעדכנים את
Dockerfileכדי לתת אמון באישור ה-CA.מוסיפים את ארגומנט ה-build
AGENT_GATEWAY_ROOT_CERTIFICATESל-Dockerfile. פקודות ה-build מפצלות את האישורים לקבצים נפרדים, מתקינות אותם באמצעותupdate-ca-certificatesומגדירות משתני סביבה כדי ש-OpenSSL, ספריות צד הלקוח ב-HTTP של Python (requests,httpx) ו-gRPC יזהו את ה-CA בהתאמה אישית:# Install root certificates under root user USER root ARG AGENT_GATEWAY_ROOT_CERTIFICATES RUN if [ -n "$AGENT_GATEWAY_ROOT_CERTIFICATES" ]; then \ echo "Installing Agent Gateway root certificates..."; \ printf "%b" "$AGENT_GATEWAY_ROOT_CERTIFICATES" | awk 'BEGIN {c=0} /BEGIN CERTIFICATE/ {c++} c > 0 { print > "/usr/local/share/ca-certificates/agw-" c ".crt" }'; \ update-ca-certificates; \ fi # Configure SSL/TLS trust paths for Python HTTP libraries, OpenSSL, and gRPC ENV GRPC_DEFAULT_SSL_ROOTS_FILE_PATH=${AGENT_GATEWAY_ROOT_CERTIFICATES:+/etc/ssl/certs/ca-certificates.crt} ENV REQUESTS_CA_BUNDLE=${AGENT_GATEWAY_ROOT_CERTIFICATES:+/etc/ssl/certs/ca-certificates.crt} ENV SSL_CERT_FILE=${AGENT_GATEWAY_ROOT_CERTIFICATES:+/etc/ssl/certs/ca-certificates.crt} ENV AGENT_GATEWAY_ROOT_CERT_302034098528=${AGENT_GATEWAY_ROOT_CERTIFICATES:+/etc/ssl/certs/ca-certificates.crt} # Switch back to application execution user USER 1000
יוצרים את קובץ האימג' של הקונטיינר באמצעות Cloud Build.
יוצרים קובץ
cloudbuild.yamlכדי להעביר את מחרוזת אישור הבסיס ל-Cloud Build באמצעות החלפות:steps: - name: 'gcr.io/cloud-builders/docker' args: - 'build' - '--build-arg' - 'AGENT_GATEWAY_ROOT_CERTIFICATES=${_AGW_CERT}' - '-t' - '$_IMAGE_URI' - '.' images: - '$_IMAGE_URI'שולחים את ה-build של קובץ האימג' של הקונטיינר ל-Cloud Build:
export IMAGE_URI="REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/IMAGE_NAME:latest" gcloud builds submit \ --project=PROJECT_ID \ --region=REGION \ --config=cloudbuild.yaml \ --substitutions=_IMAGE_URI="$IMAGE_URI",_AGW_CERT="$AGW_CERT" \ .
מחליפים את
REPOSITORY_NAMEואתIMAGE_NAMEבשמות של המאגר והאימג' ב-Artifact Registry.פורסים את הסוכן בקונטיינר.
מציינים את ה-URI של קובץ האימג' של הקונטיינר שנוצר, יחד עם ההגדרות של Agent Gateway בבקשת הפריסה (באמצעות
agent_gateway_configב-spec.deploymentSpecאו באמצעות קריאות לפריסה של SDK).
הגבלת Agent Runtime לשערי Agent Gateway מאושרים
אתם יכולים ליצור אילוצים בהתאמה אישית של מדיניות הארגון כדי להגדיר את קבוצת המשאבים של Agent Gateway שאפשר להשתמש בהם כשפורסים סוכנים.
יצירת אילוצים בהתאמה אישית של מדיניות הארגון
בדוגמה הזו נוצרים אילוצים בהתאמה אישית שמאפשרים תנועה רק אל רשימה של שערים שאושרו מראש וממנה.
מסוכן לכל מקום
כדי להגדיר אילוץ בהתאמה אישית למצב "סוכן לכל מקום" (תעבורת נתונים יוצאת), יוצרים קובץ בשם
constraint-agent-gateway-egress.yaml.בדוגמה הבאה, השדה
conditionמציין שהפעולה מותרת רק אם צוין משאב של Agent Gateway (השדה קיים ולא ריק) ואם השער שצוין נמצא ברשימה שאושרה מראש.name: organizations/ORGANIZATION_ID/customConstraints/custom.allowlistedEgressAgentGatewaysForAgentEngine resource_types: - aiplatform.googleapis.com/ReasoningEngine condition: >- has(resource.spec.deploymentSpec.agentGatewayConfig.agentToAnywhereConfig.agentGateway) && resource.spec.deploymentSpec.agentGatewayConfig.agentToAnywhereConfig.agentGateway != '' && (resource.spec.deploymentSpec.agentGatewayConfig.agentToAnywhereConfig.agentGateway in [ 'projects/AGENT_PROJECT_ID_1/locations/REGION_1/agentGateways/AGENT_GATEWAY_ID_1', 'projects/AGENT_PROJECT_ID_2/locations/REGION_2/agentGateways/AGENT_GATEWAY_ID_2', ]) method_types: - CREATE - UPDATE action_type: ALLOW display_name: Restrict Reasoning Engine Egress to Approved Agent Gateways description: Reasoning Engines can only be bound to a pre-approved list of Agent Gateway instances. Binding to any other gateway is denied.מחליפים את מה שכתוב בשדות הבאים:
- ORGANIZATION_ID: מזהה הארגון.
- AGENT_PROJECT_ID: מזהה הפרויקט.
- REGION: האזור שבו נוצר השער.
- AGENT_GATEWAY_ID: מזהה השער.
מחילים את האילוץ המותאם אישית.
gcloud org-policies set-custom-constraint EGRESS_CONSTRAINT_PATH
מחליפים את EGRESS_CONSTRAINT_PATH בנתיב המלא לקובץ האילוץ בהתאמה אישית שיצרתם בשלב הקודם.
יוצרים את מדיניות הארגון כדי לאכוף את האילוץ. כדי להגדיר את מדיניות הארגון, יוצרים קובץ מדיניות YAML בשם
policy-agent-gateway-egress.yaml. בדוגמה הזו אנחנו אוכפים את האילוץ ברמת הפרויקט, אבל אפשר גם להגדיר אותו ברמת הארגון או התיקייה.name: projects/AGENT_PROJECT_ID/policies/custom.allowlistedEgressAgentGatewaysForAgentEngine spec: rules: - enforce: trueמחליפים את
AGENT_PROJECT_IDבמזהה הפרויקט.אוכפים את מדיניות הארגון.
gcloud org-policies set-policy EGRESS_POLICY_PATH
מחליפים את EGRESS_POLICY_PATH בנתיב המלא לקובץ ה-YAML של מדיניות הארגון שנוצר בשלב הקודם. המדיניות תיכנס לתוקף תוך 15 דקות לכל היותר.
מהלקוח לנציג
כדי להגדיר אילוץ בהתאמה אישית למצב Client-to-Agent (כניסה), יוצרים קובץ בשם
constraint-agent-gateway-ingress.yaml.בדוגמה הבאה, השדה
conditionמציין שהפעולה מותרת רק אם צוין משאב של Agent Gateway (השדה קיים ולא ריק) ואם השער שצוין נמצא ברשימה שאושרה מראש.name: organizations/ORGANIZATION_ID/customConstraints/custom.allowlistedIngressAgentGatewaysForAgentEngine resource_types: - aiplatform.googleapis.com/ReasoningEngine condition: >- has(resource.spec.deploymentSpec.agentGatewayConfig.clientToAgentConfig.agentGateway) && resource.spec.deploymentSpec.agentGatewayConfig.clientToAgentConfig.agentGateway != '' && (resource.spec.deploymentSpec.agentGatewayConfig.clientToAgentConfig.agentGateway in [ 'projects/AGENT_PROJECT_ID_1/locations/REGION_1/agentGateways/AGENT_GATEWAY_ID_1', 'projects/AGENT_PROJECT_ID_2/locations/REGION_2/agentGateways/AGENT_GATEWAY_ID_2', ]) method_types: - CREATE - UPDATE action_type: ALLOW display_name: Restrict Reasoning Engine Ingress to Approved Agent Gateways description: Reasoning Engines can only be bound to a pre-approved list of Agent Gateway instances. Binding to any other gateway is denied.מחליפים את מה שכתוב בשדות הבאים:
- ORGANIZATION_ID: מזהה הארגון.
- AGENT_PROJECT_ID: מזהה הפרויקט.
- REGION: האזור שבו נוצר השער.
- AGENT_GATEWAY_ID: מזהה השער.
מחילים את האילוץ המותאם אישית.
gcloud org-policies set-custom-constraint INGRESS_CONSTRAINT_PATH
מחליפים את INGRESS_CONSTRAINT_PATH בנתיב המלא לקובץ האילוץ בהתאמה אישית שיצרתם בשלב הקודם.
יוצרים את מדיניות הארגון כדי לאכוף את האילוץ. כדי להגדיר את מדיניות הארגון, יוצרים קובץ מדיניות YAML בשם
policy-agent-gateway-ingress.yaml. בדוגמה הזו אנחנו אוכפים את האילוץ ברמת הפרויקט, אבל אפשר גם להגדיר אותו ברמת הארגון או התיקייה.name: projects/AGENT_PROJECT_ID/policies/custom.allowlistedIngressAgentGatewaysForAgentEngine spec: rules: - enforce: trueמחליפים את
AGENT_PROJECT_IDבמזהה הפרויקט.אוכפים את מדיניות הארגון.
gcloud org-policies set-policy INGRESS_POLICY_PATH
מחליפים את INGRESS_POLICY_PATH בנתיב המלא לקובץ ה-YAML של מדיניות הארגון שנוצר בשלב הקודם. המדיניות תיכנס לתוקף תוך 15 דקות לכל היותר.
למידע נוסף על השימוש באילוצים בהתאמה אישית של מדיניות הארגון, ראו יצירת אילוצים בהתאמה אישית.
מגבלות
אלה המגבלות של ניהול בין פרויקטים:
- קישורים בין פרויקטים בין סוכנים לשערים נתמכים רק במצב "סוכן לכל מקום" (תעבורת נתונים יוצאת). במצב "מלקוח לסוכן" (ingress), הסוכן ו-Agent Gateway צריכים להיות באותו פרויקט.
- כדי להגדיר ניהול מקצה לקצה בפרויקטים שונים, צריך להשתמש ב-API בארכיטקטורת REST או ב-gcloud. במסוף Google Cloud Google Cloud אי אפשר ליצור קישורי מדיניות IAM או רשומות של Agent Registry בפרויקטים שונים.
אי אפשר לקשר Agent Gateway למנועי חשיבה רציונלית של סביבת זמן ריצה שנוצרו לפני 29 באפריל 2026.
בפרויקט ובאזור אחד יכולים להיות כמה מכונות של Agent Gateway מסוג Agent-to-Anywhere (תעבורת נתונים יוצאת) ו-Client-to-Agent (תעבורת נתונים נכנסת), אבל כל הסוכנים של Agent Runtime שנפרסו באותו פרויקט ובאותו אזור חייבים להיות מקושרים לאותן מכונות ספציפיות של Agent Gateway לתעבורת נתונים יוצאת ונכנסת.
לדוגמה, אם פרויקט ואזור מכילים את
egress-gateway-Xו-egress-gateway-Y, כל הסוכנים באותו פרויקט ואזור חייבים להיות מוגדרים להשתמש באותו שער לתעבורת נתונים יוצאת. כלומר, כל הנציגים משתמשים ב-egress-gateway-Xאו שכל הנציגים משתמשים ב-egress-gateway-Y. אי אפשר להגדיר אתagent-Aלשימוש ב-egress-gateway-Xואתagent-Bלשימוש ב-egress-gateway-Y.כלל הקישור הזה חל גם על שערי כניסה בתוך פרויקט ואזור.
שירות זיהוי האיומים של Security Command Center Agent Engine לא זמין כש-Agent Gateway מופעל לסוכן.
במצב "מלקוח לסוכן" (ingress), Agent Gateway יכול לנהל רק את השיטות
queryו-streamQueryשל Agent Runtime. כדי להגן על שיטות אחרות שלא נתמכות (כמוasyncQuery), אתם יכולים להחיל תבניות של Model Armor ישירות מהאפליקציה או מהסוכן. אפשר לקרוא את המאמר הסרת תוכן זדוני או רגיש מהנחיות ומתשובות או את ה-Codelab בנושא יצירת מערכת סוכנים מאובטחת באמצעות הגנה מוגברת על המודל.כשמשנים קישור של Agent Gateway בסוכן Runtime, כל הגרסאות הקיימות של הסוכן מועברות לארכיון. אי אפשר לבטל את ההעברה לארכיון. Agent Gateway וגרסאות
כדי לעדכן סוכן בלי לשנות את מזהה מנוע החשיבה הרציונלית שלו או לשבור את הקישורים למדיניות, צריך לעדכן את מופע הסוכן במקום, כמו שמתואר במאמר עדכון מופע של Agent Runtime.
המאמרים הבאים
Codelab: ניהול עומסי עבודה של סוכנים באמצעות Agent Platform
איך מנהלים עומסי עבודה של סוכנים באמצעות Agent Gateway ב-Gemini Enterprise Agent Platform.
הקצאת הרשאות ל-Agent Gateway
איך להעביר את ההרשאה ל-Agent Gateway אל IAP, אל Model Armor או אל שירות הרשאות בהתאמה אישית.