GitHub Actions中Go REST API集成测试的AWS SES凭证配置求助
解决GitHub Actions中AWS SES凭证缺失的问题
方案1:使用GitHub OIDC连接AWS(无长期凭证,推荐)
这是AWS官方推荐的CI/CD安全方案,无需在GitHub存储长期AWS密钥,通过OIDC身份验证获取临时凭证。
步骤1:在AWS配置OIDC身份提供商
- 登录AWS控制台,进入IAM服务
- 左侧导航选择「身份提供商」,点击「添加提供商」
- 提供商类型选「OpenID Connect」,提供商URL填
https://token.actions.githubusercontent.com,点击「获取指纹」完成验证 - 受众填
sts.amazonaws.com,完成创建
步骤2:创建IAM角色并配置信任策略
- 在IAM中创建新角色,信任实体类型选「Web身份」
- 选择刚创建的OIDC提供商,受众选
sts.amazonaws.com - 附加权限策略:可以直接用
AmazonSESFullAccess,或者遵循最小权限原则,自定义仅允许发送邮件的策略(比如只包含ses:SendEmail和ses:SendRawEmail操作) - 记录角色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
- 打开仓库「Settings」→「Secrets and variables」→「Actions」
- 点击「New repository secret」,分别添加:
AWS_ACCESS_KEY_ID:你的AWS访问密钥IDAWS_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
相关产品推荐
相关产品推荐

