执行Terraform Plan/Apply时遭遇InvalidClientTokenID错误求助
嘿,我刚碰到过一模一样的问题,这个InvalidClientTokenID错误说白了就是AWS不认可你提供的身份凭证,咱们一步步来排查解决:
核心原因分析
这个错误的本质是Terraform用的AWS访问密钥(Access Key/Secret Key)无效,可能是密钥本身错误、权限不足、或者配置方式有问题。
具体解决步骤
1. 先确认凭证本身的有效性
你现在直接在provider "aws"块里硬编码了access_key和secret_key,先做这几件事:
- 核对密钥的拼写:有没有大小写错误、多余空格,或者复制的时候漏了字符
- 登录AWS IAM控制台,检查这个密钥对应的IAM用户状态:是不是已经被禁用、密钥是否过期,或者有没有被删除
2. 改用更安全且可靠的凭证配置方式
硬编码凭证既不安全也不灵活,Terraform支持多种更靠谱的凭证读取方式,推荐优先用下面两种:
方式一:使用环境变量
在终端里临时设置环境变量(重启终端后会失效):
export AWS_ACCESS_KEY_ID="你的有效Access Key" export AWS_SECRET_ACCESS_KEY="你的有效Secret Key"
然后把provider "aws"块里的access_key和secret_key两行删掉,Terraform会自动读取这两个环境变量。
方式二:使用AWS配置文件
在本地创建~/.aws/credentials文件(Linux/macOS)或者C:\Users\<你的用户名>\.aws\credentials(Windows),内容格式如下:
[default] aws_access_key_id = 你的有效Access Key aws_secret_access_key = 你的有效Secret Key
同样删掉provider块里的硬编码密钥,Terraform会自动加载这个配置文件的默认凭证。
3. 验证区域与凭证的匹配性
你的EC2实例指定了region = "${var.aws_region}",要确保:
- 你的IAM用户/密钥拥有该区域的访问权限(比如EC2、子网相关的权限)
- 该区域是AWS支持的有效区域,没有拼写错误(比如
us-east-1不是us-east-1a,后者是可用区)
4. 顺便修复配置里的小瑕疵
你的aws_instance配置里private_ip字段没写完:
private_ip = "${cidrhost(\"10.43.0.0/16\", ..."
这里需要补充主机位的数字,比如cidrhost("10.43.0.0/16", 10),不然后续执行terraform apply会报错,提前改好避免后续麻烦。
验证方法
改完配置后,先跑一下AWS CLI命令验证身份是否有效(如果没装CLI可以跳过,直接跑Terraform):
aws sts get-caller-identity
如果返回你的IAM用户信息,说明凭证没问题,再执行terraform plan应该就能正常运行了。
内容的提问来源于stack exchange,提问作者Lastweek

