ENGINEERING BRIDGE · 30
CI / Secrets Security:Automation 也有身份與權限
GitHub Actions runner 需要 checkout、讀 packages、部署 Cloud。這代表 workflow 本身也有 credentials、permissions 與 supply-chain risk。CI security 不只是「不要 print secret」。
Learning outcomes
- 能區分 repo secret、runtime env、public config。
- 能解釋 least-privilege workflow permissions。
- 能辨識 secret leakage path。
- 能理解第三方 Action/dependency 也是 trust boundary。
1. Secret Injection
GitHub encrypted secret
↓ workflow runtime
environment variable
↓ deploy commandSecret 不應寫進 repository file;runner 執行時才注入。
2. 不要輸出 Secret
# bad
echo $CLOUDFLARE_API_TOKEN
# better
npx wrangler deploy平台可能 masking,但不要依賴 masking 當主要防線。
3. Least Privilege
permissions:
contents: readWorkflow 只拿需要的 repository/API permission。Deploy token 也應限制 scope。
4. Fork / PR Boundary
不可信 pull request code 若能直接取得 production secret,就可能把 secret 送出去。Workflow trigger 與 secret availability 必須一起設計。
5. Supply Chain
uses:
third-party/action@version外部 Action 會在 runner 執行 code。Pin/version/reputation/permissions 都是 supply-chain risk management。
Project checkpoint:Secure Deploy Pipeline
PR CI:
no production deploy secret
main CI:
read-only checks
manual deploy:
protected secret
minimal permissions
production smokeDebug evidence:Secret 被誤印到 Log
立即視為 credential exposure:rotate/revoke,確認 log/artifact/cache 是否含值,再修 workflow。不要只刪 console line 就當事件結束。
Knowledge check
- Secret store 解決什麼問題?
- 為什麼 workflow permission 要最小化?
- Fork PR 為何不應自動取得 deploy secret?
- 第三方 Action 為什麼屬 trust boundary?