透過 Model Context Protocol 確保代理程式互動安全的最佳做法

Model Context Protocol (MCP) 可將生成式 AI 代理程式連線至 MySQL 適用的 Cloud SQL 的方式標準化。由於自主代理程式具有固有風險,因此必須採用共責式模型,結合平台控管措施和安全應用程式設計,才能減輕提示注入等安全漏洞。
如要設計及部署使用 Model Context Protocol (MCP) 工具的 AI 應用程式,請按照本指南中的最佳做法操作。 Google Cloud

事前準備

使用 MCP 工具時,應用程式的安全性態勢取決於代理程式的互動模型。如要瞭解使用代理對安全性的影響,以及將代理與 MCP 伺服器整合時的相關風險,請參閱「AI 安全性」。

安全責任

身為客戶,您有責任確保代理程式平台設定和運作安全無虞。

遵循最小權限原則

使用範圍最小的服務帳戶執行代理程式。這是第一道也是最重要的防禦措施。

  • 專屬身分:使用 MCP 工具為每個不重複的代理程式或應用程式建立專屬服務帳戶。請勿重複使用現有 SA,尤其是具備廣泛權限的 SA。
  • 最小範圍:只授予服務帳戶必要的 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

Firestore 安全性規則

根據應用程式邏輯或要求存取權的使用者情境,限制文件層級或欄位層級的存取權。

Bigtable

IAM 角色

Bigtable 提供精細的控制項,可透過專案、執行個體和資料表層級的 IAM 角色進行控管。

安全代理程式設計

Agent-Only 模型需要強大的應用程式層級防禦機制,才能抵禦提示詞注入攻擊 (這類攻擊會嘗試覆寫系統提示)。詳情請參閱「AI 安全與保障」。

將資料和使用者輸入內容視為不受信任

將來自使用者的輸入內容,或代理程式從外部來源擷取的資料 (例如網頁搜尋結果或第三方文件) 視為不受信任。

實作動作選取模式

避免使用開放式規劃和執行 架構,因為系統會將高階工作規格與機械執行作業分離。請改用可限制模型自由度的設計模式。

  • 動作選取器模式:模型唯一的工作是將使用者要求轉換為一組預先定義的安全函式。動作邏輯是硬式編碼,無法由 LLM 修改。這有助於讓代理程式免於針對控制流程的注入攻擊。
  • 雙 LLM 模式:使用主要 LLM (動作 LLM) 執行核心工作,並使用次要的高安全性 LLM (防護 LLM) 預先篩選使用者提示中的惡意意圖,以及篩選動作 LLM 的輸出內容,防止未經授權的動作或資料外洩。

防止未經授權的工具鍊結

代理程式只能呼叫工作所需的工具。請確保您的協調程式碼可防止下列情況:

  • 動態工具:代理程式不得動態註冊新工具,也不得變更現有工具的權限。
  • 強制執行許可清單:在初始系統提示和後端程式碼中,宣告代理程式可存取的函式或資料庫表格許可清單。如需 Gemini CLI 範例,請參閱「限制工具存取權」。

安全設定

MySQL 適用的 Cloud SQL 提供 Model Armor,可在平台層級強制執行安全界線。您必須啟用並設定這些設定。

啟用 Model Armor

使用 gcloud 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 和 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。