← Foundations Course

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

1. Secret Injection

GitHub encrypted secret
  ↓ workflow runtime
environment variable
  ↓ deploy command

Secret 不應寫進 repository file;runner 執行時才注入。

2. 不要輸出 Secret

# bad
echo $CLOUDFLARE_API_TOKEN

# better
npx wrangler deploy

平台可能 masking,但不要依賴 masking 當主要防線。

3. Least Privilege

permissions:
  contents: read

Workflow 只拿需要的 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 smoke

Debug evidence:Secret 被誤印到 Log

立即視為 credential exposure:rotate/revoke,確認 log/artifact/cache 是否含值,再修 workflow。不要只刪 console line 就當事件結束。

Knowledge check

  1. Secret store 解決什麼問題?
  2. 為什麼 workflow permission 要最小化?
  3. Fork PR 為何不應自動取得 deploy secret?
  4. 第三方 Action 為什麼屬 trust boundary?