OIDC 聯合
OIDC 聯合
OIDC(OpenID Connect)聯合的核心職責是讓跑在雲外的 CI/CD 平台(GitHub Actions、GitLab CI)用每次執行才簽發、幾分鐘後就失效的短期憑證存取雲端資源,從根本上消除「在 CI 環境裡存放長期 access key」這個攻擊面。
概念位置
OIDC 聯合在身分與憑證地基裡的角色是「雲外機器身分的認證機制」。跑在雲上的 workload(EC2、ECS task)可以用平台原生的 instance profile 或 task role 取得短期憑證;跑在雲外的 CI/CD 沒有這個管道,OIDC 就是替代方案。
運作方式是建立信任關係:雲端帳號信任某個外部 identity provider(如 GitHub Actions 的 OIDC issuer),CI 執行時平台簽發一個帶 claim 的 token(描述哪個 repo、哪個 branch、哪個 workflow),雲端用這個 token 換出一段臨時憑證。
可觀察訊號
以下狀況指向 OIDC 相關問題:
- CI pipeline 裡有
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY環境變數 — 這是長期 key,應該替換成 OIDC - Trust policy 只驗 issuer 不驗 repo — 任何掛在同一個 CI 平台的專案都能假扮這個 role
- Pipeline 突然無法取得權限 — 可能是 trust policy 的 condition 跟 token claim 不匹配(常見於 repo 改名或 branch 改名後)
設計責任
設定 OIDC 聯合時要決定:
- Trust policy 的 claim 收斂:限定 issuer + audience + 特定 repo + 特定 branch,每個條件都收到最緊
- Role 的權限範圍:OIDC 換到的 role 仍然要遵循最小權限 — 只給 pipeline 需要的 action
- Plan 與 apply 分開的 role:plan 只需要 read 權限、apply 需要 write 權限,用兩個 role 降低 PR 階段的風險
鄰卡
- IAM — OIDC 是 IAM 身分系統的一種外部身分來源
- Security Group — OIDC 解的是身分層的認證問題,跟網路層的 security group 正交