הגדרת VPC Service Controls ו-Private Service Connect עם ארגזי חול

שליטה בתעבורת הנתונים הנכנסת הפרטית ובתעבורת הנתונים היוצאת לאינטרנט של ארגז חול (Sandbox) של Agent Platform באמצעות Private Service Connect ‏(PSC-E / PSC-I). אמצעי הבקרה האלה מאפשרים לארגז החול לעמוד בדרישות של VPC Service Controls בתוך היקף או בלעדיו.

סקירה כללית

בעזרת VPC Service Controls אתם יכולים להגדיר גבולות גזרה לשירות שמבודדים את המשאבים של Cloud de Confiance by S3NS כדי לצמצם את הסיכון לזליגת נתונים. ארגז החול של Gemini Enterprise Agent Platform מספק לסוכנים סביבת מחשוב מאובטחת ומבודדת להרצת קוד לא מהימן, להפעלת דפדפן אינטרנט (שימוש במחשב) או להרצת קובץ אימג' של קונטיינר בהתאמה אישית. ארגז החול חושף מישור נתונים אינטראקטיבי ומבצע שיחות יוצאות, ולכן הוא נשלט באמצעות שני אמצעי בקרה של Private Service Connect: תעבורת נתונים נכנסת פרטית (PSC-E) ובקרת תעבורת נתונים יוצאת (PSC-I).

כשמריצים את ארגז החול בתוך היקף, הפריטים הבאים נשארים מוגנים בתוך הגבולות:

  • נתונים שהסוכן קורא או כותב במהלך סשן ארגז חול (קבצים בדיסק של ארגז החול, מצב בזיכרון).
  • תמונות מצב של ארגז חול שמתעדות את מצב הדיסק והזיכרון ונשמרות אוטומטית בקטגוריה של Cloud Storage.
  • בקשות ותגובות שמועברות דרך מישור הנתונים של ארגז החול (לדוגמה, פקודות לשימוש במחשב וצילומי מסך).
  • קובצי אימג' של קונטיינרים בהתאמה אישית שנשלפו מ-Artifact Registry.
  • קריאות שארגז החול שולח ל-Google APIs (לדוגמה, Cloud Storage או Agent Platform).

אפשר גם להגדיר בקרת תעבורת נתונים נכנסת ויוצאת בלי היקף של VPC Service Controls, כי PSC-E (תעבורת נתונים נכנסת פרטית) ו-PSC-I (תעבורת נתונים יוצאת) הם אלה שהופכים את ארגז החול לתואם ל-VPC Service Controls. כדי להגדיר תעבורת נתונים נכנסת ויוצאת בלי perimeter של VPC Service Controls, אפשר לדלג אל שליטה בתעבורת נתונים יוצאת של ארגז חול באמצעות ממשק Private Service Connect ‏ (PSC-I).

מגבלות ושיקולים

  • אפשר להפעיל כניסה פרטית לפרויקט צרכן אחד בלבד, והוא צריך להיות אותו פרויקט משתמש שבו פועל ארגז החול.
  • יש תמיכה רק ברזולוציה פרטית דרך קישור בין רשתות שכנות (peering) ב-DNS. העברת DNS ציבורית מושבתת כדי למנוע יצירת מנהרות.
  • אי אפשר לרשום ביומן בקשות ותגובות למשאבים שמוגנים על ידי VPC Service Controls.
  • הגישה הפרוגרמטית והגישה למסוף מחוץ להיקף נדחית, אלא אם המתקשר נמצא ברמת גישה.

לפני שמתחילים

  • יוצרים או מזהים את גבולות הגזרה לשירות של VPC Service Controls שמכילים את הפרויקט. כדי שארגזי החול יהיו מאובטחים על ידי גבולות הגזרה של VPC Service Controls, הפרויקט ב- Cloud de Confiance by S3NS צריך להיות בגבולות הגזרה לפני שיוצרים את ארגזי החול.
  • מפעילים את Agent Platform API ‏ (aiplatform.googleapis.com) בפרויקט.
  • רשת VPC באזור שבו אתם מריצים את ארגזי החול.
  • מוודאים שיש לכם את התפקידים הנדרשים:
    • תפקיד אדמין של Access Context Manager בסביבה המאובטחת
    • אדמין רשת של Compute‏ (roles/compute.networkAdmin) בפרויקט שבבעלותו נמצא מחבר הרשת.

