SuperAPI AI 工具集

github-actions-oidc-aws

部署与运维

查看项目

更新于 10-15 12:39

技能介绍

该技能是一份参考模式,用于让 GitHub Actions 工作流通过 OpenID Connect(OIDC)认证访问 AWS 资源,替代长期 IAM 凭证。文档强调:请学习该思路并适配自身场景,不要逐字复制。其状态标注为关键模式(CRITICAL PATTERN),类别为 CI/CD / 基础设施,适用于任何使用 GitHub Actions 向 AWS 部署的项目。

用途与解决的问题

GitHub Actions 工作流在部署基础设施、触发流水线或管理资源时需要认证到 AWS。传统做法是在 GitHub Secrets 中存放静态 IAM 凭证,存在凭证永不过期、需手动轮换、一旦泄露即被持久利用、无法限定到特定仓库、难以审计等问题,也违背最小权限原则。本模式改为使用 GitHub 的 OIDC 提供者通过 AWS IAM 角色代入来签发临时凭证,流程为:GitHub Actions → OIDC Token → AWS STS → 临时凭证 → AWS 资源。

主要能力与组件

1)AWS IAM OIDC 提供者:建立 AWS 与 GitHub OIDC 签发方之间的信任。配置为 URL 为 https://token.actions.githubusercontent.com,Audience 为 sts.amazonaws.com,Thumbprint 为 1c58a3a8518e8759bf075b76b750d4f2df264fcd(GitHub 根 CA),使用根 CA 指纹比中间证书更稳定,也符合 AWS 文档建议。

2)带信任策略的 IAM 角色:通过 sts:AssumeRoleWithWebIdentity 允许代入,并按仓库、分支、标签、Pull Request 或环境进行限定。文档给出多种限定写法,例如 repo:owner/repo:*、repo:owner/repo:ref:refs/heads/main、repo:owner/repo:pull_request、repo:owner/repo:environment:production 等。

3)IAM 权限策略:定义角色可在 AWS 执行的操作,按最小权限原则配置。文档示例包括仅触发流水线(codepipeline:StartPipelineExecution)、直接 S3 部署(s3:PutObject、s3:DeleteObject、s3:ListBucket 及 cloudfront:CreateInvalidation)、以及基础设施部署(Action 与 Resource 均为 *,需谨慎使用)。

4)GitHub Actions 工作流配置:需在 permissions 中声明 id-token: write 与 contents: read,并使用 aws-actions/configure-aws-credentials@v4 指定 role-to-assume 与 aws-region。

实现步骤

文档给出四步:第一步创建 OIDC 提供者(一次性设置),提供 AWS CDK(TypeScript)、Terraform、AWS CLI、CloudFormation 示例;第二步创建 IAM 角色,提供 CDK 与 Terraform 示例;第三步更新 GitHub Actions 工作流,对比静态凭证与 OIDC 写法;第四步清理旧密钥,使用 gh secret list、gh secret remove AWS_ACCESS_KEY_ID、gh secret remove AWS_SECRET_ACCESS_KEY。

配置管理

建议避免硬编码账户 ID。可在工作流中使用仓库变量(vars.AWS_ACCOUNT_ID、vars.AWS_REGION),或从配置文件读取。

部署模式

模式 A 流水线触发:GitHub Actions 触发 AWS CodePipeline,由后者执行部署。适用于复杂多阶段部署、需要 AWS 原生部署历史、多来源触发、构建需要大量计算资源的场景。

模式 B 直接部署:GitHub Actions 完成构建与部署。适用于简单静态站点、希望快速反馈、偏好 GitHub Actions 原生能力、关注成本(避免 CodePipeline/CodeBuild 费用)的场景。

模式 C 基础设施部署:GitHub Actions 部署 CDK、Terraform、CloudFormation 变更。适用于 IaC 工作流,并希望基于 PR 审查、合并前验证变更。该模式通常需要较宽权限,文档建议分别使用只读的 plan 角色与可写的 apply 角色。

多环境策略

建议为 dev/staging/prod 创建各自角色并赋予不同权限。文档给出按分支区分生产与开发信任条件的 CDK 示例,以及在工作流中根据 github.ref 判断环境再代入对应角色的写法。

安全注意事项

包括:始终授予最小必要权限;始终限定到具体仓库而非组织通配;始终校验 audience;默认会话时长为 1 小时,可按需设置 role-duration-seconds;通过 CloudTrail 审计角色代入,监控 principalId、roleArn、sourceIPAddress、userAgent 等字段。

故障排查

对于“Not authorized to perform sts:AssumeRoleWithWebIdentity”,文档提示检查仓库名是否匹配信任策略、分支或标签是否满足条件、工作流是否具有 id-token: write,并给出调试 OIDC token 的命令。对于“OpenIDConnect provider not found”,提示使用 aws iam list-open-id-connect-providers 与 aws iam get-open-id-connect-provider 检查提供者。

限制与说明

资料未提供该技能的收费、价格、平台兼容范围、性能效果或安装命令等具体信息。