跳轉到主要內容
當一個代理被劫持時——提示注入、一個被下毒的工具結果、一個 失控的迴圈——它實際能什麼僅由一件事所界定: 它的 API 金鑰被允許做什麼。一把沒有限制也沒有政策的金鑰 會把一個被入侵的代理變成一場波及整個工作區的事故。 本頁是你在把金鑰出貨之前、並在那之後按節奏再次執行的 硬化流程。它刻意簡短:一份檢查清單、一個實作範例,然後 是各欄位的深入連結。要了解它背後的心智 模型,從範圍與金鑰開始; 要了解逐欄位的參考,參見金鑰總覽

1. 最小自主檢查清單

讓每把金鑰——新的或現有的——在金鑰編輯器 (/console/token)中走過這六道閘門。設定其中任一道都需要 Developer 角色或 以上;兩個政策平面(§5–6)是分開撰寫的,並在此處綁定
model_limits 設為這個代理所需的精確清單(並啟用 model_limits_enabled)。對清單外任何模型的呼叫會在它離開閘道 之前被拒絕,所以一個被劫持的代理無法升級到一個 更貴或更強大的模型。 **檢查:**清單是否如工作所允許的那般短——理想情況下一個模型? 深入:模型限制
allow_ips 設為代理實際呼叫所來自的來源位址或 CIDR。 一把從其他任何地方出示的外洩金鑰會在驗證 層被拒絕。空意味著所有 IP 都被允許。 **檢查:**對一個固定主機或排程代理,清單是否非空且 範圍限定到那個 egress?深入: IP 允許清單
credit_limit_usd 設為代理一生中絕不應跨越的一個 上限。閘道對照金鑰的花費強制執行它。0 意味著 無限制——一個失控的迴圈能耗盡你整個餘額。 **檢查:**上限是不是一個真實的預算,而非 0?深入: 配額、上限與到期
expired_time 設為一個絕對到期——sprint 的結束、 部署,或 CI 執行。-1 意味著永不到期。一把短命金鑰 無法作為被遺忘的攻擊表面而滯留。 **檢查:**一把短暫或承包商金鑰是否有一個真實的到期,而非 -1?深入:到期金鑰
透過 guardrail_id 附掛一份防護欄,使 請求(以及在支援之處的回應)文字在抵達模型之前被審查 PII、密鑰與注入意圖。 **檢查:**一把處理敏感提示的金鑰是否綁定了一份防護欄, 或繼承一個工作區預設值?參見 §5。
透過 firewall_policy_id 附掛一份防火牆政策,使 這把金鑰發出的每一次工具呼叫、MCP 派發與 egress 都對照 一份代理合理所需之事的允許清單被評估。 **檢查:**一個呼叫工具的代理是否綁定了一份防火牆政策,或 繼承工作區預設值?參見 §6。
上方的欄位是一把金鑰上唯一可由客戶設定的槓桿——在 主控台中全部設定它們;這裡沒有任何東西需要修改代理程式碼。讀回 一把金鑰會顯示它被遮罩;明文只在建立時顯示一次。參見 金鑰遮罩

2. 什麼 / 多常 / 在哪裡

三個問題把這份檢查清單從一次性的雜務變成一種姿態。

什麼

上方的六道閘門,按順序:model_limitsallow_ipscredit_limit_usdexpired_timeguardrail_idfirewall_policy_id

多常

每把金鑰建立時,以及在一次定期審查中——當一個 代理的範圍改變時、當你輪替一把金鑰時, 以及對長壽金鑰按固定節奏。

在哪裡

在主控台金鑰編輯器(/console/token)中,作為 Developer+。兩個 政策在它們自己的主控台中撰寫,然後在金鑰上綁定。

3. 一把具體的最小自主金鑰