הוספת Agent Platform לגבולות גזרה לשירות

מוסיפים את Agent Platform API לרשימת השירותים המוגבלים בהיקף של VPC Service Controls. כך פלטפורמת הסוכנים (כולל מישור הבקרה של ארגז החול) מוגנת, והגישה הציבורית לאינטרנט נחסמת ל-API, אלא אם המתקשר נמצא ברמת גישה.

  1. פותחים את VPC Service Controls במסוף Cloud de Confiance ועורכים את היקף האבטחה.
  2. בקטע Restricted services, מוסיפים את Vertex AI API (aiplatform.googleapis.com).
  3. חשוב לוודא שהתלויות שבהן משתמשת סביבת ה-Sandbox נמצאות באותו היקף – בדרך כלל Cloud Storage (storage.googleapis.com) ו-Artifact Registry (artifactregistry.googleapis.com, לקובצי אימג' של קונטיינרים בהתאמה אישית). האחסון של קובצי ה-snapshot מטופל באופן אוטומטי.
  4. כדי לשחזר את הגישה למשתמשים מהימנים מחוץ להיקף (לדוגמה, הרשת הארגונית שלכם), צריך לצרף רמת גישה להיקף.

אופציונלי: הגדרת גישה פרטית לממשקי Google API

בתוך אזור VPC Service Controls, ארגז החול מגיע לממשקי Google APIs באופן פרטי דרך כתובת ה-IP הווירטואלית (VIP) המוגבלת. גם מרשתות ה-VPC והרשתות המקומיות שלכם, כדאי להשתמש בכתובת ה-VIP המוגבלת כדי שהבקשות אף פעם לא יעברו דרך האינטרנט הציבורי.

  • מנתבים את *.googleapis.com ל-VIP המוגבל 199.36.153.4/30 ומפעילים את הגישה הפרטית ל-Google ברשתות המשנה שקוראות לממשקי Google API.
  • יוצרים אזורים פרטיים ב-Cloud DNS בשביל googleapis.com (ואם אתם שולפים קובצי אימג', בשביל pkg.dev או gcr.io) שמתחברים ל-VIP המוגבל.

שליטה בתעבורת נתונים יוצאת (egress) מארגז החול באמצעות ממשק Private Service Connect ‏(PSC-I)

כדי לאפשר לארגז החול להגיע לאינטרנט או לשירותים פרטיים, צריך לגשר על תעבורת הנתונים היוצאת שלו ל-VPC באמצעות ממשק Private Service Connect, ואז לנהל את תעבורת הנתונים הזו באמצעות אמצעי הבקרה שלכם על תעבורת הנתונים היוצאת.

כל משאב בשלב הזה נוצר בפרויקט המשתמש שבבעלותו ארגז החול, או בפרויקט המארח של ה-VPC המשותף שלו. תעבורת הנתונים היוצאת מופנית לרשת ה-VPC היחידה ולמחבר הרשת שהגדרתם בתבנית.

יצירת חיבור הרשת

יוצרים את מחבר הרשת לארגז החול:

# A dedicated subnet for the PSC interface (minimum /28)
gcloud compute networks subnets create sandbox-psc-subnet \
    --network=YOUR_VPC \
    --range=10.0.0.0/28 \
    --region=REGION

# The network attachment the sandbox connects into
gcloud compute networks network-attachments create sandbox-egress-na \
    --region=REGION \
    --connection-preference=ACCEPT_AUTOMATIC \
    --subnets=sandbox-psc-subnet

הפניה לקובץ המצורף מתבנית ארגז החול

מגדירים את שדות היציאה ב-SandboxEnvironmentTemplate כך שהארגז החול ינתב את היציאה דרך ה-VPC:

from vertexai import Client

client = Client(project="PROJECT_ID", location="REGION",
                http_options={"api_version": "v1beta1"})

templates = client.agent_engines.sandboxes.templates
op = templates.create(
    name=agent_instance_name,
    display_name="cu-vpcsc-template",
    config={
        "custom_container_environment": {
            "custom_container_spec": {"image_uri": "IMAGE_URI"},
            "ports": [{"port": 8080, "protocol": "TCP"}],
        },
        "egress_control_config": {
            "internet_access": True, # Enables outbound access from the sandbox. With VPC-SC, that traffic is bridged into your VPC.
            "customer_vpc_network":
                "projects/PROJECT_ID/global/networks/YOUR_VPC", # The VPC network in your project that egress is bridged into. Checked by VPC-SC at creation time.
            "network_attachment":
                "projects/PROJECT_ID/regions/REGION/networkAttachments/sandbox-egress-na", # The network attachment that accepts the sandbox's PSC interface.
        },
    },
)

ממשק ה-PSC יוצר את הנתיב הפרטי ל-VPC, והפלטפורמה מנתבת באופן אוטומטי את תעבורת הנתונים היוצאת של ארגז החול לנתיב הזה כשמפעילים את internet_access.

כדי להגדיר ולשלוט בנתיב היציאה מה-VPC, צריך להחליט אם אתם צריכים יציאה לאינטרנט או יציאה פרטית בלבד:

  • תעבורת נתונים לאינטרנט: כדי לאפשר תעבורת נתונים לאינטרנט, צריך להשתמש ב-Cloud NAT, ובנוסף בבקרת יעד באמצעות כללים של Cloud Next Generation Firewall ‏ (Cloud NGFW) או Secure Web Proxy.
  • תעבורת נתונים יוצאת פרטית בלבד (גישה לשירותים ב-VPC או באתר המקומי, ללא אינטרנט): לא נדרש Cloud NAT. אתם צריכים רק נתיבים, כלל של חומת אש וקישור בין רשתות שכנות (peering) ב-DNS.

הגדרה של תעבורת נתונים לאינטרנט וניהול של יעדים

ארגז החול נכנס ל-VPC שלכם בכתובת פנימית (RFC 1918), ולכן הוא צריך Cloud NAT כדי להגיע לאינטרנט. כדאי לשמור כתובת IP סטטית ליציאה אם רשימת ההיתרים של היעדים מבוססת על כתובת ה-IP של המקור.

# Reserve a static egress IP (optional, for destination-side allow-listing)
gcloud compute addresses create sandbox-egress-ip --region=REGION

# Cloud Router + NAT for the region, scoped to the PSC subnet
gcloud compute routers create sandbox-egress-router \
    --network=YOUR_VPC --region=REGION

gcloud compute routers nats create sandbox-egress-nat \
    --router=sandbox-egress-router --region=REGION \
    --nat-external-ip-pool=sandbox-egress-ip \
    --nat-custom-subnet-ip-ranges=sandbox-psc-subnet

כדי להגביל את היעדים שארגז החול יכול להגיע אליהם כשהתנועה שלו עוברת ב-VPC, צריך לבחור את רמת השליטה הרצויה:

  • ‫Cloud NGFW (ברמת הרשת): מדיניות חומת אש בין רשתות גלובליות עם כללי הרשאה (יש תמיכה באובייקטים של FQDN) ודחייה כברירת מחדל לכל השאר:

    gcloud compute network-firewall-policies create sandbox-egress-policy --global
    
    # Allow only the destinations your agent needs (by FQDN)
    gcloud compute network-firewall-policies rules create 1000 \
        --firewall-policy=sandbox-egress-policy --global-firewall-policy \
        --direction=EGRESS --action=allow --layer4-configs=tcp:443 \
        --dest-fqdns=api.partner.example.com
    
    # Default-deny the rest of egress
    gcloud compute network-firewall-policies rules create 65000 \
        --firewall-policy=sandbox-egress-policy --global-firewall-policy \
        --direction=EGRESS --action=deny --layer4-configs=all \
        --dest-ip-ranges=0.0.0.0/0
    
    gcloud compute network-firewall-policies associations create \
        --firewall-policy=sandbox-egress-policy --global-firewall-policy \
        --network=YOUR_VPC
    
  • ‫Secure Web Proxy (אפליקציה/L7): פורסים את Secure Web Proxy כנקודת הבדיקה של תעבורת הנתונים היוצאת ב-VPC, למדיניות מבוססת-כתובת URL שתואמת ל-TLS, ומנתבים דרכה את תעבורת הנתונים היוצאת של רשת המשנה של ה-PSC.

הגדרה לתעבורת נתונים יוצאת פרטית בלבד

אם לארגז החול נדרשים רק שירותים פרטיים ב-VPC או באופן מקומי, צריך לוודא שיש ל-VPC נתיב ליעד, לאפשר אותו באמצעות כלל חומת אש לתעבורת נתונים יוצאת (egress) מרשת המשנה של ה-PSC (10.0.0.0/28), ולפתור את שם השירות באמצעות קישור בין רשתות שכנות (peering) ב-DNS.

הגדרת קישור בין רשתות שכנות (peering) ב-DNS

נותנים לארגז החול תרגום שם (name resolution) דרך ה-VPC במקום פותרים ציבוריים (זה גם חוסם זליגת מידע דרך מנהרת DNS). יוצרים אזור פרטי של Cloud DNS ב-VPC עם הרשומות שארגז החול צריך, ואז מגדירים קישור בין רשתות שכנות (peering) ב-DNS כדי שארגז החול יתאים שמות מהאזור הזה.

מתן גישה לסוכן השירות (VPC משותף)

אם מחבר הרשת נמצא בפרויקט נפרד (פרויקט א') מהפרויקט שבו פועלת סביבת ה-Sandbox (פרויקט ב'), צריך להקצות לסוכן השירות של Agent Platform בפרויקט ב' את התפקיד "משתמש ברשת Compute" בפרויקט א'.

# Agent Platform service agent of the project that runs the sandbox
service-PROJECT_NUMBER@gcp-sa-aiplatform.s3ns-system.iam.gserviceaccount.com

# On the project that owns the network attachment
gcloud projects add-iam-policy-binding NETWORK_PROJECT_ID \
    --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-aiplatform.s3ns-system.iam.gserviceaccount.com" \
    --role="roles/compute.networkUser"

מחליפים את מה שכתוב בשדות הבאים:

  • ‫PROJECT_NUMBER: מספר הפרויקט שבו פועל ארגז החול.
  • ‫NETWORK_PROJECT_ID: מזהה הפרויקט שבבעלותו מצורף הרשת.

הפעלת תעבורת נתונים נכנסת פרטית באמצעות Private Service Connect ‏ (PSC-E)

עומסי עבודה אינטראקטיביים חושפים מישור נתונים שהלקוח צריך להתחבר אליו. גישה למישור הנתונים הזה דרך נקודת קצה פרטית של Private Service Connect ‏ (PSC-E) ב-VPC, במקום דרך האינטרנט הציבורי.

הצהרה על פרויקט הצרכן המורשה

מגדירים את תצורת תעבורת הנתונים הנכנסת בתבנית, כך שפרויקט הצרכן יוכל להתחבר. רק לפרויקט המשתמש שבו פועל ארגז החול יכולה להיות גישה פרטית ל-VPC של ארגז החול.

מתחברים לארגז החול מ-VPC באותו פרויקט:

config = {
    # ...custom_container_environment, egress_control_config...
    "ingress_control_config": {
        "private_service_connect_config": {
            # Must be the same project the sandbox runs in.
            "enable_private_service_connect": True,
        }
    },
}

יצירת נקודת קצה של PSC ב-VPC

אחרי שארגז החול נוצר, קוראים את פרטי החיבור של שירות ה-Attachment ומגדירים אותו כיעד באמצעות כלל העברה (נקודת קצה של PSC) ב-VPC:

# The sandbox returns a service attachment to connect to
service_attachment = sandbox.connection_info.service_attachment
# Reserve an internal IP and create the PSC endpoint
gcloud compute addresses create sandbox-ingress-ip \
    --region=REGION --subnet=YOUR_SUBNET

gcloud compute forwarding-rules create sandbox-ingress-ep \
    --region=REGION \
    --network=YOUR_VPC \
    --address=sandbox-ingress-ip \
    --target-service-attachment=SERVICE_ATTACHMENT_URI

לקוחות ב-VPC של הפרויקט הזה (או כאלה שאפשר להגיע אליהם דרכו) מתחברים עכשיו לארגז החול דרך כתובת ה-IP הפרטית של נקודת הקצה (לדוגמה, לקוח שמתחבר דרך WebSocket או יציאת CDP של ארגז החול).

המאמרים הבאים