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