AI Coding Agent 權限安全:sandbox、approval 與 credential boundary
用最小 filesystem/network scope、分級 approvals、provider-side credentials、MCP capability allowlist 與 audit,安全使用 AI coding agent。
AI coding agent 的風險不只來自錯誤 code,也來自它能讀哪些檔案、連哪些網路、拿哪些 credential、呼叫哪些 MCP tools,以及哪些動作不需人類確認。Prompt injection 可能藏在 repository、issue、web page 或 tool output;只告訴 agent「不要洩漏」不能形成可執行的安全邊界。 截至 2026-07-29,OpenAI Codex 官方安全資料將 sandbox、approval 與 internet access 視為獨立控制;Anthropic 也提供 Claude Code security/permissions 說明;MCP 安全指南則提醒 local MCP server 與 client 具有相同使用者權限,應限制 filesystem/network 並最小化 scope。安全配置需從 threat model 出發,不照抄「全自動」旗標。 實作步驟 先把任務分級。Level 0 是讀 code/解釋;Level 1 是 workspace 內可回復編輯與 test;Level 2 是 dependency install、network read、migration draft;Level 3 是 push、發訊息、production write、刪 cloud、付款或 secret rotation。前兩級可在受限 workspace 自動化,Level 3 需要精確 target、fresh read 與顯式確認。 filesystem sandbox 只給一個 repository/worktree 與必要 temp path,不開 home、SSH、cloud config、browser profile。network 預設關閉或只開官方 docs/package registries;若任務需瀏覽不可信內容,讓含 secret 的執行環境與 browsing environment 分離。 credential 放在 provider/runner boundary,不進 agent context。CI 使用短期 OIDC 或 environment secret,只在 protected job 取得。DB publisher key 不寫 .env 給一般開發 agent;封裝窄工具,例如「upsert exact draft allowlist」而非任意 SQL。 permissions: contents: read jobs: verify: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: npm ci && npm test deploy: needs: verify environment: production permissions: contents: read id-token: write approval 依 action,而非依 agent 口頭描述。local edit 可預先批准;新增 network domain、寫 workspace 外、destructive command、remote mutation 要 gate。approval UI 應顯示 resolved target、command/API、scope 與是否可回復,拒絕 wildcard。 MCP/tool inventory 要記 owner、transport、credential、read/write、資料類型與 approval mode。預設只啟用當前任務需要的 server/tools;write tool 與 read tool 分開。tool server 自己做 authentication/authorization,不能假設 host 的確認一定存在。 在 repo 加指令契約:test/build commands、protected paths、generated files、secret patterns、remote policy。Pre-commit/CI 用 secret scanner、dependency audit、type/test/build;但 hook 是輔助,不能取代 sandbox。 完整 audit 記錄 task、actor、commit/diff、tool/action、target、approval decision 與結果,不記 secret/token/完整敏感內容。高風險 action 前建立 backup/checkpoint,後做 remote read/live verification。 失敗與復原 若 agent 讀到不該讀的 secret,停止 session、撤銷/輪替 credential,清查 log/transcript/artifact exposure,再縮小 sandbox。只把檔案加入 .gitignore 不會撤回已暴露 secret。 若不可信文件誘導 agent 呼叫 tool,立即停用該 connector/capability,保存 injection input 與 audit。檢查所有 side effects,不要只看 agent 最後說「沒有執行」。修 tool allowlist、argument validation 與 approval gate。 若誤改 workspace,先以 git diff 界定 agent-owned changes,保留使用者原有 dirty work,再回退特定 patch/commit。若已 remote push/DB write,使用 pre-write backup 與 provider audit rollback;不要用 force push 或 broad delete 擴大事故。 若 approvals 過多,先把安全、可回復、精確 scope 的 local action組成 reusable rule,而不是切到 unrestricted mode。若工作需 unattended,建立窄 service wrapper 與 deny-by-default policy。 驗證指令 git status --short git diff --check git grep -nE '(SERVICE_ROLE|PRIVATE KEY|api[_-]?key)' -- ':!*.md' npm test 以 canary 測試 sandbox:讀 workspace 外檔案應失敗、未 allowlist network 應失敗、remote write 應要求/被 gate、MCP write tool 缺 scope 應拒絕、secret 不出現在 stdout/log。再演練一個拒絕 approval、一個 tool timeout 與一個 rollback,確認 fail closed。 官方來源 OpenAI Codex Security Anthropic Claude Code security MCP Security Best Practices 延伸閱讀 在 技術文章 查看 MCP server 與 repository workflow。 由 課程總覽 練習受限 agent pipeline。 安全事件可經 聯絡頁 提供 redacted timeline。