AI 代理安全從將每個動作綁定到所代表的身分、租戶、資源及權限開始。讓供應商憑證遠離模型上下文、在下游服務執行授權、高影響副作用前要求核准,並記錄決策與結果供調查使用。
系統提示詞可以引導行為,但無法縮小工具程序可取得的管理員權杖能力。
將身分帶過整個動作
一次代理執行可能牽涉人類使用者、應用程式租戶、代理部署、工作階段及背景 worker。這些身分要分開保存。
flowchart LR
User[Authenticated user] --> Session[Agent session]
Session --> Policy{Tenant, resource, action}
Policy -->|allow| Tool[Server-side tool]
Tool --> Credential[Scoped provider credential]
Credential --> Backend[Downstream service]
Policy --> Audit[Decision record]
Backend --> Audit
後端應取得足以授權所代表使用者及租戶的上下文。如果無法避免共用 worker 憑證,工具 adapter 就必須在使用前補上缺少的資源規則。
代理控制平面指南說明這些決策與憑證參照應放在哪裡。
在憑證與 API 層縮小權限
只授予代理目前工作所需的動作與資源。分開讀取、寫入、佈建、計費及管理憑證,依租戶與環境限制範圍,並在供應商支援時縮短憑證有效期。
工作層級操作已經足夠時,不要公開廣泛 primitive。refund_order(order_id, amount) 能執行所有權、金額限制、核准及冪等性;通用 SQL 或供應商管理工具則會把這些決策全交給生成的引數。
OWASP 的 Excessive Agency 指南建議縮小工具功能、權限及自主程度。即使模型選擇了有效工具,後端仍要負責授權。
讓密鑰遠離模型路徑
將密鑰放在伺服器端管理系統,並透過應用程式碼傳遞參照。把工作專用憑證注入需要它的最小執行環境,之後撤銷或讓它到期。
密鑰常從以下地方外洩:
- 提示詞與擷取的上下文;
- 工具引數或描述;
- URL 與查詢字串;
- 例外訊息及 stdout;
- 追蹤、重播資料及客服匯出;
- sandbox 檔案及繼承的環境變數。
匯出前先遮蔽,並刻意測試錯誤。絕不能要求模型重複或轉換密鑰。對 MCP 連線,目前的授權規格要求將存取權杖放在 Authorization 標頭,並規定伺服器必須拒絕 URI 中的權杖。
在副作用前加入核准
破壞性、財務、外部可見或範圍異常廣泛的動作都要取得核准。顯示確切資源、參數及後果,將核准綁定到這些值並設定到期時間。
執行時重新檢查權限。操作等待期間,使用者角色或資源所有權可能改變。核准不能授予核准者本身沒有的權限。
Railway 的 2026 年 4 月事故報告記載代理找到帳戶權杖後呼叫舊版立即刪除 API 的事件。Railway 復原了 volume,並將 API 刪除改成保留 48 小時的軟刪除。結論很具體:權杖範圍、API 行為及可復原性必須一起處理。
將擷取內容視為不受信任的輸入
網頁、電子郵件、issue 或文件可能包含針對模型的指示。將資料與可信任系統政策分開,不能讓擷取文字擴大工具權限。模型提出動作後,要重新檢查政策。
工作流程範圍較窄時,對網路目的地與資源類型使用允許清單。在追蹤中標記外部內容來源,讓調查人員看得出哪些內容影響了動作,同時不會把內容本身視為權威。
撰寫能支援限制範圍的稽核記錄
記錄執行者、所代表的使用者、租戶、代理及工作階段、工具、資源、動作、政策版本、決策、核准參照、操作 ID、時間戳記與結果。將「允許」與「完成」分成不同事件。
不要在稽核日誌儲存密鑰或無限大小的模型內容。需要詳細上下文時,連結到受保護的追蹤。稽核路徑應能回答要撤銷哪些憑證、哪些資源可能已改變,而不必依賴發生失敗的代理。
測試撤銷與跨租戶拒絕
在隔離環境中:
- 工作等待時撤銷工作階段,確認恢復執行會安全地失敗;
- 透過每一條工具路徑嘗試存取另一租戶的資源 ID;
- 將惡意指示注入擷取內容;
- 觸發供應商及驗證錯誤,再檢查日誌是否出現密鑰;
- 在未核准情況下要求破壞性動作,確認不會發出下游呼叫。
正式環境檢查清單將這些控制與重試、追蹤及復原連接起來。
下方提示詞會從程式碼建立實際權限矩陣。任何執行位置寫著「系統提示詞」的資料列,都代表安全工作尚未完成。