如何保护GCP虚拟机实例:仅允许API Gateway访问,禁止公网直连
解决方案:限制GCP虚拟机仅允许API Gateway访问
针对你的场景,有以下几种可行方案来保护虚拟机实例,避免公网直接访问,覆盖不同成本需求:
方案一:通过VPC内部访问(需Serverless VPC Access Connector,有月度成本)
- 修改Go服务监听地址:将服务的监听配置从
0.0.0.0:1234改为虚拟机的内部私有IP:1234,让服务仅响应VPC内部请求,公网无法直接触达。 - 配置API Gateway使用Serverless VPC Access Connector:创建连接器并关联到虚拟机所在VPC,使网关通过内部网络访问Go服务。注意该方案有月度费用(约50美元),适合对安全性要求极高且能接受成本的场景。
- 调整防火墙规则:删除原
gw-apps规则中0.0.0.0/0的允许配置,替换为允许VPC内部网段或连接器IP范围访问1234端口,拒绝其他所有来源。
方案二:用Cloud Armor过滤API Gateway来源流量(低成本)
- 获取API Gateway的官方IP范围:GCP会定期发布所有服务的IP段,你可以通过以下gcloud命令获取API Gateway的专属IP范围:
也可以通过GCP控制台的「VPC网络 > 外部IP地址」页面,筛选服务为gcloud compute addresses list --filter="service:apigateway.googleapis.com" --format="value(address)"apigateway.googleapis.com的条目获取。 - 创建Cloud Armor安全策略:新建策略,添加规则允许上述API Gateway IP段访问,拒绝所有其他来源。将策略关联到虚拟机的外部IP(若使用负载均衡器则关联到负载均衡器)。
- 更新防火墙规则:配合Cloud Armor,将防火墙规则调整为仅允许Cloud Armor转发流量访问1234端口,进一步缩小访问范围。
方案三:在Go服务中添加网关专属校验(零额外成本)
利用API Gateway的转发特性,在服务层添加校验逻辑,确保请求来自合法网关:
- 在API Gateway的OpenAPI配置中添加自定义头部:比如新增
X-Gateway-Validation-Key头部,设置一个仅你知晓的密钥,让网关转发请求时自动携带该头部。 - 在Go服务中校验头部:在请求处理逻辑中,检查请求是否包含该头部且值与预设密钥一致。若不满足,直接返回
403 Forbidden。 - 配合防火墙规则加固:可以保留防火墙规则中允许
0.0.0.0/0访问1234端口,但通过服务层校验拦截非法请求;也可以缩小防火墙允许范围,实现双重保障。
内容的提问来源于stack exchange,提问作者Nicolas Zozol
相关产品推荐
相关产品推荐

