工作负载身份联合是什么
工作负载身份联合让云侧把外部身份——K8s 的 ServiceAccount、CI 平台的 OIDC 令牌——映射为可扮演的云角色:运行时用短时令牌换取临时凭据,而不是先发放长期密钥再兑换。静态 AK 因此退场,凭据泄露窗口与「这个身份实际在哪里运行」强绑定;条件是写进配置、可评审的。
基本信息
| 适用平台 | AWS / GCP / Azure 等云的角色联合;配合 K8s 与主流 CI |
|---|---|
| GCP | Workload Identity Federation:身份池与提供方,属性条件限制来源 |
| Azure | 联合凭据(federated credentials)绑定外部签发者与主体 |
| K8s 侧 | ServiceAccount 令牌投射 + 云侧信任(IRSA 等模式) |
典型使用场景
- CI 部署云资源:流水线用 OIDC 令牌换临时凭据,仓库里不再有长期密钥
- K8s 访问对象存储:ServiceAccount 与云角色绑定,按 Pod 身份授权
- 跨云信任:一个云的工作负载换取另一个云的临时凭据
- 审计收口:换取的凭据带会话标签,云审计日志可定位发起身份
- 收窄爆炸半径:条件限定「仅主干分支、仅受保护环境」可扮演
- 非人类身份盘点:服务、流水线、自动化脚本逐个迁到联邦身份,登记负责人
云侧要素与 GitHub Actions 示例
云侧要素与 GitHub Actions 示例
# 云侧要素:颁发者 / 主体与属性映射 / 条件 / 目标角色
permissions:
id-token: write # 允许工作流签发 OIDC 令牌
steps:
- uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::123456789012:role/ci-deploy
aws-region: ap-northeast-1属性条件要写细:签发者、仓库、分支或环境保护缺一不可,只写签发者等于把角色开放给所有能用该 CI 的人。
条件字段示例
| 字段 | 示例 | 作用 |
|---|---|---|
| issuer | CI 平台的签发地址 | 限定令牌来源 |
| subject | 仓库与分支的完整引用 | 限定具体工作流 |
| audience | 目标云服务的受众值 | 防止令牌被挪作他用 |
| environment | 受保护环境名 | 限定部署范围 |
受众值必须设置:缺失时令牌可能被其他服务拿去换凭据,签发与校验两侧都要显式配置。