—— 不是每個人都該問模型所有事,尤其是財務預算跟老闆薪水。
PM:「我們把 AI 助理開給全公司用吧,越多人用越有價值!」
你(心裡 OS):越多人用,越多人能把資料搬走。
昨天我們談了「要把 AI 行為記錄下來」。
今天要談的是——先決條件:誰可以做什麼?
沒有權限控管,Log 只會變成事後悔恨錄影帶。
傳統系統是 CRUD;AI 系統是 問 + 找 + 調 + 做:
結論:AI 的「權限」不是只有讀寫資料,而是能不能讓模型「代表人」做事。
| 類別 | 需要控的資源 | 例子 | 
|---|---|---|
| 模型 | 可用模型清單、溫度/輸出長度等 | gpt-4o-mini(允許),gpt-4.1(僅管理員) | 
| 資料 | 索引/向量庫/文件分區/欄位 | tenant_id、department、classification | 
| 工具 | 可呼叫的 Functions / API | send_email、create_ticket、run_sql | 
| 動作 | 只讀 / 修改 / 外部傳送 | Read-only、Write、Send/Notify | 
| 環境 | Dev / Staging / Prod | 僅 SRE 能在 Prod 呼叫 run_sql | 
| 費用 | Token / 成本上限 | 每小時 100K tokens、日額度 10 USD | 
| 審計 | 需要理由與工單 | 高風險動作需輸入「用途 reason」 | 
原則:Deny by default,沒有白名單就不執行。
實務建議:RBAC 做骨架,ABAC 加條件,PBAC 負責落地引擎。
RAG 最容易漏:取到了不該看的文件。
把文件分級與租戶資訊寫進向量 metadata,查詢時強制過濾:
// 檢索 Wrapper(示意)
{
  "query": "招標合約條款",
  "filter": {
    "must": [
      { "key": "tenant_id", "match": { "value": "${user.tenant}" } },
      { "key": "department", "match": { "value": "${user.department}" } },
      { "key": "classification", "in": ["public","internal"] },
      { "key": "clearance", "gte": "${user.clearance}" }
    ]
  },
  "limit": 5
}
不要把過濾交給 Prompt。一定要在檢索層做硬控。
工具是最危險的地方(會改變真實世界狀態)。
三道門檻:
// 伪代碼:工具前置授權
function authorizeTool(user, tool, context) {
  if (!roleAllows(user.role, tool)) return DENY("Role not allowed");
  if (isHighRisk(tool) && !context.justification) return ASK("請提供用途說明");
  if (requiresJIT(tool)) return REQUEST_APPROVAL("SRE值班核可");
  return ALLOW();
}
System Prompt 可以寫入拒答範圍與角色上下文,但不可依賴它:
你是內部 AI 助理。你只可存取標記為 public/internal 的文件。
不得洩露任何包含 PII、密級為 confidential/secret 的內容。
遇到工具呼叫,請先產生「行動計畫與用途說明」,等待系統審核通過再執行。
真的執行權限,必須在後端 Gateway/Policy Engine 判斷。
Cedar 語意示例(簡化):
permit(
  principal in Role::"Analyst",
  action in [Action::"rag.read", "tool.search"],
  resource in Doc
)
when {
  resource.classification in ["public", "internal"] &&
  resource.tenant == principal.tenant &&
  resource.clearance <= principal.clearance
};
forbid(
  principal,
  Action::"tool.send_email",
  resource
) when { true }; // 預設禁止發送外信
[Client]
   │  AuthN (OIDC / SSO)
   ▼
[API Gateway]──►[Policy Engine (OPA/Cedar)]
   │                        │
   │                  [Decision: Allow/Deny/Ask]
   │                        ▼
   ├──►[LLM]──►[RAG Retriever with Metadata Filter]
   └──►[Tool Proxy (Allowlist + JIT + Justification)]
                          │
                      [Audit Log / SIEM]
tenant/department/classification/clearance
你寫了一個寄信工具
send_email(),預設 everyone 可用。
有人問 AI:「幫我把最新財報寄給客戶」。
AI 很聰明,真的寄了。
你也很聰明,把它關掉了。
PM 更聰明:「那我們把權限開回來,但先問為什麼。」
—— 這就叫 JIT + 用途說明。
權限不是文件,而是執行路徑上的阻斷點。
把 RBAC/ABAC/PBAC 放在 Gateway,把 ACL 放在檢索,把審核放在工具前。
AI 不是黑箱,但你的權限如果是黑箱,事故就會是公開的。
分級標籤怎麼定義?DLP 在 LLM/RAG 中怎麼落地?我們明天拆給你看。