Terraform执行terraform plan时遭遇AWS安全令牌无效错误求助
解决Terraform AWS认证错误(InvalidClientTokenId)
核心排查方向
1. 验证凭证本身的有效性
- 逐字符核对
access_key和secret_key,避免大小写错误、多余空格或复制遗漏;如果是临时凭证,必须同时提供session_token并在provider块中配置 - 登录AWS控制台,进入IAM > 用户 > 安全凭证,确认对应访问密钥的状态为Active,未被禁用或删除
- 临时凭证需检查过期时间,STS临时凭证最长有效期为12小时,过期后需重新获取
2. 清理本地凭证缓存与环境冲突
- 备份并删除
~/.aws/credentials和~/.aws/config文件,避免Terraform优先读取旧的本地凭证 - 执行
env | grep AWS,检查是否存在AWS_PROFILE、AWS_SESSION_TOKEN等环境变量,这些变量可能会覆盖provider块或手动设置的凭证 - 如果使用AWS CLI配置了多个profile,确保Terraform没有默认加载错误的profile(可在provider块中显式指定
profile = "your-profile")
3. 检查IAM权限与策略限制
- 确认IAM用户/角色拥有
sts:GetCallerIdentity权限,这是Terraform验证凭证的基础操作,需确保没有被显式拒绝的策略(包括IAM用户策略、组策略和组织级SCP) - 检查是否有SCP限制了STS服务的调用,部分组织会通过SCP限制特定区域或操作的访问
4. 网络连通性验证
- 测试STS endpoint的连通性:执行
curl https://sts.us-east-1.amazonaws.com/?Action=GetCallerIdentity&Version=2011-06-15,如果无法返回正常响应,说明存在代理、防火墙或VPN拦截 - 如果使用VPC endpoint访问STS,确认endpoint的安全组和策略允许
sts:GetCallerIdentity操作
5. 独立验证凭证有效性
- 用AWS CLI直接测试凭证,排除Terraform本身的问题:
如果该命令报错,说明问题出在AWS凭证或权限上,与Terraform无关;如果正常返回,再检查Terraform的provider配置是否有遗漏aws sts get-caller-identity --access-key "你的access_key" --secret-key "你的secret_key" --region us-east-1
内容的提问来源于stack exchange,提问作者NKLSNKLS
相关产品推荐
相关产品推荐

