透過 Model Context Protocol 確保代理程式互動安全的最佳做法
Model Context Protocol (MCP) 會規範生成式 AI 代理程式連線至 Bigtable 的方式。由於自主代理程式具有固有風險,因此必須採用共責式模型,結合平台控管措施和安全應用程式設計,才能減輕提示注入等安全漏洞。
如要設計及部署使用 Model Context Protocol (MCP) 工具的 AI 應用程式,請按照本指南中的最佳做法操作。 Google Cloud
事前準備
使用 MCP 工具時,應用程式的資安態勢取決於代理程式的互動模型。如要瞭解使用代理對安全性的影響,以及將代理與 MCP 伺服器整合時的相關風險,請參閱「AI 安全性」。
安全責任
身為客戶,您有責任確保代理程式平台設定和運作安全無虞。
遵循最小權限原則
使用範圍最小的服務帳戶執行代理程式。這是第一道也是最重要的防禦措施。
- 專屬身分:使用 MCP 工具時,請為每個專屬代理程式或應用程式建立個別的專屬服務帳戶。請勿重複使用現有服務帳戶,尤其是具備廣泛權限的服務帳戶。
- 最小範圍:只授予服務帳戶必要的 Identity and Access Management (IAM) 角色,例如
alloydb.viewer,而非alloydb.admin。如果代理程式只需要特定資料集的讀取權限,請使用自訂 IAM 角色,將存取權限制在執行功能所需的最低限度。 - 職責分離:如果代理程式需要資料的讀取權限,以及記錄或暫時儲存空間的寫入權限,請使用兩個不同的服務帳戶,一個用於高風險資料存取權 (範圍盡量縮小),另一個用於低風險作業工作。
使用資料庫原生精細控制項
如要獲得最強大的防禦能力,請將 IAM 角色與資料庫本身提供的精細存取權控管機制結合使用。這可確保即使攻擊者入侵代理程式的 IAM 權杖,資料庫引擎的內部權限也會限制損害範圍,例如防止 DROP TABLE
指令。
產品 |
精細的控制機制 |
Focus |
|---|---|---|
Cloud SQL 和 AlloyDB |
資料庫層級的角色,例如 PostgreSQL 和 MySQL 中的 CREATE ROLE。 |
管理特定資料庫執行個體和結構定義中的權限。 |
BigQuery |
資料欄層級存取控管 (使用政策標記) |
即使在授權資料表中,也要限制代理人存取機密資料欄 (例如 PII)。 |
Spanner |
精細的存取權控管機制 (具備資料庫角色 GRANT/REVOKE) |
對資料表和資料欄強制執行精確的讀取/寫入/更新權限。 |
Firestore |
IAM 角色和 IAM 條件 |
使用 IAM 角色和 IAM 條件,設定每個資料庫的存取權。 |
Bigtable |
IAM 角色 |
Bigtable 提供精細的控制項,可透過專案、執行個體和資料表層級的 IAM 角色進行控管。 |
安全地設計代理
Agent-Only 模型需要強大的應用程式層級防禦機制,才能抵禦提示詞注入攻擊 (這類攻擊會嘗試覆寫系統提示)。詳情請參閱「AI 安全與保障」。
將資料和使用者輸入內容視為不受信任
將來自使用者的輸入內容,或代理程式從外部來源擷取的資料 (例如網頁搜尋結果或第三方文件) 視為不受信任。
導入動作選取模式
避免開放式規劃和執行 架構,其中系統會將高階工作規格與機械執行作業分離。請改用可限制模型自由度的設計模式。
- 動作選取器模式:模型唯一的工作是將使用者要求轉換為一組預先定義的安全函式。動作邏輯是硬式編碼,無法由 LLM 修改。這有助於讓代理程式免於針對控制流程的注入攻擊。
- 雙 LLM 模式:使用主要 LLM (動作 LLM) 執行核心工作,並使用次要的高安全性 LLM (防護 LLM) 預先篩選使用者提示詞,找出惡意意圖,以及篩選動作 LLM 的輸出內容,找出未經授權的動作或資料外洩。
防止未經授權的工具鍊結
代理程式只能呼叫工作所需的工具。請確保您的協調程式碼可防止下列情況:
- 動態工具:代理程式不得動態註冊新工具,也不得變更現有工具的權限。
- 強制執行許可清單:在代理程式的初始系統提示和後端程式碼中,宣告代理程式可存取的函式或資料庫表格許可清單。如需 Gemini CLI 範例,請參閱「限制工具存取權」。
限制多租戶資料庫的資料存取權
一般工具 (例如 execute_sql) 可讓呼叫端執行資料庫查詢,讀取 IAM 和資料庫權限允許存取的任何資料。建立可存取多租戶應用程式資料的代理程式時,如果沒有可信任的人機迴圈,您可能需要進一步限制資料存取權。
為確保代理程式只能讀取可存取的資料子集,建議您使用 MCP Toolbox for Databases 等架構建立自訂工具。詳情請參閱「預建工具與自訂工具」。
舉例來說,假設資料庫將所有使用者的訂單儲存在 Orders 資料表中。您正在開發可與使用者互動並查詢訂單的即時通訊代理程式。聊天機器人代理程式有權讀取整個 Orders 資料表,但使用者不得要求取得其他使用者的訂單資訊。
在不安全的環境中,您只為代理程式配備 execute_sql 工具,這會造成資料外洩的風險。惡意使用者可以誘騙服務專員讀取並傳回其他使用者的訂單。指示代理程式強制執行存取規則,通常不足以保護資料。
在安全情境中,您可以提供代理程式更具體的自訂工具 (例如 lookup_active_order),查詢篩選器中的使用者身分是在代理程式控制範圍外設定。
安全設定
Bigtable 提供 Model Armor,可在平台層級強制執行安全界線。您必須啟用並設定這些設定。
啟用 Model Armor
使用 Google Cloud CLI 在模型部署作業中啟用 Model Armor。這會啟用內建防護機制,防範已知的攻擊媒介,例如注入和越獄。
以下範例會在 Vertex AI 端點上啟用 Model Armor。
# Example: Enable Model Armor on a Vertex AI endpoint
gcloud ai endpoints update ENDPOINT_ID \
--region=REGION \
--enable-model-armor
如需更多資訊和範例,請參閱「為 MCP 設定 Model Armor 保護機制 Google Cloud」。
針對機密資料作業強制執行最低安全閾值
Model Armor 可讓您針對私密資料作業 (例如個人識別資訊 (PII) 偵測和去識別化) 實施最低安全門檻。即使模型遭到入侵,您也可以使用 Sensitive Data Protection DeidentifyTemplate
在將私密資訊傳回給使用者之前,先遮蓋或遮蔽這類資訊。
以下是設定的概念範例:
# Example: Apply a DeidentifyTemplate to filter PII
gcloud ai endpoints update ENDPOINT_ID \
--region=REGION \
--model-armor-config-file=model_armor_config.json
在以下範例中,model_armor_config.json 可能會參照 DLP 範本:
{
"safety_thresholds": {
"injection": "HIGH",
"harmful_content": "MEDIUM"
},
"data_protection_config": {
"dlp_deidentify_template": "projects/PROJECT_NUMBER/locations/LOCATION/deidentifyTemplates/DLP_TEMPLATE_ID"
}
}
稽核與觀測能力
掌握代理程式的動作是事件後分析和偵測遭入侵代理程式的關鍵。
實作資料復原策略
雖然 IAM 和資料庫原生角色等分層控管機制旨在防止破壞性動作,但您仍須制定復原計畫,以防這些防禦機制失效。如果代理人遭到入侵或不熟悉相關操作,但擁有寫入權限 (「僅限代理人」風險),就可能受到欺騙而執行破壞性指令 (例如 DROP TABLE) 或毀損資料。
針對這種情況,您主要可採取完善的復原策略。
幾乎所有 Data Cloud 產品都提供資料復原功能,可透過傳統備份、時間點復原 (PITR) 或資料快照復原資料。您有責任啟用及設定這些功能。
| 產品 | 備份與復原機制 |
|---|---|
| Cloud SQL | 支援隨選和自動備份,可將執行個體還原至先前的狀態。也支援時間點復原 (PITR)。 |
| AlloyDB | 依預設提供持續備份及復原功能。這會啟用 PITR,並以微秒的精細程度復原叢集,讓您將叢集還原至保留期限內的任何時間點。 |
| BigQuery | 資料復原作業是透過「時空旅行」功能完成,可讓您存取及還原過去 7 天內任何時間點的資料。如要長期保留資料,可以建立資料表快照。 |
| Spanner | 支援隨選備份和時間點還原。 |
| Firestore | 支援自動備份,可將資料庫還原至先前的狀態。此外,還提供 PITR 功能,可防止意外刪除或寫入資料。這兩項功能預設為停用。 |
| Bigtable | 支援隨選和自動備份。這些備份作業完全由系統管理,且可還原至新資料表。 |
啟用 Cloud 稽核記錄
請確認 MCP 和所有相關 Google Cloud 服務 (例如 BigQuery、Cloud SQL、AlloyDB、Firestore 和 Spanner) 都已啟用資料存取稽核記錄。根據預設,系統只會啟用管理員活動稽核記錄。資料存取稽核記錄會記錄代理執行的每項讀取和寫入作業。詳情請參閱「MCP 的資料存取稽核記錄」。
稽核敏感動作
在 Cloud Logging 中設定快訊,偵測異常或高風險動作。記錄檢視器查詢會找出在 Firestore 中執行資料寫入作業的服務帳戶,例如外洩或破壞性攻擊的常見目標:
resource.type="firestore_database" # Filter for data write operations AND protoPayload.methodName="google.firestore.v1.Firestore.Commit" # Ensure the caller is an agent service account (modify regex as needed) AND protoPayload.authenticationInfo.principalEmail=~".*@.*.gserviceaccount.com" # Exclude expected system calls to reduce noise AND NOT protoPayload.authenticationInfo.principalEmail=~"system-managed-service-account"
使用代理程式專屬記錄功能
除了 Cloud 稽核記錄,請確保應用程式程式碼會記錄每個代理程式決策的下列資料:
- 工具執行:呼叫的 MCP 工具。
- 原始指令:LLM 產生的確切指令,例如
SQL查詢或文件路徑。 - 最終動作:動作是否已執行 (僅限代理程式模型) 或已核准 (人機迴圈)。詳情請參閱「瞭解代理程式使用情形」。
- 使用者和工作階段 ID:發出要求的終端使用者 ID。