3. VPC网络生产安全设计

在 Google Cloud 上,生产环境网络安全的根基是 VPC(Virtual Private Cloud)。与许多云平台不同,Google Cloud 的 VPC 是全局资源:一个 VPC 可以横跨多个区域,子网则绑定到具体区域。理解这一层“全局 VPC + 区域子网”的结构,是后续做网络分段和微隔离的前提。生产设计的目标不是把网络连起来,而是让东西向流量默认不可达、南北向流量可审计、跨边界访问可管控。

一、VPC 与子网:先规划地址,再谈隔离

生产环境通常不会只用一个 VPC。推荐按“环境 + 用途”划分:例如 prod-shared-vpc 承载共享服务(集中出口、私有 DNS、日志汇聚),prod-app-vpc 承载业务应用,prod-data-vpc 承载数据库与数据平台。子网按区域和层级切分,例如在 asia-east1 下划分 app-tier-subnet 10.10.1.0/24、data-tier-subnet 10.10.2.0/24,在 asia-southeast1 下划分 app-tier-subnet 10.20.1.0/24。地址段要预留扩展空间,避免后期因 CIDR 冲突无法对等互联。

子网创建时有两个关键开关:Private Google Access 和 Flow Logs。前者允许没有外部 IP 的实例访问 Google API 与服务的公网地址;后者把子网内流量的五元组、字节数、时间戳写入 Cloud Logging,是事后审计与异常检测的数据源。生产子网应默认开启 Flow Logs,采样率可先设为 50%,高敏感子网设为 100%。

二、防火墙规则:从“允许”转向“默认拒绝 + 显式放行”

VPC 防火墙规则是有状态、按优先级(0–65535,数字越小优先级越高)匹配的。生产设计应遵循:入站默认拒绝,出站默认拒绝,只放行必要流量。规则通过“目标标签/服务账号 + 源标签/源范围 + 协议端口”三元组精确表达。例如,只允许前端实例访问后端 8080 端口:

gcloud compute firewall-rules create allow-fe-to-be-8080 \
  --network=prod-app-vpc \
  --direction=INGRESS \
  --action=ALLOW \
  --rules=tcp:8080 \
  --source-tags=fe-tier \
  --target-tags=be-tier \
  --priority=1000

这里用网络标签而非 IP 段作为源,意味着实例迁移或扩缩容时规则无需改动,这是微隔离的关键。对于跨项目访问,应改用服务账号作为源和目标,避免标签被误用。出站规则同样要收紧:默认拒绝所有出站,再按需放行到特定 CIDR 或通过 0.0.0.0/0 配合目标标签放行到互联网,并配合 Cloud NAT 隐藏源地址。

三、私有 Google 访问与 Private Service Connect

生产实例不应拥有外部 IP。开启 Private Google Access 后,实例访问 *.googleapis.com 时流量走 Google 内部网络,不经过公网。但 Private Google Access 只解决“访问 Google API”,若要访问托管服务(如 Cloud SQL、Memorystore)的私有 IP,需要配置私有服务访问(Private Service Access),通过 VPC 对等连接到 Google 管理的服务网络。更现代的方式是 Private Service Connect:在消费者 VPC 中创建一个内部 IP 端点,指向服务附件,实现单向、可审计的私有访问,且不暴露服务方的整个网络。

四、VPC Service Controls:给数据画一条“防泄漏边界”

防火墙和私有访问解决的是“网络可达性”,而 VPC Service Controls(VPC SC)解决的是“数据能否被带出边界”。它围绕项目、VPC 和服务定义一条服务边界(Service Perimeter),边界内的 Cloud Storage、BigQuery 等资源默认不能被边界外的客户端访问,即使 IAM 权限允许。生产环境通常为数据平台单独建立边界,把 BigQuery、Cloud Storage、KMS 纳入其中,并配置访问级别(Access Levels)允许特定 IP 段或设备通过。边界模式建议先用试运行(Dry Run)观察哪些调用会被拦截,确认无误后再切换为强制模式。

生产 VPC 网络分段与 VPC Service Controls 边界 外部用户 / 互联网 无边界访问 边界外项目 dev / 第三方 无数据访问权 VPC Service Controls 服务边界(数据防泄漏) prod-shared-vpc Cloud NAT 集中出口 私有 DNS / 日志汇聚 Private Google Access prod-app-vpc fe-tier 子网 be-tier 子网 Flow Logs 已开启 prod-data-vpc Cloud SQL 私有 IP BigQuery / GCS KMS 加密密钥 防火墙规则(默认拒绝 + 显式放行) INGRESS: fe-tier → be-tier:8080 (priority 1000) | EGRESS: be-tier → data-tier:5432 跨项目访问使用服务账号作为源/目标,避免标签误用 Private Service Connect 内部 IP 端点 → 服务附件 单向、可审计的私有访问 不暴露服务方整个网络 访问级别 Access Levels 允许特定 IP 段 / 设备通过 先 Dry Run 观察拦截调用 确认后切换强制模式 拒绝 拒绝 放行 放行 规则匹配 私有访问 条件放行

五、生产分段与微隔离的落地顺序

实际落地时,建议按以下顺序推进,避免一次性改动引发业务中断。第一步,梳理现有实例的标签与服务账号,建立“谁需要访问谁”的流量矩阵;第二步,在非生产环境用 Flow Logs 观察真实流量,识别出被默认拒绝规则误伤的合法调用;第三步,先创建高优先级的放行规则,再逐步收紧默认规则;第四步,对数据层启用 VPC Service Controls 的 Dry Run 模式,观察 1–2 周;第五步,确认无异常后切换强制模式,并把访问级别与 IAM 条件结合使用。

微隔离的粒度不是越细越好。按“层级 + 服务账号”划分通常足够,过度按单个实例打标签会带来维护负担。生产环境应把标签命名规范写入基础设施即代码(IaC)模板,例如 tier=fe|be|data、env=prod,由 CI/CD 强制校验。

六、验证与排障要点

规则生效后,用 gcloud compute firewall-rules list --filter="network=prod-app-vpc" 核对优先级与目标标签;用 Flow Logs 查询被拒绝的连接,确认是预期拦截还是配置遗漏。VPC Service Controls 的拦截会返回 PERMISSION_DENIED 并附带 vpcServiceControlsUniqueIdentifier,可据此在审计日志中定位是哪条边界规则触发。若发现 Dry Run 阶段有大量合法调用被标记,应优先调整访问级别而非直接放宽边界。

生产网络安全的本质是“默认不信任 + 可观测 + 可回滚”。VPC、子网、防火墙、私有访问和 VPC SC 各自解决不同层面的问题,只有把它们组合成一条完整的控制链,才能在保持业务连通的同时,把数据泄漏和横向移动的风险压到可控范围。