GitHub Actions无法连接AWS进行Terraform部署问题求助
解决GitHub Actions中AWS凭证加载失败的问题
针对你遇到的Credentials could not be loaded, please check your action inputs: Could not load credentials from any providers错误,给你几个排查方向和解决办法:
1. 先确认仓库Secrets配置是否正确
- 如果用AWS访问密钥:
检查AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY这两个Secrets是否确实存在于仓库的Settings > Secrets and variables > Actions里,名字完全匹配(大小写敏感),值有没有复制错误(比如少了字符、多了空格)。 - 如果用IAM角色:
确认AWS_ROLE_ARN这个Secret里的ARN格式正确,比如arn:aws:iam::123456789012:role/your-role-name,没有拼写错误。
2. 检查Action的参数配置
情况一:用访问密钥+Assume Role
如果你的Action同时指定了访问密钥和role-to-assume,要确保:
- 访问密钥对应的IAM用户拥有
sts:AssumeRole权限,并且目标角色的信任策略允许该用户assume:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/your-iam-user" }, "Action": "sts:AssumeRole" } ] } - Action配置示例:
- name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 # 替换成你的区域 role-to-assume: ${{ secrets.AWS_ROLE_ARN }} role-session-name: GitHubActions-Deployment
情况二:用OIDC角色(推荐,不需要存储访问密钥)
如果用OIDC方式,不需要配置访问密钥,但必须先完成AWS OIDC提供商的配置:
- 在AWS IAM中创建OIDC提供商,受众填
sts.amazonaws.com,提供商URL填https://token.actions.githubusercontent.com - 给IAM角色配置信任策略,限制只允许你的仓库访问:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::123456789012: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:你的GitHub用户名/你的仓库名:ref:refs/heads/main" } } } ] } - GitHub Actions里的配置要先获取OIDC token,再配置凭证:
- name: Get OIDC ID Token id: id-token uses: actions/github-script@v6 with: script: | const token = await core.getIDToken(); core.setOutput('token', token); - name: Configure AWS Credentials via OIDC uses: aws-actions/configure-aws-credentials@v1 with: role-to-assume: ${{ secrets.AWS_ROLE_ARN }} aws-region: us-east-1 # 替换成你的区域 role-session-name: GitHubActions-OIDC-Session web-identity-token-file: ${{ steps.id-token.outputs.token }}
3. 检查IAM权限和策略冲突
- 不管用哪种方式,确保最终用来部署的身份(要么是IAM用户,要么是assumed的角色)拥有Terraform部署所需的所有权限(比如S3、EC2、CloudFormation等权限)。
- 如果是OIDC方式,检查信任策略里的
sub条件是否正确,比如分支是不是你当前触发Action的分支(比如main还是dev),仓库名有没有写错。
4. 调试验证
在配置完AWS凭证的步骤后,加一个测试步骤来确认凭证是否生效:
- name: Verify AWS Credentials run: aws sts get-caller-identity
如果这个步骤成功,说明凭证配置没问题,问题可能出在Terraform的配置上;如果还是失败,看日志里的详细错误信息,比如是不是角色ARN错误、信任策略不匹配等。
内容的提问来源于stack exchange,提问作者codestein
相关产品推荐
相关产品推荐

