—— 不是每個人都該問模型所有事,尤其是財務預算跟老闆薪水。
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 中怎麼落地?我們明天拆給你看。