无法在私有子网EC2执行aws sts get-caller-identity的排查求助
问题根因及解决方法
核心根因
- STS接口端点私有DNS未启用:创建STS接口端点时若未勾选「Enable private DNS name」,VPC内的EC2实例仍会将
sts.us-east-1.amazonaws.com解析为公网IP,而非接口端点的私有ENI地址,导致请求走公网路由超时。 - 私有子网路由表缺失STS端点路由:接口端点创建后,AWS会自动向关联子网的路由表添加前缀列表路由(目标
com.amazonaws.us-east-1.sts),若路由表未关联端点或路由被误删,请求无法到达端点ENI。 - EC2实例DNS配置异常:若实例手动配置了外部DNS服务器,会绕过VPC内置DNS,无法解析STS端点的私有IP。
解决步骤
1. 确认STS接口端点私有DNS已启用
- 登录AWS控制台,进入VPC > 端点,找到你的STS接口端点。
- 检查「Details」标签下的「Private DNS name」状态为「Enabled」。若未启用,编辑端点并勾选「Enable private DNS name」保存。
2. 验证私有子网路由表配置
- 进入VPC > 路由表,找到私有子网关联的路由表。
- 确认路由表中存在一条路由:
- 目标:
com.amazonaws.us-east-1.sts(前缀列表) - 目标类型:「VPC端点」
- 下一跳:你的STS接口端点ID
- 目标:
- 若缺失该路由,手动添加:选择路由表 > 「Routes」标签 > 「Edit routes」> 「Add route」,目标输入前缀列表
com.amazonaws.us-east-1.sts,下一跳选择对应的STS端点。
3. 检查EC2实例DNS设置
- 登录私有子网内的EC2实例,查看DNS配置文件:
cat /etc/resolv.conf - 确认
nameserver为VPC默认DNS地址(通常是169.254.169.253,或VPC CIDR块的第二个IP,例如VPC为10.0.0.0/16则是10.0.0.2)。 - 若配置了外部DNS,修改
/etc/resolv.conf替换为VPC默认DNS(部分系统需通过DHCP选项集配置永久生效)。
4. 验证解析与连通性
- 在EC2实例上执行解析测试,确认返回STS端点的私有IP(属于VPC CIDR范围):
nslookup sts.us-east-1.amazonaws.com - 重新执行STS命令测试:
aws sts get-caller-identity --profile Allow_Instance_Profile_EC2_to_Access_S3
注意:AWS VPC接口端点的ENI不响应ICMP请求,因此
ping sts.us-east-1.amazonaws.com超时是正常现象,无需以此判断连通性。
内容的提问来源于stack exchange,提问作者vinod827
相关产品推荐
相关产品推荐

