使用 OIDC 在 GitHub Actions 中保护您的 AWS 凭证

发布: (2026年1月7日 GMT+8 22:59)
5 min read
原文: Dev.to

Source: Dev.to

“使用 OIDC 在 GitHub Actions 中保护您的 AWS 凭证”封面图

V‑ris Jaijongrak

GitHub Actions

有没有想过如何加强 GitHub Actions 中 AWS 凭证的安全性(即让 GitHub 仓库执行 CI/CD 的工作流/管道)?

大多数教程会先创建一个拥有编程密钥的 IAM 用户,并告诉你要安全地存储这些密钥(绝不要将它们暴露在公共互联网)。在 GitHub Actions 中,你通常会将 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 添加到仓库的 Secrets 部分。

并没有 为你提供最佳的安全性。还有一种更好的方法,可以完全消除对长期静态凭证的需求。

AWS 凭证必须保密

如果凭证泄露,攻击者可以利用附加在该身份上的权限造成严重破坏。因此,在设计 IAM 用户/角色时,遵循最小权限原则至关重要。

AWS IAM 身份提供者 (OIDC)

当调用 AWS 服务的客户端支持 OIDC v2 时,您可以将短期令牌兑换为 AWS 会话令牌。这使您能够:

  • 从 GitHub Secrets 中消除静态的 AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY
  • 通过 OIDC 令牌承担 IAM 角色,仅授予特定工作流所需的权限。

Step‑by‑step

1. 创建 AWS IAM OIDC 身份提供商

使用 AWS CLI

aws iam create-open-id-connect-provider \
    --url https://token.actions.githubusercontent.com \
    --client-id-list sts.amazonaws.com

或通过 AWS 控制台

  1. 打开 IAM → Identity providersAdd provider
  2. 选择 OIDC
  3. Provider URL 设置为 https://token.actions.githubusercontent.com
  4. Audience 设置为 sts.amazonaws.com

在控制台中添加 OIDC 提供商

2. 创建信任该 OIDC 提供商的 IAM 角色

使用以下 信任策略(将占位符替换为您自己的值):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam:::oidc-provider/token.actions.githubusercontent.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "token.actions.githubusercontent.com:aud": "sts.amazonaws.com",
          "token.actions.githubusercontent.com:sub": "repo:/:ref:refs/heads/"
        }
      }
    }
  ]
}

AWS_ACCOUNT_IDGITHUB_ORGGITHUB_REPOSITORY 和 “ 替换为您环境中的相应值。
为角色附加所需的权限策略(例如 AmazonS3ReadOnlyAccess、自定义策略等)。

3. 配置 GitHub Actions 工作流

为工作流授予请求 OIDC 令牌的权限,然后假设您刚创建的角色。

# .github/workflows/deploy.yml
name: Deploy to AWS

# 请求 OIDC ID 令牌
permissions:
  id-token: write   # OIDC 所必需
  contents: read    # (可选)用于 checkout 等

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v2
        with:
          role-to-assume: arn:aws:iam:::role/
          aws-region: 

      - name: Verify identity
        run: aws sts get-caller-identity

关键要点

  • permissions.id-token: write 使工作流能够从 GitHub 获取短期 OIDC 令牌。
  • aws-actions/configure-aws-credentials 会自动使用您指定的角色,将该令牌交换为临时的 AWS 凭证。

完成上述操作后,不要在 GitHub Secrets 中存储任何 AWS 访问密钥——工作流将使用 OIDC 令牌提供的短期凭证。

结论

本指南与官方 aws-actions 文档相同,但展示了如何:

  • 在 AWS 中设置 OIDC 身份提供者。
  • 创建一个信任 GitHub OIDC 令牌的角色。
  • 配置 GitHub Actions 工作流,以在没有任何静态 AWS 密钥的情况下承担该角色。

采用此模式后,您可以:

  • 从仓库中移除长期有效的凭证。
  • 减少攻击面(令牌在几分钟后即过期)。
  • 简化密钥轮换——无需手动轮换。

实现基于 OIDC 的身份验证是一种简便的方法,可在几乎不影响性能的情况下提升您的安全姿态。

祝编码愉快! 🎉

参考文献

Back to Blog

相关文章

阅读更多 »