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

GitHub Action与Terraform集成时出现Permission denied权限问题

问题分析与解决方案

核心原因

你遇到的权限问题本质是认证协议不匹配:

  • 本地使用SSH密钥完成认证,对应模块源的git@github.com格式(SSH协议),所以能正常拉取模块;
  • 你在GitHub Action中配置的GITHUB_TOKEN是HTTPS协议的认证凭据,但Terraform会严格按照模块源指定的SSH协议尝试认证,不会自动切换到HTTPS使用TOKEN,因此触发权限拒绝。

解决方案

方案1:改用HTTPS格式模块源(推荐,无需额外SSH配置)

方式A:直接修改模块源

将main.tf中的SSH格式源替换为带TOKEN的HTTPS地址:

module "1" {
    source   = "https://${var.github_token}@github.com/my_user/XXX.git"
}

然后在GitHub Action工作流中,将TOKEN传入Terraform变量:

jobs:
  terraform:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Setup Terraform
        uses: hashicorp/setup-terraform@v3
      
      - name: Terraform Init
        env:
          TF_VAR_github_token: ${{ secrets.TOKEN }}
        run: terraform init

方式B:通过Git配置自动转换协议

无需修改main.tf,在Action中添加Git配置,自动将SSH格式的源替换为带TOKEN的HTTPS格式:

jobs:
  terraform:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Setup Terraform
        uses: hashicorp/setup-terraform@v3
      
      - name: Terraform Init
        run: |
          git config --global url."https://${{ secrets.TOKEN }}@github.com/".insteadOf "git@github.com:"
          terraform init

方案2:在Action中配置SSH密钥(保留SSH模块源)

如果坚持使用SSH格式的模块源,可通过加载SSH私钥完成认证:

  1. 本地生成新SSH密钥对:ssh-keygen -t ed25519 -C "github-action-terraform"
  2. 将公钥添加到你的GitHub账号SSH密钥列表(Settings -> SSH and GPG keys -> New SSH key)
  3. 将私钥内容存入当前仓库的Secrets,命名为SSH_PRIVATE_KEY
  4. 在工作流中加载私钥:
jobs:
  terraform:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Load SSH Private Key
        uses: webfactory/ssh-agent@v0.7.0
        with:
          ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
      
      - name: Setup Terraform
        uses: hashicorp/setup-terraform@v3
      
      - name: Terraform Init
        run: terraform init

额外注意事项

若使用GitHub内置的GITHUB_TOKEN(而非自定义TOKEN),需确保当前仓库的「Settings -> Actions -> General」中,Workflow permissions设置为Read and write permissions,保证TOKEN拥有拉取其他私有仓库的权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 05:25:17