您可以建立 Identity and Access Management (IAM) 統一存取政策 (UAP),安全地控管代理主體與目的地資源之間的通訊,例如目的地代理、MCP 伺服器和端點。這些政策會繫結至含有 Agent Gateway 執行個體的專案。
Agent Gateway 會使用 Identity-Aware Proxy (IAP) 評估及強制執行 UAP。
IAP 也與情境感知存取權整合,提供端對端代理身分驗證和授權。
如要為 Agent Gateway 設定 UAP,請參閱「設定 IAM UAP」。
您也可以在代理身分上建立主體存取邊界 (PAB)。Agent Gateway 可使用 IAP 強制執行主體存取邊界政策。
啟用 Agent Gateway
如要使用代理通訊政策,請設定 Agent Gateway。
建議您在測試環境中,以模擬測試模式 (DRY_RUN) 設定 Agent Gateway,確認政策是否正常運作。
確認政策運作正常後,即可更新 Agent Gateway 設定,將強制執行模式設為 ENFORCE。在這個模式下,系統會禁止違反政策的代理通訊,並封鎖與資源的通訊。
UAP 總覽
UAP 可控管一或多個代理主體是否能存取一或多項目的地資源。UAP 支援在單一政策中設定多項規則,藉此擴充 IAM 政策模型。與 IAM 允許政策和拒絕政策不同,UAP 中的每項規則都可以同時具有允許和拒絕效果。進一步瞭解 IAM 政策類型。
規則也包含以一般運算語言 (CEL) 表示的條件。條件是控管閘道後資源存取權的主要機制。透過 Agent Gateway 和 IAP 實施 UAP,可嚴格控管企業部署的代理行為。您可以在單一政策中,呈現實際、精細的代理治理用途。
一般政策至少包含兩項不同的規則:
- 允許規則:允許規則具有「允許」效果,可讓代理主體存取特定安全作業,例如對工具執行讀取作業,擷取追蹤資料或查看登錄項目。
- 拒絕規則:拒絕規則具有「拒絕」效果,可禁止代理執行不必要的動作,例如在未經指令的情況下,對重要資源執行刪除或更新作業。
舉例來說,假設自動化客服代理需要與內部工具互動,而這些工具具有客戶資料庫的特殊存取權。管理員會使用 IAP 設定 Agent Gateway,強制執行 IAM UAP。管理員可以設定 UAP,其中包含允許規則,授權代理主體讀取支援單,以及拒絕規則,禁止代理主體刪除或更新資料庫記錄。
透過使用包含允許和拒絕規則的 UAP,組織可以直接將單一企業法規遵循政策部署到基礎雲端基礎架構上,以限制代理行為。
最佳做法
設定代理輸出政策時,請遵循下列最佳做法:
- 使用模擬測試模式:先在模擬測試模式下部署新政策或修改後的政策,確保政策運作正常,不會阻擋有效的代理程式流量。
- 落實最小權限原則:只授予必要權限。在 CEL 條件中,請使用特定工具名稱或路徑,而非萬用字元。
- 使用拒絕規則做為防護措施:使用明確的拒絕規則,實施重要的防護措施,例如在正式環境端點封鎖破壞性工具。使用拒絕規則做為護欄非常有效,因為拒絕規則會覆寫允許規則。
- 定期稽核:定期查看 Cloud 稽核記錄和政策設定,確認符合組織的安全政策。
UAP 元件
UAP 包含一或多項規則。規則包含下列元件:
代理主體
在 IAM UAP 中,您可以定義一或多個代理主體。代理主體是您授予存取權的成員。您可以依據代理身分 (即與資源啟動通訊的代理身分) 指定代理。如要進一步瞭解不同類型的代理程式如何取得身分,請參閱「代理程式身分」。代理身分是以主體 ID 表示,其中包含 SPIFFE 格式的代理身分 (例如 principal://agents.global.org-...)。
您可以指定個別代理身分陣列或主體集陣列。
內建代理身分會在 Google Cloud 服務中佈建,例如 Agent Runtime (推論引擎)、Gemini Enterprise (Discovery Engine),以及設定代理身分的 Cloud Run 服務。這些代理主體的格式為 principal://TRUST_DOMAIN/AGENT_UNIQUE_IDENTIFIER,其中 ID 代表代理在託管服務上的資源路徑。您也可以使用 Workload Identity Federation 主體 ID 指定代理。
規則效用
規則作用會定義規則是否允許或禁止代理主體存取資源。
目的地資源
IAM UAP 可管理代理主體對目的地資源的存取權。目的地資源是指代理主體嘗試存取的資源。目的地資源是在規則條件中指定。目的地資源可以是已註冊資源或未註冊資源。
已註冊的資源
已註冊資源是指在 Agent Registry 註冊資料庫中註冊的資源。
註冊的資源包括:
- 儲存庫:專案中的整個代理儲存庫。
- MCP 伺服器:在代理程式註冊資料庫中註冊的 MCP 伺服器。
- 代理:在代理登錄檔中註冊的代理。您可以透過代理身分個別指定代理。您可以使用主體集 ID 指定一組代理。
- 端點:在代理程式登錄檔中註冊的端點。
個別服務可在 Agent Registry 註冊。如果您將代理程式登錄檔區域化,且規則會管理已註冊資源的存取權,則 UAP 只會套用至登錄檔區域中的資源。
未註冊的資源
未註冊的資源是指未在代理程式登錄檔中註冊的資源。如要在 UAP 規則中授予或拒絕未註冊資源的存取權,您必須使用包含未註冊主機和路徑屬性的一般運算語言 (CEL) 運算式,在規則條件中指定未註冊資源。
條件
在 UAP 規則中,您可以使用 conditions 區塊中的一般運算語言 (CEL) 運算式,定義目標資源範圍和精細存取條件:
目標資源範圍:指出規則控管「哪些」目的地資源。在 JSON 格式的政策檔案中,您需要指定目的地屬性,例如
destination.agent_registry.mcp_server.name或destination.unregistered.host。在 Google Cloud 控制台中,選取「Target resources」(目標資源) 下方的目的地,系統會自動將這些資源條件新增至規則的條件運算式。存取條件:使用布林運算式,決定規則效果的套用時機和限制條件。例如,您可以使用 UAP CEL 屬性,根據工具名稱、唯讀狀態、HTTP 方法或路徑前置字串限制存取權。只有在整個 CEL 運算式的評估結果為
true時,規則效果 (允許或拒絕) 才會生效。
在 gcloud CLI 和 REST API 中,您可以在規則定義的 conditions 欄位中指定這些 CEL 運算式。
在 Google Cloud 控制台中,您可以使用條件建構工具設定標準規則,或直接在條件編輯器中編寫自訂 CEL 運算式。
權限
在採用 IAM UAP 的 IAP V2 中,目的地資源一律會獲得 iap.googleapis.com/resources.egressViaIAP 權限。在 gcloud CLI 和 REST API 中,您可以在政策檔案的 operation.permissions 欄位中指定權限。
政策建立選項
在 Google Cloud 控制台的「Policies」(政策) 頁面中,您可以建立 IAM UAP。建議您只建立 UAP (IAM v3 政策)。
在 gcloud CLI 和 REST API 中,您可以先建立 JSON 格式的檔案,再設定 IAM UAP。建議您只建立 UAP。
端對端驗證與授權
IAP 和情境感知存取權會使用下列通訊協定,提供預設的端對端代理身分驗證和授權:
- 雙向傳輸層安全標準 (mTLS)
- Demonstrating Proof of Possession (DPoP)
代理身分會透過 X.509 憑證和憑證繫結權杖佈建。IAP 會強制要求代理身分使用相互傳輸層安全性 (mTLS),向 Agent Gateway 進行驗證。當閘道允許代理程式輸出及存取 Google Cloud API、MCP 伺服器、其他代理程式和端點時,代理程式會嘗試存取 mTLS 邊界以外的資源。為保護通訊安全,情境感知存取權會強制執行 Google 管理的情境感知存取權政策。這項政策規定會要求 DPoP 驗證與 Agent Identity 繫結的憑證繫結權杖。如要進一步瞭解情境感知存取權如何使用 mTLS 和 DPoP,請參閱「情境感知存取權代理程式安全性」。
UAP CEL 屬性
您可以在 UAP 中使用條件運算式定義條件。運算式可以包含多個子運算式。您在每個關聯子條件中使用的目的地資源類型,會決定您可以使用哪些屬性。
舉例來說,在下列條件中,子運算式 destination.unregistered.path.startsWith('/v1/statements') 的資源類型是未註冊的目的地,屬性是 destination.unregistered.path,startsWith() 則是 CEL 函式。
destination.unregistered.host == 'finance.example.com' &&
destination.unregistered.path.startsWith('/v1/statements')
下表列出各資源類型可用的屬性:
| 目的地資源類型 | 屬性 | 詳細資料 | ||||||
|---|---|---|---|---|---|---|---|---|
Agent Registry |
destination.is_registered |
|
||||||
destination.agent_registry.resource_type |
|
|||||||
destination.agent_registry.location |
|
|||||||
destination.agent_registry.project_id |
|
|||||||
代理 |
destination.agent_registry.agent.name |
|
||||||
MCP 伺服器 |
destination.agent_registry.mcp_server.name |
|
||||||
destination.agent_registry.mcp_server.method |
|
|||||||
destination.agent_registry.mcp_server.tool.name |
|
|||||||
destination.agent_registry.mcp_server.tool.annotations.read_only_hint
|
|
|||||||
destination.agent_registry.mcp_server.tool.annotations.destructive_hint
|
|
|||||||
destination.agent_registry.mcp_server.tool.annotations.idempotent_hint
|
|
|||||||
destination.agent_registry.mcp_server.tool.annotations.open_world_hint
|
|
|||||||
destination.agent_registry.mcp_server.prompt.name |
|
|||||||
destination.agent_registry.mcp_server.resource.name |
|
|||||||
端點 |
destination.agent_registry.endpoint.name |
|
||||||
未註冊的目的地 |
destination.unregistered.host |
|
||||||
destination.unregistered.path |
|
|||||||
destination.unregistered.method |
|