跳轉到主要內容
擁有比其任務需要更多能力的代理是等待被利用的責任。竊取其金鑰、 用注入的指令欺騙它,或攻擊一個依賴項——那個金鑰能做的一切現在都在攻擊者手中。 這就是過度代理權限問題,它與一個密切相關的模式(稱為混淆代理人)複合: 代理沒有直接受到攻擊,它被說服代表攻擊者使用其合法權限。 兩個問題共享一個根本原因:被攻擊的代理持有的金鑰對其執行的任務來說太強大了。 防禦是最小代理權限——給每個代理其任務所需的確切能力,僅此而已。
本頁是關於限制爆炸半徑的閘道控制。上游威脅模型上下文——為何代理是高價值目標 以及注入如何運作——在威脅模型中。 對於治理危險個別工具呼叫的匹配控制, 參見危險工具呼叫

1. 是什麼使代理過度具備能力

當工作區中的每個代理共享一個金鑰,或當金鑰被發行一次後從未重新審視時,能力就向上漂移:
  • 不受限制的模型——代理可以呼叫工作區中的任何模型,包括它從不需要的昂貴或高度具備能力的模型。
  • 沒有支出上限——失控的迴圈、觸發的注入或帳單攻擊可以在你注意到之前耗盡工作區餘額。
  • 沒有到期——在 sprint 期間發行的金鑰在一年後仍然有效,遠在它被鑄造的代理退役之後。
  • 沒有 IP 限制——憑證可以在任何地方使用,所以洩漏的金鑰沒有地理限制。
  • 沒有工具允許清單——代理可以呼叫任何工具,甚至與其功能無關的工具。
這些中的任何一個單獨就擴大了爆炸半徑。組合在一起,一個被攻擊的代理可以做工作區管理員能做的一切—— 呼叫最強大的模型、花費全部餘額、觸及每個工具。

2. 混淆代理人模式

混淆代理人是過度代理權限的專門化。代理不是被劫持;它被說服。擷取的網頁、 文件或工具結果中的提示注入負載告訴代理採取它被合法授權執行的動作——轉移金錢、刪除記錄、 發送訊息——代表攻擊者。 代理行動。它被授權做恰好那件事。授權檢查通過。損害已造成。 防禦需要兩件事協同工作:
  1. 窄範圍——代理不能被欺騙做其任務從未打算的事情,因為它根本沒有被授權做那件事。
  2. 不可逆動作的人工審批——即使在授權範圍內,高風險呼叫在執行之前也需要人工確認。

3. 深度防禦:四個層次

OrcaRouter 在組合在單一 API 金鑰上的四個獨立控制中強制執行最小代理權限。 你的代理不需要任何程式碼更改。

第一層——範圍化金鑰(身份 + 硬性限制)

每個代理都應該有自己的 API 金鑰。金鑰攜帶閘道無論代理請求什麼都強制執行的硬性限制:
欄位它限制什麼
model_limits此金鑰可以呼叫的確切模型集合。對任何其他模型的請求在離開閘道之前被拒絕。
allow_ips來自此清單上任何地址的請求在驗證層被拒絕。空意味著沒有 IP 限制。
credit_limit_usd以美元計的終生支出上限。0 意味著無限制。閘道對金鑰的累計支出強制執行這一點。
expired_time絕對到期時間戳。-1 意味著金鑰永不過期。將此設定為代理的部署生命週期。
environment一個標籤(prodstagingdev),用於組織金鑰和過濾稽核日誌。
這些限制在金鑰層面強制執行——在任何政策之前、在任何模型呼叫之前。它們是最外層的爆炸半徑邊界。

第二層——防火牆政策(工具允許清單)

透過 firewall_policy_id防火牆政策附加到金鑰。 政策治理該金鑰發出的每次工具呼叫:
  • 撰寫允許代理合法使用的工具名稱的規則(支援工具名稱 glob——例如 db.query*)。
  • 將政策的 default_verdict 設定為**deny**,以便任何未明確列出的東西都被封鎖。
  • 添加引數謂詞以進一步限制即使是允許的工具——例如只有當 database 引數匹配 特定模式時才允許 db.query
