如何通过Serverless VPC Connector限制Cloud Run仅访问指定VPC资源
限制Serverless VPC Access Connector仅访问指定Memorystore实例
针对你遇到的Serverless VPC Access Connector默认防火墙规则权限过宽的问题,可以通过以下最小权限配置实现仅允许Cloud Run访问指定Memorystore实例:
步骤1:移除默认宽权限防火墙规则
创建连接器时自动生成的规则(命名格式通常为vpc-access-connector-<连接器ID>-allow)会允许连接器子网访问整个VPC内的所有资源,直接在VPC防火墙规则列表中找到并删除该规则。
步骤2:创建精准的双向防火墙规则
需要配置两条规则,确保仅连接器与目标Memorystore之间的流量被允许:
- 出站规则(Cloud Run → Memorystore)
- 方向:出站
- 源:Serverless VPC Access Connector的子网CIDR
- 目标:Memorystore实例的私有IP(或其所在的专属子网CIDR,若需覆盖同段多个实例)
- 协议/端口:TCP,端口
6379(若使用自定义Redis端口则替换) - 动作:允许
- 入站规则(Memorystore → Cloud Run)
- 方向:入站
- 源:Memorystore实例的私有IP(或其所在的专属子网CIDR)
- 目标:Serverless VPC Access Connector的子网CIDR
- 协议/端口:TCP,端口
6379 - 动作:允许
步骤3:验证规则有效性
部署Cloud Run应用后,测试Redis连接是否正常;同时尝试访问VPC内其他资源(如VM、GKE Pod),确认无法建立连接,确保规则仅生效于目标Memorystore。
确认客户端配置
你的Node.js Redis客户端配置已符合要求,注意确保REDIS_HOST环境变量设置为Memorystore的私有IP:
const { createClient } = require('redis'); function getClient() { const client = createClient({ socket: { host: process.env.REDIS_HOST }, password: process.env.REDIS_PASS }); client.on('error', (err) => { throw Error(`redis client error: ${err}`); }); return client; }
内容的提问来源于stack exchange,提问作者user20809391
相关产品推荐
相关产品推荐

