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

GitHub Actions多AWS账号Terraform部署凭证报错排查

问题根因

Terraform报凭证错误的直接原因是AWS访问密钥根本没有被注入到运行环境,配置存在以下硬错误:

  • 输入参数名拼写不匹配:workflow_dispatch块中定义的账号选择参数名为accounts(末尾带s),但后续条件判断逻辑里全部错误引用为github.event.inputs.account(末尾无s),该引用值始终为空,两个if判断分支都不会执行,密钥从未被写入$GITHUB_ENV。Terraform拿不到静态密钥后会尝试读取EC2 IMDS服务的实例角色凭证,而GitHub Actions托管运行器不是AWS EC2实例,IMDS请求必然失败,最终抛出无有效凭证的错误。
  • 冗余配置:写入$GITHUB_ENV的环境变量会默认注入后续所有步骤的运行上下文,不需要在每个Terraform步骤中重复通过env块声明传递同名变量,多余的写法反而增加排查干扰。
修复后可用配置
name: "Terraform"
on:
  workflow_dispatch:
    inputs:
      accounts:
        description: account to use
        type: choice
        default: PROD
        options:
        - PROD
        - DEV
      action:
        description: 'Terraform Action to Perform'
        type: choice
        options:
        - Terraform_plan
jobs:
  terraform_plan:
    name: "Terraform plan"
    if: ${{ github.event.inputs.action == 'Terraform_plan' }}
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Setup Terraform
        uses: hashicorp/setup-terraform@v1

      - name: Inject AWS credentials
        run: |
          if [[ "${{ github.event.inputs.accounts }}" == "PROD" ]]; then
            echo "AWS_ACCESS_KEY_ID=${{ secrets.PROD_AWS_ACCESS_KEY_ID }}" >> $GITHUB_ENV
            echo "AWS_SECRET_ACCESS_KEY=${{ secrets.PROD_AWS_SECRET_ACCESS_KEY }}" >> $GITHUB_ENV
          fi
          if [[ "${{ github.event.inputs.accounts }}" == "DEV" ]]; then
            echo "AWS_ACCESS_KEY_ID=${{ secrets.DEV_AWS_ACCESS_KEY_ID }}" >> $GITHUB_ENV
            echo "AWS_SECRET_ACCESS_KEY=${{ secrets.DEV_AWS_SECRET_ACCESS_KEY }}" >> $GITHUB_ENV
          fi

      - name: Terraform Init
        id: init
        run: terraform -chdir=vpc init

      - name: Terraform Plan
        run: terraform -chdir=vpc plan
前置检查项
  • 确认仓库Secrets中已正确配置4个密钥值:PROD_AWS_ACCESS_KEY_ID、PROD_AWS_SECRET_ACCESS_KEY、DEV_AWS_ACCESS_KEY_ID、DEV_AWS_SECRET_ACCESS_KEY,密钥名无拼写错误
  • 确认存储的AWS密钥处于生效状态,未被禁用、删除或超出轮换有效期
  • 确认密钥对应的IAM身份拥有VPC资源操作的足够权限,避免后续出现权限类报错

内容的提问来源于stack exchange,提问作者Eveline Ribka Nelwan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 03:36:56