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

为何无法通过.aws配置文件完成AWS Terraform认证?

无法通过AWS默认Profile完成Terraform认证的排查与解决

问题场景

最初在bootstrap.tf中硬编码AWS凭证时,可正常执行terraform plan:

module "ec2-instance" {
  source  = "terraform-aws-modules/ec2-instance/aws"
  version = "5.6.0"
}

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.16"
    }
  }

  required_version = ">= 1.2.0"
}


provider "aws" {
  region  = "eu-west-1"
  access_key = "XXXXXX"
  secret_key = "XXXXXXXXXXX"
}

为避免硬编码,执行aws configure配置默认profile后,修改provider配置:

provider "aws" {
  region  = "eu-west-1"
  profile = "default"
}

但执行terraform plan时出现错误:

Planning failed. Terraform encountered an error while generating this plan.

╷
│ Error: configuring Terraform AWS Provider: validating provider credentials: retrieving caller identity from STS: operation error STS: GetCallerIdentity, decomposing request: net/http: invalid header field value for "Authorization"
│ 
│   with provider["registry.terraform.io/hashicorp/aws"],
│   on bootstrap.tf line 18, in provider "aws":
│   18: provider "aws" {
│ 

环境检查结果

  • AWS CLI配置输出:
aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************X  shared-credentials-file    
secret_key     ****************/XXX shared-credentials-file    
  • ~/.aws/config内容:
[default]
region = eu-west-1
output = json
  • AWS CLI版本:
aws-cli/2.15.17 Python/3.11.6 Linux/5.15.0-94-generic exe/x86_64.linuxmint.21 prompt/off
  • 确认.aws目录下文件存在:
$ ls -l $HOME/.aws/config
-rw-rw-r-- 1 pcmagas pcmagas 43 Φεβ  15 11:49 /home/pcmagas/.aws/config
$ ls -l $HOME/.aws/credentials
-rw-rw-r-- 1 pcmagas pcmagas 119 Φεβ   6 18:53 /home/pcmagas/.aws/credentials
  • 执行aws sts get-caller-identity返回解析错误:
$ aws sts get-caller-identity

Unable to parse response (no element found: line 1, column 0), invalid XML received. Further retries may succeed:
b''

问题根源分析

从aws sts get-caller-identity的错误可以看出,AWS CLI本身无法正常与STS服务通信并获取身份信息,这是导致Terraform认证失败的核心原因,可能的诱因包括:

  • 凭证文件格式错误:credentials文件中access key/secret key存在多余空格、换行或特殊字符,导致生成的Authorization header无效
  • 网络连通性问题:代理配置错误、防火墙拦截等原因,导致请求无法到达AWS STS服务,或响应被截断为空
  • 凭证内容错误:credentials文件中的密钥与硬编码时的有效密钥不一致(比如复制时遗漏字符、多添符号)
  • 区域服务访问问题:当前网络无法正常访问eu-west-1区域的STS服务端点

解决步骤

  1. 校验凭证文件格式
    打开~/.aws/credentials,确保格式严格符合以下规范,无多余空格、换行:

    [default]
    aws_access_key_id = YOUR_VALID_ACCESS_KEY
    aws_secret_access_key = YOUR_VALID_SECRET_KEY
    

    检查密钥是否与硬编码时的有效内容完全一致,避免复制错误。

  2. 测试网络连通性
    执行以下命令测试STS端点的连通性:

    curl https://sts.eu-west-1.amazonaws.com/
    

    若返回XML格式的错误响应(如InvalidAction),说明网络连通正常;若返回空内容或超时,需排查代理、防火墙或网络环境问题。

  3. 排查代理设置
    检查是否存在HTTP_PROXY/HTTPS_PROXY环境变量:

    echo $HTTP_PROXY $HTTPS_PROXY
    

    若有代理配置,确认代理可正常访问AWS服务,或临时取消代理后重新测试。

  4. 重新配置默认Profile
    执行以下命令重新生成凭证文件,避免手动编辑出错:

    aws configure --profile default
    

    按提示依次输入access key、secret key、区域eu-west-1、输出格式json。

  5. 验证STS命令
    重新执行aws sts get-caller-identity,若返回包含用户ID、账号ID、ARN的有效响应,再运行terraform plan即可正常认证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:05:06