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

GitHub Actions中Terraform通过OIDC认证AWS时遇凭证源无效错误

解决GitHub Actions + Terraform OIDC认证时的“No valid credential sources found”错误

以下是针对你遇到问题的具体排查和解决方向:

核心排查点1:Terraform Cloud工作区的执行模式

你使用的是Terraform Cloud的API驱动工作区,如果工作流中是调用Terraform Cloud远程执行plan/apply,那么GitHub Actions里通过configure-aws-credentials获取的AWS凭证不会自动传递到Terraform Cloud环境中。

  • 解决方式:
    • 若要继续用Terraform Cloud远程执行,需在Terraform Cloud工作区中单独配置AWS认证(比如通过Terraform Cloud的OIDC集成,或者添加AWS凭证变量)
    • 若改为本地执行Terraform(仅用Terraform Cloud作为状态后端),则确保工作流中执行terraform init后直接在GitHub Runner上运行terraform plan,此时会自动读取configure-aws-credentials设置的环境变量。

核心排查点2:AWS Provider配置冲突

不要手动配置Web Identity相关参数,configure-aws-credentials已经会把临时凭证写入环境变量(AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_SESSION_TOKEN),Terraform AWS Provider会自动读取这些变量。

  • 错误示例(会导致冲突):
provider "aws" {
  web_identity_token_file = "/path/to/token"
  role_arn                = "arn:aws:iam::123456789012:role/MyRole"
}
  • 正确配置:
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0" # 确保使用较新版本
    }
  }
}

provider "aws" {
  region = "你的AWS区域" # 比如us-east-1
}

核心排查点3:GitHub Actions权限配置

必须在job级别设置id-token: write权限,否则无法获取OIDC Token用于AWS认证:

jobs:
  deploy:
    permissions:
      id-token: write
      contents: read # 按需添加其他权限
    runs-on: ubuntu-latest
    steps:
      # 后续步骤...

核心排查点4:IAM角色信任策略细节

检查信任策略的以下细节:

  • aud字段必须为sts.amazonaws.com
  • sub字段的repo:<org>/<repo>:*必须完全匹配你的GitHub组织和仓库名称(注意大小写、拼写)
  • 信任策略示例:
{
  "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"
        },
        "StringLike": {
          "token.actions.githubusercontent.com:sub": "repo:<你的组织>/<你的仓库>:*"
        }
      }
    }
  ]
}

核心排查点5:验证凭证是否正确注入

在configure-aws-credentials之后、terraform plan之前添加步骤,确认AWS环境变量已正确设置:

- name: 验证AWS凭证环境变量
  run: |
    echo "AWS_ACCESS_KEY_ID存在: $([ -n "$AWS_ACCESS_KEY_ID" ] && echo "是" || echo "否")"
    echo "AWS_SECRET_ACCESS_KEY存在: $([ -n "$AWS_SECRET_ACCESS_KEY" ] && echo "是" || echo "否")"
    echo "AWS_SESSION_TOKEN存在: $([ -n "$AWS_SESSION_TOKEN" ] && echo "是" || echo "否")"

如果输出有“否”,说明configure-aws-credentials动作未成功获取凭证,需检查该动作的日志报错。

额外排查点:Terraform及Provider版本

确保Terraform AWS Provider版本≥3.0,旧版本可能不支持自动读取临时会话凭证。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 02:21:10