Terraform对接AWS执行apply时报STS安全令牌无效错误如何解决
问题根因
- AWS凭证链优先级规则导致优先读取无效凭证:AWS官方SDK(包含Terraform AWS Provider、AWS CLI)的凭证读取优先级为「环境变量 > 本地凭证文件/指定Profile配置 > 实例角色/其他凭证来源」,你当前环境配置的
AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY为无效旧凭证,优先级高于你在Provider中指定的SSO Profile,因此所有请求都携带无效凭证触发403报错。 - SSO凭证存储路径不匹配配置:通过
aws configure sso生成的登录凭证默认缓存于~/.aws/sso/cache目录,SSO Profile的配置存储在~/.aws/config文件,你在Provider中强制指定shared_credentials_file = "~/.aws/credentials"会导致Provider无法读取到有效的SSO缓存凭证。 - STS请求区域不匹配是次要触发因素:你执行STS测试命令时指定的区域为
us-west-2,与SSO登录的默认区域eu-west-2不一致,若你账号开启了STS区域端点限制也会额外触发报错,但核心原因还是无效凭证问题。
排查修复步骤
- 清除当前会话中的无效环境变量
不同操作系统执行对应命令:- Linux/macOS:
unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN - Windows CMD:依次执行
set AWS_ACCESS_KEY_ID=、set AWS_SECRET_ACCESS_KEY=、set AWS_SESSION_TOKEN= - Windows PowerShell:依次执行
Remove-Item Env:AWS_ACCESS_KEY_ID、Remove-Item Env:AWS_SECRET_ACCESS_KEY、Remove-Item Env:AWS_SESSION_TOKEN
- Linux/macOS:
- 修正Terraform AWS Provider配置,删除
shared_credentials_file参数,修改后配置如下:provider "aws" { region = "eu-west-2" profile = "450694575897_ProdPS-SuperUsers" } - 验证SSO凭证有效性,执行命令:
aws sts get-caller-identity --profile 450694575897_ProdPS-SuperUsers --region eu-west-2,如果返回正常的账号ID、用户ARN等信息则说明凭证有效。如果提示凭证过期,执行aws sso login --profile 450694575897_ProdPS-SuperUsers刷新登录状态即可。 - 重新执行
terraform apply验证问题是否解决。
内容的提问来源于stack exchange,提问作者user16634471
相关产品推荐
相关产品推荐

