首页/开发/CI/CD 与发布速查/GitHub Actions OIDC 免密上云
工具链要点63 条

GitHub Actions OIDC 免密上云

用工作流身份换取云上短期凭据:id-token: write 打开 OIDC,云侧信任策略按仓库、分支等声明校验,替代长期静态密钥。

CI/CD 与发布速查开发更新于 2026-10-13

OIDC 免密上云是什么

用工作流身份换取云上短期凭据:id-token: write 打开 OIDC,工作流运行时请求带有仓库、分支等信息的身份令牌,云侧信任策略校验后换发短期凭据,替代长期静态密钥。收益是无长期密钥、可审计、可按仓库与分支收紧;代价是首次配置需要在云侧建立身份提供方与信任关系。

基本信息

前提permissions 里开启 id-token: write
流程请求身份令牌、云侧校验信任、换取短期凭据
信任条件限定仓库、分支与环境
收益无长期密钥、可审计、可收紧
生命周期凭据短期有效,过期需重新换取
接入入口在云侧控制台建立身份提供方与角色信任

信任策略核对项

条件作用风险
仓库限定哪个仓库可换取过宽则他人仓库可借
分支限定可信分支任意分支可部署
环境限定审批过的环境绕过审批直接上线
主体格式按提供方规范书写写错导致换取失败

换取云凭据

换取云凭据
permissions:
  id-token: write
  contents: read
steps:
  # 用 OIDC 换取云上短期凭据
  - uses: aws-actions/configure-aws-credentials@v4
    with:
      role-to-assume: arn:aws:iam::123456789012:role/ci-deploy
      aws-region: cn-north-1
  # 后续步骤使用短期凭据部署
  - run: aws s3 sync ./dist s3://example-bucket

典型使用场景

  • 部署上云:CI 换取短期角色凭据,仓库里不再存放访问密钥
  • 跨云场景:不同云的身份提供商分别配置,工作流按需开启
  • 审计要求:每次凭据换取都留下可追溯记录
  • 轮换压力消除:不再需要定期轮换长期密钥
  • 环境隔离:生产与测试使用不同角色与信任条件
  • 最小授权:换取的角色权限按部署需要限定,不沿用管理员
  • 凭据使用:短期凭据只在作业内使用,不写入仓库与日志
云侧信任策略不要用通配:把仓库与分支(必要时环境)写进条件,防止身份被其他仓库借用。
先小范围验证:在非生产角色上跑通换取流程,再配置生产信任关系。失败排查顺序:先确认工作流权限开启,再核对云侧信任条件与主体格式。

易错点

  • 信任条件过宽:任意分支都能取得生产角色凭据
  • 漏掉 id-token: write:获取令牌失败且报错信息不直观
  • 信任条件只写仓库不写分支:任意分支的流水线都能换取生产凭据
  • 权限与云侧策略不匹配:换取失败但报错指向含糊,需逐项排查主体格式

数据来源与参考

  • GitHub Docs《About security hardening with OpenID Connect》
  • AWS 文档《Creating OIDC identity providers》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