沒有防火牆附加的金鑰回退到工作區預設政策。對於有窄工具需求的代理, 帶有緊密政策的明確附加總是優於依賴工作區預設值。 參見防火牆規則了解完整的匹配語言。

第三層——高風險動作的人工審批(pending_approval

對於不可逆或高價值的工具呼叫——支付派發、記錄刪除、電子郵件發送—— 添加 pending_approval 規則。流程:
  1. 代理發出工具呼叫。防火牆保留它並返回攜帶審批 id 的「保留中」回應。呼叫不會到達工具。
  2. 審查者在頻道外批准或拒絕——從主控台(Developer+)或透過 HMAC 簽署的 webhook 到你自己的審批系統。
  3. 你的代理輪詢審批 id。一旦批准,它帶著一次性的 X-OrcaRouter-Firewall-Approval 標頭 重新提交原始呼叫。閘道只讓它通過一次。
即使範圍有效,混淆代理人在這裡也被阻止:人工確認動作是有意圖的,然後才執行。

第四層——每次執行的成本上限(cap_cost

cap_cost 規則一旦代理執行的累計支出超過每規則上限(以分計)就拒絕任何工具呼叫。 這是以下情況的斷路器:
  • 由注入觸發的失控迴圈。
  • 在任何人注意到之前驅動支出的帳單攻擊。
  • 多步驟計畫中的意外遞歸。
cap_cost執行層面操作,而不是金鑰終生層面——所以它每次代理調用重置, 單次行為不端的執行無法耗盡金鑰的 credit_limit_usd 上限。

4. 精心範圍化的代理金鑰——範例

使用 gpt-4o-mini 摘要客戶工單並查詢只讀副本的代理應該看起來像這樣:
  • model_limits: ["openai/gpt-4o-mini"]——無法升級到更有能力或更昂貴的模型。
  • allow_ips: 工作者池的外向 CIDR——金鑰在其他地方是無效的。
  • credit_limit_usd: 與任務預期成本匹配的每週上限,留有一些餘地——例如 5.00
  • expired_time: sprint 或部署期間的結束——金鑰自動過期,無需手動清理。
  • environment: "prod"——出現在日誌過濾器和異常視圖中。
  • guardrail_id: 限定到此代理資料敏感度的防護欄(PII 遮罩,輸出中沒有密鑰)。
  • firewall_policy_id: 只允許 db.query*ticket.read* 的政策,預設裁決 deny
當此代理通過注入指令被欺騙外洩資料時,爆炸半徑是:一個模型、一個 IP 範圍、 一個工具命名空間、一個成本上限。工作區的其餘部分不受影響。
is_firewall_gateway 將金鑰標記為 MCP 派發和評估鉤子路由的閘道範圍的權杖。 只為以程式方式驅動防火牆的代理建立這些——永遠不要為一般推理流量建立。 推理路徑上的閘道金鑰暴露了廣用途金鑰永遠不應該觸及的路由。 啟用 is_firewall_gateway 需要 Admin+

5. 所需角色

動作最低角色
讀取任何金鑰、政策或防火牆事件Member
建立或編輯金鑰、防火牆政策、規則Developer
從主控台批准保留的工具呼叫Developer
在金鑰上啟用 is_firewall_gatewayAdmin

6. 與其他威脅的關係

過度代理權限是幾乎每個其他代理威脅的推動因素
  • 危險工具呼叫——帶有緊密工具允許清單的金鑰 不能被強迫呼叫它沒有列出的工具,即使注入成功。
  • 提示注入——範圍限制了注入能造成的損害;審批門封鎖了注入試圖觸發的不可逆動作。
  • 威脅模型——完整的攻擊面地圖, 顯示過度代理權限相對於其他向量的位置。
最小代理權限不能防止注入。它縮小了注入能實現的範圍。

範圍化金鑰與政策

完整的金鑰欄位參考、解析順序和工作區邊界模型。

防火牆

政策撰寫、裁決、HITL 審批流程和完整 API 參考。
最小代理權限——每個代理一個窄金鑰、緊密的工具允許清單、支出上限,以及不可逆動作的人工審批—— 是防禦過度代理權限 LLM 攻擊和混淆代理人模式的主要防禦。