ניהול הגישה לסוכנים שנפרסו ב-Gemini Enterprise Agent Platform כולל הגדרת אימות והרשאה גם לסוכן שניגש למשאבים חיצוניים וגם ללקוחות חיצוניים שניגשים לסוכן. במאמר הזה מתוארות שיטות האימות שזמינות, כולל זהות הסוכן, חשבונות שירות, מפתחות API ולקוחות OAuth.
יש סוגים שונים של שיטות אימות שזמינות למצבי גישה שונים:
| שיטת אימות | תרחיש שימוש | מידע על שיטת האימות הזו |
|---|---|---|
| זהות הנציג/ה (תצוגה מקדימה) | גישה למקורות נתונים ישירות מתוך סוכן. | סוכן שנפרס עם זהות סוכן יכול לגשת למשאבים בהתאם להרשאות ה-IAM שאתם מעניקים לסוכן. |
| חשבונות שירות | גישה למקורות נתונים ישירות מתוך סוכן. | לסוכנים שנפרסו יש גישה לכל המשאבים שחשבון השירות שלהם מורשה לגשת אליהם. |
| מפתחות API | שליחת בקשות לנקודות קצה באמצעות מפתחות API מתוך סוכן. | לכן כדאי לוודא שממשק ה-API שבו תרצו להשתמש תומך במפתחות API, לפני שתשתמשו בשיטת האימות הזו. |
| מזהה לקוח ב-OAuth | לטפל בחשבונות משתמשים, בהרשמה, בכניסה או בהרשאה של משתמשי הקצה של הסוכן. | הסוכן צריך לבקש ולקבל הסכמה מהמשתמש. |
זהות הסוכן
אם השתמשתם בזהות של הסוכן כדי להגדיר את הזהות וההרשאות של הסוכן, במאמר שימוש בזהות של הסוכן עם Agent Runtime מוסבר איך לנהל את בקרת הגישה למשאבים.
חשבונות שירות
אם השתמשתם בחשבונות שירות כדי להגדיר את הזהות וההרשאות של הסוכן, סוכנים שפורסים ב-Agent Runtime פועלים באמצעות AI Platform Reasoning Engine Service Agent או חשבון השירות המותאם אישית שלכם.
סוכן שירות של מנוע חשיבה רציונלית ב-AI Platform
חשבון השירות AI Platform Reasoning Engine Service Agent משתמש בפורמט service-PROJECT_NUMBER@gcp-sa-aiplatform-re.iam.gserviceaccount.com.
לחשבון השירות יש תפקיד (roles/aiplatform.reasoningEngineServiceAgent) של סוכן שירות של מנוע נימוקים של Gemini Enterprise Agent Platform, שמעניק את הרשאות ברירת המחדל הנדרשות לסוכנים שנפרסו. אפשר לראות את הרשימה המלאה של הרשאות ברירת המחדל במסמכי ה-IAM.
הצגת רשימת התפקידים של סוכן שנפרס
המסוף
עוברים לדף IAM.
בוחרים את הפרויקט שמתאים לפרויקט Google Cloud שלכם.
מחפשים את חשבון המשתמש שתואם לחשבון השירות שמשמש כזהות של הסוכן.
התפקידים של הסוכן שנפרס מופיעים בעמודה תפקיד.
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הוא המזהה או המספר של הפרויקט, ו -
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.
הקצאת תפקידים לסוכן שפרסתם
מסוף (מומלץ)
עוברים לדף IAM.
בוחרים את הפרויקט שמתאים לפרויקט Google Cloud שלכם.
מחפשים את חשבון המשתמש שתואם לחשבון השירות שמשמש כזהות של הסוכן.
מוסיפים את התפקידים הנדרשים לPrincipal. לשם כך, לוחצים על לחצן העריכה, מוסיפים את התפקידים ואז לוחצים על לחצן השמירה.
gcloud
קודם מתקינים ומפעילים את gcloud CLI. מריצים את הפקודה הבאה:
gcloud projects add-iam-policy-binding PROJECT_ID --member=PRINCIPAL --role=ROLE_NAMEאיפה
-
PRINCIPALמבוסס על חשבון השירות שבו נעשה שימוש כשסוכן נפרס ב-Runtime. -
ROLE_NAME: שם התפקיד שרוצים להעניק. רשימת התפקידים המוגדרים מראש מופיעה במאמר הסבר על תפקידים.
פרטים נוספים מופיעים במאמרי העזרה בנושא IAM ובמאמרי העזרה בנושא CLI.
Python
אנחנו לא ממליצים לכתוב קוד Python משלכם כדי לתת או לבטל תפקידים לסוכנים שנפרסו. במקום זאת, מומלץ להשתמש במסוף Google Cloud או ב-gcloud לפעולות חד-פעמיות, או ב-Terraform לניהול בקרת גישה ל-IAM באופן פרוגרמטי. אם אתם רוצים או צריכים לעשות זאת ב-Python, כדאי לעיין במאמרי העזרה של ספריית הלקוח של IAM.
ביטול תפקידים מסוכן שהופעל
מסוף (מומלץ)
עוברים לדף IAM.
בוחרים את הפרויקט שמתאים לפרויקט Google Cloud שלכם.
מחפשים את חשבון המשתמש שתואם לחשבון השירות שמשמש כזהות של הסוכן.
כדי לבטל את התפקידים של Principal, לוחצים על לחצן העריכה, מסירים את התפקידים הרלוונטיים ואז לוחצים על לחצן השמירה.
gcloud
קודם מתקינים ומפעילים את ה-CLI של gcloud. מריצים את הפקודה הבאה:
gcloud projects remove-iam-policy-binding PROJECT_ID --member=PRINCIPAL --role=ROLE_NAMEאיפה
-
PRINCIPALמבוסס על חשבון השירות שבו נעשה שימוש כשסוכן נפרס ב-Runtime. -
ROLE_NAME: שם התפקיד שרוצים לבטל. רשימה של תפקידים מוגדרים מראש מופיעה במאמר הסבר על תפקידים.
פרטים נוספים מופיעים במאמרי העזרה בנושא IAM ובמאמרי העזרה בנושא CLI.
Python
אנחנו לא ממליצים לכתוב קוד Python משלכם כדי לתת או לבטל תפקידים לסוכנים שנפרסו. במקום זאת, מומלץ להשתמש במסוף Google Cloud או ב-gcloud לפעולות חד-פעמיות, או ב-Terraform לניהול בקרת גישה ל-IAM באופן פרוגרמטי. אם אתם רוצים או צריכים לעשות זאת ב-Python, כדאי לעיין במאמרי העזרה של ספריית הלקוח של IAM.
מפתחות API
מפתחות API משתמשים בערכים סודיים, שמכילים גרסה סודית אחת או יותר, יחד עם מטא-נתונים כמו תוויות ופרטי שכפול. המטען הייעודי (payload) בפועל של ערך סודי מאוחסן בגרסה סודית. הערכים הסודיים מנוהלים (באמצעות Secret Manager) ברמת הפרויקט, ואפשר לשתף אותם בין סוכנים שנפרסו. כדי להציג רשימה של הערכים הסודיים שמתאימים לסוכן ב-Secret Manager, אפשר להוסיף תוויות ולהשתמש בהן לסינון.
יצירת סוד
המסוף
עוברים לדף Secret Manager.
בדף Secret Manager, לוחצים על Create Secret (יצירת סוד).
בשדה שם, מזינים שם לסוד (לדוגמה,
my-secret).אופציונלי: כדי להוסיף גם גרסה סודית כשיוצרים את הסוד הראשוני, בשדה Secret value (ערך סודי) מזינים ערך לסוד (לדוגמה,
abcd1234).עוברים אל תוויות ולוחצים על הוספת תווית.
כדי ליצור תווית, מזינים מפתח ואת הערך התואם שלו.
לוחצים על Create secret (יצירת סוד).
gcloud
קודם מתקינים ומפעילים את ה-CLI של gcloud. ואז מריצים את הפקודות הבאות:
gcloud secrets create SECRET_ID --replication-policy="automatic"gcloud secrets versions add SECRET_ID --data-file="FILE_PATH"
איפה
-
SECRET_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}")
קבלת סוד
המסוף
עוברים לדף Secret Manager.
בדף Secret Manager, לוחצים על שם ה-Secret שרוצים לתאר.
בדף Secret detail מופיע מידע על הסוד.
gcloud
קודם מתקינים ומפעילים את ה-CLI של gcloud. מריצים את הפקודה הבאה:
gcloud secrets versions describe VERSION_ID --secret=SECRET_IDאיפה
-
VERSION_IDהוא המזהה של גרסת הסוד, -
SECRET_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})
הצגת רשימה של סודות
המסוף
עוברים לדף Secret Manager.
בטבלה Secrets (סודות), לוחצים על השדה Filter (מסנן).
בוחרים מאפיין של מסנן ואת הערך המתאים לו, לדוגמה
Location:asia-east1.הטבלה מסוננת אוטומטית על סמך הערכים שהוזנו.
(אופציונלי) כדי לסנן גרסאות של סודות: בוחרים סוד כדי לגשת לגרסאות שלו, ואז משתמשים באפשרות Filter בטבלה Versions.
gcloud
קודם מתקינים ומפעילים את ה-CLI של gcloud.
כדי להציג את כל הסודות של פרויקט, מריצים את הפקודה הבאה:
gcloud secrets list --filter="FILTER"כאשר FILTER היא מחרוזת (למשל name:asecret OR name:bsecret) או ביטויים רגולריים (למשל name ~ "secret_ab.*").
כדי לראות את כל הגרסאות של סוד, מריצים את הפקודה הבאה:
gcloud secrets versions list SECRET_IDכאשר SECRET_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}")
עדכון סוד
המסוף
עוברים לדף Secret Manager.
בדף Secret Manager, לוחצים על תיבת הסימון שליד שם הסוד.
אם חלונית המידע סגורה, לוחצים על הצגת חלונית המידע כדי להציג אותה.
בחלונית Info Panel (חלונית המידע), לוחצים על הכרטיסייה Labels (תוויות).
לוחצים על הוספת תווית ומזינים מפתח וערך לתווית.
לוחצים על Save.
gcloud
קודם מתקינים ומפעילים את ה-CLI של gcloud. מריצים את הפקודה הבאה:
gcloud secrets update SECRET_ID --update-labels=KEY=VALUEאיפה
-
SECRET_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}")
מחיקת סוד
המסוף
עוברים לדף Secret Manager.
בדף Secret Manager, בעמודה Actions של הסוד, לוחצים על View more.
בתפריט, בוחרים באפשרות מחיקה.
בתיבת הדו-שיח מחיקת Secret, מזינים את שם ה-Secret.
לוחצים על הלחצן מחיקת ה-Secret.
gcloud
קודם מתקינים ומפעילים את ה-CLI של gcloud.
כדי למחוק גרסה של סוד, מריצים את הפקודה הבאה:
gcloud secrets versions destroy VERSION_ID --secret=SECRET_IDאיפה
-
VERSION_IDהוא שם המשאב של גרסת הסוד. -
SECRET_IDהוא המזהה של הסוד או מזהה מוגדר במלואו של הסוד.
כדי למחוק סוד ואת כל הגרסאות שלו, מריצים את הפקודה הבאה:
gcloud secrets delete SECRET_IDכאשר SECRET_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
מזהה הלקוח משמש לזיהוי של סוכן אחד בשרתי OAuth של Google. אם הסוכן פועל בכמה פלטפורמות, לכל פלטפורמה צריך להיות מזהה לקוח משלה. באופן כללי, כדי לשלב סוכן מבוסס OAuth, מבצעים את הפעולות הבאות:
יוצרים לקוח OAuth ופרטי כניסה.
מאחסנים את מזהה הלקוח ואת הסוד ב-Secret Manager. (ראו יצירת סוד).
גישה לסוד בסוכן במהלך הפיתוח.
יצירת פרטי כניסה של לקוח OAuth
במסוף Google Cloud , עוברים לדף Google Auth Platform > Clients.
(אם צריך) אם מופיעה ההודעה 'Google Auth Platform not configured yet' (פלטפורמת אימות Google עדיין לא הוגדרה), לוחצים על Get Started (תחילת העבודה) וממלאים את Project Configurations (הגדרות הפרויקט). (אפשר לעדכן אותם בהמשך). פרטים על מוכנות להפקה זמינים במאמר עמידה במדיניות בנושא OAuth 2.0.
לוחצים על Create Client.
מגדירים את סוג האפליקציה לערך
Web application.מגדירים את השם של לקוח ה-OAuth ל-
OAUTH_CLIENT_DISPLAY_NAME.בקטע Authorized redirect URIs (מזהי URI מורשים להפניה אוטומטית), מוסיפים את ה-URI של
REDIRECT_URI.בקטע Client Secrets (סודות לקוח), לוחצים על הלחצן 'download JSON' (הורדת 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.
}}
- אחסון מזהה הלקוח והסוד ב-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
במסוף Google Cloud , נכנסים לדף Google Auth Platform > Clients, שבו מפורטים פרטי הכניסה של לקוח OAuth.
מחיקת לקוח OAuth
במסוף Google Cloud , עוברים לדף Google Auth Platform > Clients.
בוחרים את פרטי הכניסה של לקוח OAuth שרוצים למחוק ולוחצים על סמל המחיקה.
מפתחות הצפנה בניהול הלקוח (CMEK)
כברירת מחדל, Google Cloud הנתונים מוצפנים באופן אוטומטי כשהם במצב מנוחה באמצעות מפתחות הצפנה שמנוהלים על ידי Google. אם יש לכם דרישות ספציפיות בנושא תאימות או רגולציה שקשורות למפתחות שמגנים על הנתונים, אתם יכולים להשתמש במפתחות הצפנה בניהול הלקוח (CMEK) עבור הסוכנים שפרסתם.
במסמכי התיעוד בנושא CMEK ל-Gemini Enterprise Agent Platform מפורטות הדרישות הכלליות וההנחיות לשימוש ב-CMEK עם Gemini Enterprise Agent Platform, כולל:
- הגדרת הפרויקט (חיוב וממשקי API מופעלים)
- יצירה של אוספי מפתחות ומפתחות
- הענקת הרשאות נדרשות
כדי להפעיל CMEK לסוכן, צריך לציין את encryption_spec עם מפתח Cloud KMS כשיוצרים מופע של Agent Platform. דוגמאות קוד זמינות במאמר הגדרת מפתחות הצפנה בניהול הלקוח.
מגבלות
ההגבלות הבאות חלות כשמשתמשים ב-CMEK עם Agent Runtime:
אסור להשתמש במפתחות שמוגדרים למספר אזורים: המערכת תומכת רק במפתחות שמוגדרים לאזור יחיד. האזור של מחזיק המפתחות והמפתח צריך להיות זהה למופע של Agent Platform.
אי אפשר לעדכן את מפתח ההצפנה עבור מופעים של CMEK: אחרי שמפעילים סוכן עם מפתח CMEK, אי אפשר לשנות את מפתח ההצפנה עבור הפריסה הזו. כדי להשתמש במפתח חדש, צריך לפרוס מופע חדש של Agent Platform.
מטא-נתונים מסוימים ונתונים תפעוליים לא מוצפנים באמצעות המפתח שלכם: CMEK מצפין את נתוני הליבה של הסוכן במצב מנוחה. עם זאת, מטא נתונים מסוימים ונתוני תפעול בזמן ריצה לא מוצפנים באמצעות המפתח שלכם. במקום זאת, הם מוצפנים באמצעות ברירת המחדל של ההצפנה ב-Google. למשל:
- מטא-נתונים של הסוכן:
- שמות לתצוגה
- תיאורים
- נתונים תפעוליים של זמן הריצה:
- כתובות אימייל של חשבון שירות
- שמות של שיטות של מחלקות אובייקטים של סוכנים
- משתני סביבה
- מטא-נתונים של הסוכן:
VPC Service Controls (VPC-SC)
Agent Runtime תומך ב-VPC Service Controls כדי לחזק את אבטחת המידע ולצמצם את הסיכונים לזליגת נתונים.
כשמגדירים את VPC Service Controls, לסוכן הפרוס יש גישה מאובטחת ל-Google APIs ולשירותים של Google, כמו BigQuery API, Cloud SQL Admin API ו-Agent Platform API. כך אפשר לוודא שהפעולה מתבצעת בצורה חלקה בגבולות הגזרה שהוגדרו. חשוב לציין ש-VPC Service Controls חוסם ביעילות את כל הגישה לאינטרנט הציבורי, ומגביל את תנועת הנתונים לגבולות הרשת המורשים, וכך משפר באופן משמעותי את מצב האבטחה של הארגון.
אפשרויות הפריסה הזמינות מפורטות במאמר פריסת סוכן. בהתאם לאפשרות הפריסה, צריך להגדיר את כללי הכניסה הבאים:
- בפריסות מבוססות pickle, נדרשת כניסה לשירות
storage.googleapis.comולשירותartifactregistry.googleapis.com. - בפריסות מבוססות-מקור, בפריסות מבוססות-git ובפריסות של Dockerfile משלכם (BYOD), נדרשת כניסה לשירות
artifactregistry.googleapis.com. - בפריסות של שימוש בקונטיינר משלכם (BYOC), לא נדרש כלל נוסף של תעבורת כניסה.
מגבלות
שירות VPC Service Controls לא נתמך ב-Agent Gateway.
עם זאת, אפשר להשתמש באילוצים מותאמים אישית של מדיניות הארגון כדי להגביל את השיוך של שערים לסוכנים. מידע נוסף זמין במאמר בנושא ניתוב תנועה דרך Agent Gateway.