沙箱總覽

許多代理工作涉及執行不受信任的程式碼、執行指令、使用網路瀏覽器,或與外部環境互動,這些行為可能帶來安全風險。Gemini Enterprise Agent Platform 提供獨立的沙箱,可安全處理這些工作負載。

沙箱提供安全、隔離的執行環境,可代表代理執行特定工作。在沙箱中執行這些作業,可保護基礎架構和資料,避免代理執行潛在惡意或錯誤動作。沙箱可透過下列方式降低這些風險:

  • 隔離:每個沙箱都與其他沙箱和主機系統隔離。代理在沙箱中採取的動作,不會影響共用相同執行階段資源的其他代理或使用者。
  • 安全性:沙箱內的作業會受到限制,防止未經授權存取資源。所有沙箱環境都使用安全容器沙箱,提供強大的安全邊界。惡意程式碼無法存取執行階段中的機密資料或憑證。
  • 安全性:如果代理執行有害指令或無限迴圈,影響範圍會侷限在沙箱內。舉例來說,編寫不當或惡意的程式碼可能會耗盡所有可用的 CPU 或記憶體。

沙箱與執行階段比較

Agent Runtime 和沙箱的用途和使用方式不同:

  • Agent Runtime:代理的核心邏輯、決策和自動化調度管理作業,都會在這個環境中執行。這個環境安全可靠,可執行程式碼並管理代理的生命週期。
  • 沙箱:由代理或平台產生的輔助環境,用於執行特定、可能有安全疑慮的工作。沙箱可以是短暫的、以工作階段為基礎,或是有狀態的,可持續數天。

舉例來說,如果代理需要生成並執行自訂 Python 指令碼,來計算複雜公式,就應該在執行程式碼沙箱中執行該指令碼,而非在自己的執行階段中執行。此外,如果代理使用技能和殼層指令碼,則必須在專為該工作階段佈建的環境中執行,並使用使用者的存取權。

存留時間和沙箱佈建速度

沙箱環境具有下列存留時間 (TTL) 和佈建特性:

  • TTL:沙箱的存留時間不盡相同,從自訂容器映像檔的 7 天,到執行程式碼沙箱的 14 天不等。這樣一來,您就能在幾天後於沙箱環境中恢復狀態,繼續執行長程任務和可繼續的殼層環境。
  • 佈建:建立新的沙箱時,最多需要 2 分鐘才能從冷啟動佈建資源,但佈建完成後,沙箱通常會在幾秒內啟動。您可以在下列開放原始碼專案中查看基礎架構:AX 和 Substrate。

功能與特色

沙箱提供多項功能,例如預先定義的沙箱、自訂容器、企業安全控管和生命週期管理:

  • 執行程式碼:允許代理在安全環境中生成及執行程式碼。這項功能適用於複雜的數學運算、資料分析和其他需要運算的工作。
  • 電腦使用:可讓代理與網路瀏覽器互動,執行填寫表單、搜尋網路或瀏覽複雜 UI 工作流程等工作。
  • 自訂容器:您可以「自備容器」,使用特定程式庫、工具或設定自訂執行環境。使用這項功能,即可為代理提供殼層環境,其中包含自訂映像檔中的指令和工具。
  • VPC Service Controls:設定安全 perimeter,保護機密資料,並防止未經授權的資料從沙箱環境輸出。
  • 客戶自行管理的加密金鑰 (CMEK):使用 Cloud Key Management Service (Cloud KMS) 管理的加密金鑰,保護沙箱中的靜態資料。

安全性、身分和觀測能力界限

設計在沙箱中執行不信任程式碼或指令的代理時,請考量 Agent Platform 如何區分 Agent Runtime 和沙箱容器之間的執行身分、網路輸出篩選和稽核記錄。

執行身分和憑證邊界

在沙箱中執行的程式碼,會在 Google 代管的租戶專案中,透過 gVisor 隔離的容器執行,不會沿用上層代理的身分或憑證。下表彙整沙箱作業涉及的身分:

身分層 主體 範圍和權限
上層代理 Agent Runtime 身分 代理身分 (principal://agents.global.org-ORG_ID.system.id.goog/...),或附加至 ReasoningEngine 執行個體的自訂或預設服務帳戶 在 Agent Runtime 執行的自動調度管理程式碼會使用這個帳戶,呼叫 Google Cloud API 並管理或叫用沙箱。一律不會掛接至沙箱容器。
沙箱服務代理 service-PROJECT_NUMBER@gcp-sa-vertex-sandbox.iam.gserviceaccount.com Google 代管的專案專屬服務代理,由沙箱控制層用於基礎架構工作,例如從 Artifact Registry 提取自訂容器映像檔,或使用 CMEK 金鑰。在沙箱中執行的程式碼一律無法存取。
沙箱內執行環境 無權限容器使用者 (例如殼層沙箱中的 appuser),由無權限租戶身分 (sandbox-untrusted) 支援,在專案中沒有任何 Identity and Access Management (IAM) 角色 在沙箱 Pod 內執行不受信任的程式碼。沒有環境 Google Cloud 憑證,也沒有專案或上層ReasoningEngine的權限。

在沙箱中執行程式碼時,請留意下列憑證和驗證界線:

  • 沒有環境憑證或中繼資料伺服器權杖存取權:沙箱程式碼沒有專案的應用程式預設憑證 (ADC),也無法查詢 Compute Engine 中繼資料伺服器 (169.254.169.254:80) 來建立 OAuth 2.0 存取權杖、讀取服務帳戶金鑰或檢查主專案中繼資料。
  • 來電者驗證:代理或用戶端會使用 IAM (aiplatform.sandboxEnvironments.execute 權限,包含在 roles/aiplatform.user 等角色中) 或 generate_access_token 或 generate_browser_ws_headers 產生的短期存取權杖,向沙箱控制層和資料層驗證身分。
  • 驗證沙箱內部的外撥通話:由於沙箱沒有環境身分,因此直接從沙箱內部發出的任何外部 API 呼叫,都必須使用您明確提供的憑證。建議在 Agent Runtime 的上層代理中執行經過驗證的 Google Cloud API 作業,並只將必要的輸入資料傳遞至沙箱。如果沙箱內的程式碼必須直接呼叫外部服務,請為該特定執行作業插入短期、範圍狹窄的權杖,而非傳遞長期服務帳戶金鑰。

網路輸出和網域許可清單

沙箱並未在沙箱或 SandboxEnvironmentTemplate 資源上提供內建的網域許可清單屬性。外送網路行為取決於沙箱類型和範本上的 egress_control_config 設定:

  • 執行程式碼沙箱:執行時不需具備傳出網際網路或虛擬私有雲 (VPC) 網路存取權。
  • 範本支援的沙箱 (電腦使用、Shell 沙箱和自訂容器): 預設停用對外網際網路存取權 (internet_access 為 False)。
  • 直接網際網路輸出 (internet_access: True,不含 network_attachment): 授予沙箱不受限制的公開 IP 位址 (0.0.0.0/0) 傳出存取權,但網路政策會封鎖私人 RFC 1918 位址範圍 (10.0.0.0/8、172.16.0.0/12、192.168.0.0/16) 和連結本機中繼資料範圍 (169.254.0.0/16) 的存取權。您無法直接在 egress_control_config 指定允許或拒絕的網域清單。
  • 使用虛擬私有雲控制項設定網域許可清單和輸出篩選:如要將沙箱限制在特定網域 (FQDN)、網址或 IP 範圍,請在範本上設定 egress_control_config.network_attachment,透過 Private Service Connect (Private Service Connect) 介面將所有沙箱輸出橋接至虛擬私有雲。流量進入虛擬私有雲後,請使用下列項目強制執行網域許可清單和傳出政策:
    • Cloud Next Generation Firewall (Cloud NGFW):建立全域網路防火牆政策輸出規則,允許特定目的地 FQDN 或 IP 範圍,並拒絕所有其他傳出流量 (0.0.0.0/0)。
    • Secure Web Proxy:透過 Secure Web Proxy 轉送 Private Service Connect 子網路的輸出流量,進行第 7 層 TLS 檢查和網址層級許可清單。
    • Cloud DNS 對接:設定 dns_peering_configs 和私人 Cloud DNS 區域,讓沙箱只透過虛擬私有雲解析核准的名稱,而非公開 DNS 解析器。

如需逐步設定操作說明,請參閱「設定 VPC Service Controls 和 Private Service Connect 與沙箱」。

稽核記錄與威脅偵測

沙箱的觀測能力和安全監控功能涵蓋 Agent Platform API 控制和資料層、Agent Runtime 上的上層代理,以及虛擬私有雲網路。

Cloud 稽核記錄涵蓋範圍

針對向沙箱資源發出的 API 呼叫,Agent Platform 會在 aiplatform.googleapis.com 服務名稱和 audited_resource 受監控資源類型下,寫入 Cloud 稽核記錄項目,但不會為容器內產生的內部程序產生稽核記錄項目。下表彙整各邊界記錄的內容:

活動類型 API 方法或作業 記錄類別 附註
沙箱和範本生命週期異動 CreateSandboxEnvironment、DeleteSandboxEnvironment、SnapshotSandboxEnvironment、PauseSandboxEnvironment、ResumeSandboxEnvironment、CreateSandboxEnvironmentTemplate、UpdateSandboxEnvironmentTemplate、DeleteSandboxEnvironmentTemplate、DeleteSandboxEnvironmentSnapshot 管理員活動 (ADMIN_WRITE) 預設一律啟用。記錄呼叫端身分、資源名稱和作業中繼資料。
沙箱和範本中繼資料讀取 GetSandboxEnvironment、ListSandboxEnvironments、GetSandboxEnvironmentTemplate、ListSandboxEnvironmentTemplates、GetSandboxEnvironmentSnapshot、ListSandboxEnvironmentSnapshots 資料存取 (ADMIN_READ) 預設停用。啟用 aiplatform.googleapis.com 的 ADMIN_READ 記錄,稽核哪些人檢查或列出沙箱。
資料層指令執行和存取授權 ExecuteSandboxEnvironment、BidiExecuteSandboxEnvironment、AuthorizeSandboxEnvironmentAccess、ExecuteCode 資料存取 (DATA_WRITE) 預設停用。啟用 aiplatform.googleapis.com 的 DATA_WRITE 記錄,稽核執行 RPC 和權杖產生作業。對於 VPC Service Controls 範圍內的資源,稽核記錄會省略要求和回應酬載。
容器內子程序、檔案寫入和互動式串流框架 殼層指令產生的子程序、檔案系統修改,以及透過開放式 WebSocket、Chrome 開發人員工具通訊協定 (CDP) 或 PTY 工作階段傳送的個別框架 未記錄在 Cloud 稽核記錄中 Cloud 稽核記錄會記錄初始 API 呼叫 (ExecuteSandboxEnvironment、BidiExecuteSandboxEnvironment 或 AuthorizeSandboxEnvironmentAccess),而非後續的客體內系統呼叫或串流框架。
容器 stdout 和 stderr 輸出 在沙箱中執行的指令產生的標準輸出內容和錯誤串流 在執行 API 回應中傳回 自動 Cloud Logging 收集功能 (例如 reasoning_engine_stdout) 僅適用於父項 ReasoningEngine 執行階段,不會從沙箱子項資源收集記錄。在 Agent Runtime 記錄上層代理的指令輸出內容,或參閱「管理沙箱」。

威脅偵測與監控

沙箱會在 Google 代管的租戶專案中,使用 gVisor 核心隔離功能強制執行執行階段容器,且不會執行內建的訪客主機入侵偵測代理程式,或自動預先部署安全漏洞掃描程式。如要監控沙箱活動並偵測威脅,請結合下列控制項:

  • 啟用資料存取稽核記錄:在 aiplatform.googleapis.com 上啟用 ADMIN_READ 和 DATA_WRITE Cloud 稽核記錄,偵測未經授權的沙箱建立、存取權杖產生 (AuthorizeSandboxEnvironmentAccess) 或執行要求。
  • 監控上層代理行為:啟用代理異常偵測,分析 Agent Runtime 代理的追蹤記錄、工具叫用和執行模式。
  • 檢查虛擬私有雲中的網路輸出:使用 Private Service Connect 介面,將沙箱輸出橋接至虛擬私有雲,並在 Private Service Connect 子網路、Cloud NGFW 規則記錄、Secure Web Proxy 存取記錄和 Cloud DNS 查詢記錄中啟用虛擬私有雲流量記錄,偵測異常的傳出連線或資料竊取企圖。
  • 在部署前掃描自訂容器映像檔:使用自訂容器 (BYOC) 時,請在 Artifact Registry 啟用安全漏洞掃描功能,找出有安全漏洞的套件,再於 SandboxEnvironmentTemplate 參照映像檔 URI。