如何解决Terraform配置本地AWS凭证时的报错问题?
Terraform AWS Provider凭证配置报错解决方法
问题场景
使用以下Terraform配置AWS Provider:
provider "aws" { region = var.region_name profile = "default" } terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 3.76" } } required_version = ">= 0.14.9" }
执行terraform plan时触发如下错误:
Error: error configuring Terraform AWS Provider: no valid credential sources for Terraform AWS Provider found. │ │ Please see https://registry.terraform.io/providers/hashicorp/aws │ for more information about providing credentials. │ │ Error: NoCredentialProviders: no valid providers in chain │ caused by: EnvAccessKeyNotFound: failed to find credentials in the environment. │ SharedCredsLoad: failed to load profile, default. │ EC2RoleRequestError: no EC2 instance role found │ caused by: RequestError: send request failed │ caused by: Get "http://169.254.169.254/latest/meta-data/iam/security-credentials/": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
解决步骤
1. 检查本地AWS凭证文件
Terraform指定profile = "default"后,会读取本地AWS凭证文件:
- Linux/macOS路径:
~/.aws/credentials - Windows路径:
C:\Users\<你的用户名>\.aws\credentials
确保文件存在且格式正确:
[default] aws_access_key_id = YOUR_ACCESS_KEY aws_secret_access_key = YOUR_SECRET_KEY
若无此文件,运行aws configure命令,按提示输入Access Key、Secret Key、区域和输出格式,自动生成凭证文件。
2. 修复凭证文件权限
- Linux/macOS下,设置文件权限为
600,防止其他用户读取:chmod 600 ~/.aws/credentials - Windows下,修改文件权限,仅允许当前用户访问。
3. 直接设置环境变量(可选)
不想依赖凭证文件时,可通过环境变量传递凭证:
- Linux/macOS终端:
export AWS_ACCESS_KEY_ID="YOUR_ACCESS_KEY" export AWS_SECRET_ACCESS_KEY="YOUR_SECRET_KEY" export AWS_REGION="your-region" - Windows命令提示符:
set AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY set AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEY set AWS_REGION=your-region - PowerShell:
$env:AWS_ACCESS_KEY_ID="YOUR_ACCESS_KEY" $env:AWS_SECRET_ACCESS_KEY="YOUR_SECRET_KEY" $env:AWS_REGION="your-region"
4. EC2实例环境检查(如果适用)
若在EC2实例中执行Terraform,需确认:
- 实例已关联具备对应权限的IAM角色
- VPC未禁用实例元数据访问(IMDS)
5. 验证凭证有效性
执行aws sts get-caller-identity命令,若能返回用户/角色信息,说明凭证有效;若报错,先解决AWS CLI的凭证问题,再重新运行terraform plan。
内容的提问来源于stack exchange,提问作者Santosh Garole
相关产品推荐
相关产品推荐

