为何无法通过.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服务端点
解决步骤
校验凭证文件格式
打开~/.aws/credentials,确保格式严格符合以下规范,无多余空格、换行:[default] aws_access_key_id = YOUR_VALID_ACCESS_KEY aws_secret_access_key = YOUR_VALID_SECRET_KEY检查密钥是否与硬编码时的有效内容完全一致,避免复制错误。
测试网络连通性
执行以下命令测试STS端点的连通性:curl https://sts.eu-west-1.amazonaws.com/若返回XML格式的错误响应(如
InvalidAction),说明网络连通正常;若返回空内容或超时,需排查代理、防火墙或网络环境问题。排查代理设置
检查是否存在HTTP_PROXY/HTTPS_PROXY环境变量:echo $HTTP_PROXY $HTTPS_PROXY若有代理配置,确认代理可正常访问AWS服务,或临时取消代理后重新测试。
重新配置默认Profile
执行以下命令重新生成凭证文件,避免手动编辑出错:aws configure --profile default按提示依次输入access key、secret key、区域
eu-west-1、输出格式json。验证STS命令
重新执行aws sts get-caller-identity,若返回包含用户ID、账号ID、ARN的有效响应,再运行terraform plan即可正常认证。
内容的提问来源于stack exchange,提问作者Dimitrios Desyllas
相关产品推荐
相关产品推荐

