防火墙规则是 Google Cloud 中网络安全的重要组成部分。Google Cloud 中的防火墙大致可分为两种类型;网络防火墙策略和分层防火墙策略 。虽然网络防火墙直接与 VPC 相关联以允许拒绝流量,但分层防火墙可以被视为使用资源层次结构在整个组织中创建和执行策略的策略引擎。可以在组织级别或文件夹级别实施分层策略。与网络防火墙规则一样,分层防火墙策略规则可以允许或拒绝流量,还可以将评估委托给较低级别的策略或网络防火墙规则本身(使用 go_next)。较低级别的规则不能覆盖资源层次结构中较高位置的规则。这使组织范围内的管理员可以在一个地方管理关键的防火墙规则。那么,现在让我们考虑几个使用分层防火墙策略的场景:
1.减少网络防火墙的数量: 示例:假设在 xyz.com 中根据其业务部门获得了 6 个共享 VPC。拒绝 SSH 访问公司中的任何虚拟机是一种安全策略,即拒绝 TCP 端口 22 流量。对于网络防火墙,需要在 6 个地方(每个共享 VPC)执行此规则。每个网段越来越多的细粒度网络防火墙规则意味着更多的接触点,即意味着更多的漂移和事故机会。安全管理员忙于手持,几乎总是成为即使是简单的防火墙更改的瓶颈。借助分层防火墙策略,安全管理员可以创建通用/单一策略来拒绝 TCP 端口 22 流量并将其强制执行到 xyz.com 组织。或者从策略中明确定位一个/多个共享 VPC。这样,单个策略就可以定义更广泛的流量控制态势。2. 使用集中策略管理关键防火墙规则,并在 VPC 级别安全地委派非关键控制示例:在 xyz.com 上,SSH 到 GCE 是被严格禁止的,并且是不可协商的。审计师需要这个。允许/拒绝到端口 443 的 TCP 流量取决于流量要到达的共享 VPC。在这种情况下,安全管理员可以创建一个策略来拒绝 TCP 端口 22 流量并将该策略强制执行到 xyz.com。另一个策略是为 TCP 端口 443 流量创建“go_next”并在下一个较低级别决定是否允许此流量。然后,使用网络防火墙规则在共享 VPC 级别允许/拒绝 443 流量。
通过这种方式,安全管理员可以在更高级别进行更广泛的控制,以强制执行流量控制策略并在可能的情况下进行委派。在一个地方管理最关键的防火墙规则的能力也使项目级管理员(例如,项目所有者、编辑或安全管理员)不必跟上不断变化的组织范围的政策。
通过分层防火墙策略,安全管理员可以集中实施、管理和观察流量控制模式。
创建、配置和实施分层防火墙策略
分层防火墙策略有 3 个主要组成部分;规则、政策和协会。
从广义上讲,“规则”是一种决策结构,用于声明是否应允许、拒绝或将流量委托给下一级进行决策。“策略”是规则的集合,即一个或多个规则可以与策略相关联。“关联”说明政策在谷歌云资源层次结构中的执行点。
这些概念在产品页面上有广泛的解释。
规则、策略和关联的简单可视化看起来像
分层防火墙策略的基础架构即代码 (Terraform)
需要将3 个Terraform 资源拼接在一起以构建和实施分层防火墙策略。
#1 政策Terraform 资源– google_compute_firewall_policy
在这个模块中,最重要的参数是“parent”参数。分层防火墙策略,如项目,由文件夹或组织资源作为父级。请记住,这不是执行或关联策略的文件夹。它只是一个拥有您正在创建的策略的文件夹。使用文件夹来拥有分层防火墙策略,还简化了 IAM 来管理谁可以创建/修改这些策略,即只需将 IAM 分配给该文件夹。
对于扩展环境,建议创建一个单独的“firewall-policy”文件夹来托管所有分层防火墙策略。
样本
/* Create a Policy */ resource "google_compute_firewall_policy" "base-fw-policy" { parent = "folders/<folder-id>" short_name = "base-fw-policy" description = "A Firewall Policy Example" }
gcloud resource-manager folders list --organization=<your organization ID> --filter='<name of the folder>'
例如,如果您的防火墙策略文件夹名为“firewall-policy”,则使用gcloud resource-manager folders list --organization=<your organization ID> --filter='firewall-policy'
#2 规则Terraform 资源– google_compute_firewall_policy_rule此资源定义中的大多数参数都非常明显,但有几个参数需要特别考虑。
disabled
– 表示是否禁用防火墙策略规则。设置为 true 时,不会强制执行防火墙策略规则,流量的行为就好像它不存在一样。如果未指定,将启用防火墙策略规则。enable_logging
– 强烈建议启用防火墙日志记录,以获得许多未来的运营优势。要启用它,请传递true
给此参数。target_resources
– 当您想要针对此规则的某些共享 VPC 时,此参数会派上用场。您需要传递共享 VPC 的 URI 路径。顶部获取 VPC 的 URI 使用此命令
gcloud config set project <Host Project ID>
gcloud compute networks list --uri
/* Create a Firewall rule #1 */ resource "google_compute_firewall_policy_rule" "base-fw-rule-1" { firewall_policy = google_compute_firewall_policy.base-fw-policy.id description = "Firewall Rule #1 in base firewall policy" priority = 9000 enable_logging = true action = "deny" direction = "INGRESS" disabled = false match { layer4_configs { ip_protocol = "tcp" ports = [22] } src_ip_ranges = ["35.235.240.0/20"] } target_resources = ["https://www.googleapis.com/compute/v1/projects/<PROJECT -ID>/global/networks/<VPC-NAME>"] }
attachment_target
传递要执行此策略的文件夹 ID 中,即此文件夹下的所有内容(所有项目)都将获得此策略。对于共享 VPC,目标文件夹应该是您的宿主项目的父文件夹。/* Associate the policy */ resource "google_compute_firewall_policy_association" "associate-base-fw-policy" { firewall_policy = google_compute_firewall_policy.base-fw-policy.id attachment_target = "folders/<Folder ID>" name = "Associate Base Firewall Policy with dummy-folder" }
概括
分层防火墙策略简化了在整个 Google Cloud 环境中实施一致的流量控制策略的复杂过程。借助本文中展示的 Terraform 模块和自动化,它使安全管理员能够使用策略引擎和已知的基础架构即代码平台构建护栏。