You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions中Go REST API集成测试的AWS SES凭证配置求助

解决GitHub Actions中AWS SES凭证缺失的问题

方案1:使用GitHub OIDC连接AWS(无长期凭证,推荐)

这是AWS官方推荐的CI/CD安全方案,无需在GitHub存储长期AWS密钥,通过OIDC身份验证获取临时凭证。

步骤1:在AWS配置OIDC身份提供商

  1. 登录AWS控制台,进入IAM服务
  2. 左侧导航选择「身份提供商」,点击「添加提供商」
  3. 提供商类型选「OpenID Connect」,提供商URL填https://token.actions.githubusercontent.com,点击「获取指纹」完成验证
  4. 受众填sts.amazonaws.com,完成创建

步骤2:创建IAM角色并配置信任策略

  1. 在IAM中创建新角色,信任实体类型选「Web身份」
  2. 选择刚创建的OIDC提供商,受众选sts.amazonaws.com
  3. 附加权限策略:可以直接用AmazonSESFullAccess,或者遵循最小权限原则,自定义仅允许发送邮件的策略(比如只包含ses:SendEmail和ses:SendRawEmail操作)
  4. 记录角色ARN,格式类似arn:aws:iam::123456789012:role/GitHubActionsSESRole

步骤3:配置GitHub Actions工作流

在仓库.github/workflows目录的测试yaml文件中,添加OIDC认证步骤:

name: Run Integration Tests
on: [pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: arn:aws:iam::123456789012:role/GitHubActionsSESRole
          aws-region: us-east-1 # 替换为你的SES所在区域

      - name: Set up Go
        uses: actions/setup-go@v5
        with:
          go-version: '1.21' # 替换为你的Go版本

      - name: Run integration tests
        run: go test ./... -v

Go的AWS SDK会自动读取临时凭证,无需修改代码。

方案2:使用GitHub Secrets存储AWS凭证(简单但需管理长期密钥)

如果暂时不想配置OIDC,可采用此方法,将AWS密钥存储在GitHub Secrets中,避免暴露到代码里。

步骤1:在GitHub仓库添加Secrets

  1. 打开仓库「Settings」→「Secrets and variables」→「Actions」
  2. 点击「New repository secret」,分别添加:
    • AWS_ACCESS_KEY_ID:你的AWS访问密钥ID
    • AWS_SECRET_ACCESS_KEY:你的AWS秘密访问密钥

步骤2:修改GitHub Actions工作流

在测试yaml中注入环境变量:

name: Run Integration Tests
on: [pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    env:
      AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
      AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      AWS_REGION: us-east-1 # 替换为你的SES区域
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Go
        uses: actions/setup-go@v5
        with:
          go-version: '1.21'

      - name: Run integration tests
        run: go test ./... -v

额外注意事项

  • 确保IAM实体(角色或用户)拥有SES发送邮件的权限,尽量遵循最小权限原则,避免过度授权
  • 确认工作流中配置的AWS_REGION与你的SES服务所在区域一致
  • 本地测试时AWS SDK读取.aws/credentials,GitHub Actions环境中SDK会自动读取环境变量或OIDC临时凭证,无需修改业务代码

内容的提问来源于stack exchange,提问作者Exploring

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 01:12:26