一個用一個便宜模型、從一個主機摘要支援工單的排程 代理,幾乎不需要任何自主。一把完全硬化的金鑰:
欄位為何
model_limits一個摘要模型無法升級到前沿模型
allow_ips排程器的 egress CIDR外洩的金鑰在他處毫無用處
credit_limit_usd每週上限失控的迴圈無法耗盡餘額
expired_time部署結束時自動到期,無法滯留
guardrail_id一份遮罩 PII 的防護欄請求文字會被審查
firewall_policy_id只允許清單它的工具沒有意外的工具呼叫
如果這個代理被劫持,它仍然只能呼叫一個模型、只能來自一個 IP 範圍、只能到其上限為止,且只能呼叫其防火牆政策所允許的工具。 工作區的其餘部分毫髮無傷——而 防火牆稽核軌跡會精確顯示 它被授權做什麼。
一把沒有 model_limits、沒有 allow_ipscredit_limit_usd: 0expired_time: -1,且沒有政策附掛的金鑰,擁有最大自主。如果它 外洩,持有者會得到你的整個工作區。把那個組合當作 一個發現,而非一個預設值——參見 無限制 vs 有界

4. /v1 中繼呼叫 vs 主控台

這份檢查清單是在主控台中用你的工作階段(一個 Developer+ 使用者)設定的。你的代理從不觸及那些設定路由——它在 /v1/* 推論呼叫上出示它的範圍限定中繼金鑰(sk-orca-…),而上方的 限制與綁定政策在每一個上面強制執行。
# The agent's runtime call — the relay key, scoped by the checklist above.
curl https://api.orcarouter.ai/v1/chat/completions \
  -H "Authorization: Bearer sk-orca-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-4o-mini",
    "messages": [{"role": "user", "content": "Summarize this ticket..."}]
  }'
如果金鑰的 model_limits 不包含 openai/gpt-4o-mini,這次呼叫會在 它離開閘道之前被拒絕。如果呼叫者的 IP 不在 allow_ips 中,它會在驗證層被拒絕。代理程式碼保持不變; 金鑰決定波及範圍。

5. 閘門 5 — 綁定的防護欄

guardrail_id 把一份工作區範圍限定、有序的內容政策綁定到 金鑰。解析方式是金鑰的明確防護欄(如果它存在且已啟用), 否則是工作區預設值,否則是無。
防護欄在被停用時是一個嚴格的關閉開關:一個已停用或已刪除的 guardrail_id 意味著金鑰得到防護欄——它不會回退 到工作區預設值。這與防火牆平面(§6)相反,所以 驗證綁定的防護欄是已啟用,而非只是已附掛。
一份防護欄的規則在模型之前(輸入階段)執行,並在支援之處 在回應上(輸出階段)執行,動作為 blockmaskflag。例如, PII Shield 預設集在請求抵達模型之前就遮罩請求中的 PII。以 Developer+ 撰寫並附掛防護欄——參見 防護欄綁定政策

6. 閘門 6 — 綁定的防火牆政策 + 閘道範圍

firewall_policy_id 綁定一份工作區範圍限定的工具呼叫政策。它治理 一個代理採取的動作——公告的工具、模型發出的 tool_calls、 MCP 派發,以及外送 egress——對照一份有序的規則清單,其 裁決為 allowauditdenysanitizepending_approval,或 cap_cost
防火牆平面的解析方式與防護欄不同:一個已停用的 附掛防火牆政策會回退到工作區預設值,它不會把 強制執行關閉。所以綁定一份政策並停用它會把金鑰還原回 工作區預設值——它永遠不會靜默地變得無防護。
一次設定兩個平面最快的方式是一個自主等級——一個 單一開關,原子性地設定你工作區的防火牆防護欄 姿態(tight / balanced / permissive),並支援一鍵還原。參見 防火牆 §8
is_firewall_gateway 是一種不同類型的金鑰——只為 防火牆 MCP 與 evaluate-hook 路由(/api/v1/firewall/*)鑄造,絕不用於 推論。一把一般金鑰在那些路由上會得到 403,而一把閘道金鑰在 推論路徑上是過度範圍限定的。啟用此旗標,以及讀取一把閘道金鑰的 明文,需要 Admin+。一把金鑰,一個目的。

7. 檢查清單之後

安全代理基準

建議的起始姿態——一個自主開關,然後從真實流量 調校。

綁定政策

guardrail_idfirewall_policy_id 如何附掛與解析。

過度自主

這份檢查清單所要收束的威脅。

外洩金鑰

一把範圍限定金鑰暴露的當下該怎麼做。
每把金鑰越狹窄,任何單一代理一旦被入侵時的波及範圍就越小 ——而每個代理被授權做什麼的紀錄也越清晰。對每把金鑰執行 最小自主檢查清單,並持續執行它。