如何配置GitHub Action扮演角色访问AWS CodeBuild项目解决找不到项目报错
解决方案
前置权限配置
- 首先确认
sandbox_role的信任策略已允许GitHub Secrets中存储的根账号IAM用户扮演该角色,Terraform配置参考如下:
resource "aws_iam_role" "sandbox_role" { name = "sandbox_role" assume_role_policy = jsonencode({ Version = "2012-10-17" Statement = [ { Action = "sts:AssumeRole" Effect = "Allow" Principal = { AWS = "arn:aws:iam::<替换为根账号ID>:user/<替换为根账号对应的IAM用户名>" } } ] }) // 需额外为该角色附加CodeBuild启动、查询等相关操作权限 }
- 确认
sandbox_role已附加codebuild:StartBuild、codebuild:BatchGetBuilds等必要的CodeBuild操作权限。
修改GitHub Actions工作流
直接使用aws-actions/configure-aws-credentials内置的角色扮演能力,配置后会自动生成对应角色的临时凭证,后续步骤默认使用该凭证访问AWS资源,修改后的完整工作流如下:
name: 'GitHub Actions For CodeBuild' on: pull_request: branches: - staging jobs: CodeBuild: name: 'Build' runs-on: ubuntu-latest steps: - name: 'checkout' uses: actions/checkout@v4 - name: 配置AWS凭证并扮演sandbox_role uses: aws-actions/configure-aws-credentials@v4 with: # 根账号永久凭证,用于发起角色扮演请求 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 # 替换为实际的sandbox_role完整ARN role-to-assume: arn:aws:iam::<替换为sandbox账号ID>:role/sandbox_role # 临时凭证有效期,单位秒,最长可设43200 role-duration-seconds: 3600 role-session-name: GitHub-Actions-CodeBuild-Session - name: Run CodeBuild uses: aws-actions/aws-codebuild-run-build@v1 with: project-name: CodeBuild buildspec-override: staging/buildspec.yml env-vars-for-codebuild: | TF_INPUT, AWS_REGION, # 不要手动传递AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY,避免覆盖自动生成的临时凭证 env: TF_INPUT: false AWS_REGION: us-east-1 # 删除原有根账号AK/SK环境变量,避免覆盖角色扮演后的临时凭证
其他说明
如果需要CodeBuild构建过程中也使用sandbox_role权限,建议直接为CodeBuild项目配置对应服务角色即可,不要手动传递临时凭证到构建环境,避免凭证过期导致构建失败。如果使用Terragrunt管理资源,将上述IAM角色的Terraform代码放入对应Terragrunt模块目录部署即可。
内容的提问来源于stack exchange,提问作者dcloud
相关产品推荐
相关产品推荐

