如何从SageMaker笔记本实例访问IP白名单保护的API?
操作步骤
1. 获取SageMaker Notebook的访问源地址
首先在SageMaker Notebook的代码单元中执行以下命令,拿到实例访问服务的实际源IP:
!curl -s ifconfig.me
- 如果Notebook开启了直接公网访问模式,返回的结果就是Notebook实例自身的出口公网IP
- 如果Notebook配置为VPC模式无直接公网访问权限,返回的结果是VPC绑定的NAT网关弹性IP,也就是实际访问EKS服务的源IP
2. 定位EKS侧业务流量对应的安全组
通过eksctl创建的集群默认会生成多组安全组,不要将规则误加到EKS控制面安全组(该安全组仅用于集群管控API通信,不承载业务流量),需要定位两类承载Flask业务入口的安全组:
- EKS工作节点组绑定的安全组,可通过以下命令查询:
输出结果中eksctl get nodegroup --cluster <你的EKS集群名称> --region <集群所在AWS区域>SecurityGroups字段对应的ID就是节点安全组 - 如果Flask服务通过LoadBalancer类型Service暴露、或者配置了Nginx Ingress,还需要找到对应弹性负载均衡(ELB)附加的安全组,可在EC2控制台的负载均衡页面关联信息中找到
3. 添加白名单规则
在VPC控制台的安全组页面,找到上一步定位到的所有业务安全组,添加入站规则:
- 端口:填写Flask服务实际暴露的端口(默认80/443或你自定义的服务端口)
- 源地址:填写第一步获取到的Notebook出口IP,格式为
<IP地址>/32 - 描述可自定义标记规则用途,保存规则即可
更稳定的内网访问配置方案(避免公网IP变动导致规则失效):
如果SageMaker Notebook和EKS集群部署在同一VPC下,可以直接通过安全组ID配置白名单,无需依赖公网IP:
- 先在SageMaker控制台找到Notebook实例绑定的弹性网卡关联的安全组ID
- 在EKS侧业务安全组添加入站规则时,源直接选择上述SageMaker安全组,端口填Flask服务端口即可,走VPC内网通信,不受公网IP变动影响
4. 排错注意项
- 如果通过Helm部署Flask时,给LoadBalancer类型Service配置了
loadBalancerSourceRanges字段做IP白名单,需要同步将第一步拿到的IP段添加到该字段配置中,执行helm upgrade更新应用Release,否则ELB层会直接拦截流量,即使安全组规则配置正确也无法连通 - 如果Flask服务前端额外挂载了WAF、第三方网关组件,需要同步在对应组件的访问控制规则中添加白名单
- 规则配置完成后,在Notebook中直接curl Flask API地址,验证连通性正常即可
内容的提问来源于stack exchange,提问作者anurags
相关产品推荐
相关产品推荐

