EC2实例中awscli与boto3调用Secrets Manager极慢问题排查
这种情况确实反直觉——按说EC2在AWS内部,访问AWS服务应该比本地更快才对。结合你用awscli也慢的情况,已经排除了Python/boto3的问题,大概率是网络或AWS服务配置层面的问题,下面是几个最可能的原因和排查方向:
1. 未配置VPC端点,导致流量绕公网
如果你的EC2实例所在VPC没有配置Secrets Manager的VPC端点,请求会先从EC2流出到公网,再绕回AWS的Secrets Manager服务。本地开发时你走公网可能因为带宽/路由更顺畅(比如本地网络到AWS区域的链路更优),反而比EC2的公网路径快。
排查方式:
- 查看VPC的端点服务,确认是否存在
com.amazonaws.<region>.secretsmanager的接口类型端点 - 如果没有,创建该端点并关联到EC2所在子网和安全组,确保安全组允许EC2到端点的HTTPS(443端口)流量
2. DNS解析延迟或失败
AWS内部服务的域名解析出问题会导致请求长时间等待DNS响应。比如EC2的DNS服务器配置错误,或者无法解析Secrets Manager的域名。
排查方式:
- 在EC2上执行
nslookup secretsmanager.<region>.amazonaws.com,观察解析速度和返回的IP(如果有VPC端点,应该返回端点的内部IP) - 检查EC2的DNS设置:是否使用VPC默认DNS(
VPC CIDR + 2),如果是自定义DNS服务器,确认它能正常解析AWS服务域名
3. 安全组或NACL限制了流量
EC2实例的安全组或VPC的网络访问控制列表(NACL)可能阻止了到Secrets Manager的HTTPS流量,导致请求反复超时重试,最终耗时累积到3分钟。
排查方式:
- 检查EC2安全组的出站规则:是否允许到
0.0.0.0/0的443端口(或VPC端点IP的443端口) - 检查VPC NACL的出站规则:是否允许443端口流量,入站规则是否允许Secrets Manager的响应流量(TCP 443)
4. IAM角色权限验证延迟
虽然权限错误通常直接报错,但如果IAM角色的信任关系有问题,或者AWS IAM服务在该区域有临时延迟,可能导致请求在权限验证环节卡住。
排查方式:
- 在EC2上执行
aws sts get-caller-identity,确认能快速返回身份信息,且IAM角色已正确关联到EC2 - 检查IAM角色的权限策略,确保包含
secretsmanager:GetSecretValue权限,且资源指向目标secret
5. Secrets Manager与EC2跨区域部署
如果你的Secrets Manager在A区域,EC2在B区域,跨区域请求可能因链路临时问题或权限限制导致延迟。
排查方式:
- 确认
aws secretsmanager get-secret-value命令指定了正确的区域(通过--region参数或AWS CLI默认区域),且与EC2所在区域一致
6. EC2实例网络性能异常
虽然你测试了t2.micro和m5.large,但如果EC2所在子网有网络拥塞,或实例网络接口存在问题,也可能导致延迟。
排查方式:
- 在EC2上执行
ping 8.8.8.8或curl https://aws.amazon.com,检查公网访问的延迟和稳定性 - 查看CloudWatch中EC2的网络监控指标(NetworkIn/NetworkOut、NetworkPacketsIn/Out),确认是否有异常
建议优先从VPC端点和DNS解析这两个点开始排查,这是内部服务访问慢最常见的原因——很多用户会忽略配置VPC端点,导致EC2走公网访问Secrets Manager,进而出现这种离谱的延迟。
内容的提问来源于stack exchange,提问作者rodrigocf

