本页面介绍了网关安全规则以及如何创建这些规则。
具有 扩展程序 绑定的授权政策。借助 Secure Web Proxy,您可以在网关安全政策中定义各种类型的安全规则,以保护出站 Web 流量。您可以使用这些规则,通过特定的请求详细信息(例如标头和网址格式)来精确控制流量的安全性,确保只有获批的 HTTP/S 流量才能离开您的网络。
网关安全规则具有以下功能:
每个规则都是一个
if-then语句,用于根据以下参数检查 Web 请求:来源身份:谁在发出请求,例如特定虚拟机 (VM) 或服务账号。
目标:请求的去向,例如目标网址或网域(如
trusted-partner.com)。操作:决定允许还是拒绝流量。
网关安全规则可提供精细控制。借助这些规则,您可以使用清晰、结构化的定义在整个组织中强制执行不同的安全标准。
主机匹配规则
Secure Web Proxy 使用主机名匹配来验证目标网域。验证流程因代理的部署方式而异,如下表所示。
| 部署模式 | 主机验证流程 |
|---|---|
| 显式代理模式 | 对于未加密的流量,代理会根据 HTTP 连接标头检查主机名。如果您使用应用匹配器属性进行 TLS 检查,则代理会先在连接级别检查主机名,然后在应用级别检查主机名。 |
| 下一个跃点模式 | 对于加密流量,代理会根据出站请求中的服务器名称指示 (SNI) 字段检查目标主机名。即使在安全连接上,此字段也可见。 |
为显式代理模式配置主机匹配规则
将 Secure Web Proxy 部署为显式代理时,请配置主机匹配规则,以验证客户端发送的主机信息是否已正确提取,并根据您定义的安全规则进行检查。在显式代理模式下,客户端会主动配置为将其流量直接发送到 Secure Web Proxy 实例。
在显式代理模式下,主机匹配适用于不同类型的 Web 流量,具体如下:
| 流量类型 | 匹配机制 | 规则配置 |
|---|---|---|
| 未加密的 HTTP | Secure Web Proxy 会根据 HTTP 请求的标准 CONNECT 标头中的 host 字段检查目标主机名。 |
在 sessionMatcher 字段中,使用 host() == "example.com"。 |
| 加密的 HTTPS(不进行传输层安全协议 [TLS] 检查) | 在应用级层或会话级层都无法进行主机匹配。这是因为请求详细信息已加密,并且不支持 destination.ip 属性。您必须使用更广泛的政策控制(例如来源身份匹配),或为基于主机的过滤启用 TLS 检查。 |
如需使用应用匹配器,请使用来源身份匹配(例如服务账号)或启用 TLS 检查。 |
| 加密的 HTTPS(使用 TLS 检查) | 如需检查完整请求,您必须同时使用会话匹配器和应用匹配器。 | 1. 设置一个常规会话匹配器规则,该规则会返回 true 或与目标主机(例如 host() == "example.com")匹配。2. 在 |
为下一个跃点模式配置主机匹配规则
将 Secure Web Proxy 部署为下一个跃点时,您必须配置主机匹配规则。流量会根据您定义的 IP 地址范围,通过 Virtual Private Cloud (VPC) 路由重定向到代理。主机匹配规则可确保代理通过检查流量的各个字段(例如服务器名称指示 [SNI] 标头)来正确识别目标主机。
在下一个跃点模式下,主机匹配适用于不同类型的 Web 流量,具体如下:
| 流量类型 | 匹配机制 | 规则配置 |
|---|---|---|
| 未加密的 HTTP | Secure Web Proxy 会根据标准 HTTP 请求标头中的 host 字段检查目标主机名。 |
在 sessionMatcher 字段中,使用 host() == "example.com"。 |
| 加密的 HTTPS(不进行 TLS 检查) | Secure Web Proxy 会根据出站请求中的 SNI 标头检查主机名,即使其余流量已加密,该标头也可见。 | 在 sessionMatcher 字段中,使用 host() == "example.com"。 |
| 加密的 HTTPS(使用 TLS 检查) | 如需检查完整请求,您必须同时使用会话匹配器和应用匹配器。 | 1. 设置一个常规会话匹配器规则,该规则会返回 true 或与目标主机(例如 host() == "example.com")匹配。2. 在 |
TCP 代理规则
借助传输控制协议 (TCP) 代理规则,您可以控制非标准 Web 流量(例如 HTTP [端口 80] 或 HTTPS [端口 443])的流量。通过配置 TCP 代理规则,您可以允许或阻止任何其他 TCP 端口上的流量。这些规则可帮助您屏蔽恶意流量并管理使用 TCP 的非 Web 应用。
如果您的工作负载(例如应用和服务)使用Secure Web Proxy 作为下一个跃点,则应用 TCP 代理规则会很有帮助。基于路由的重定向会将非 HTTP(S) 和非 Web 流量定向到 Secure Web Proxy 实例。这样,您就可以阻止出站流量到达恶意外部网站,并管理网络工作负载可以连接到的外部服务。
配置 TCP 代理规则
您可以为应用配置 TCP 代理规则,以保护非 Web 流量,并为不使用标准 HTTP/S 的应用(例如端口 80 和 443)强制执行安全政策。
通过应用这些规则,您可以防止其他 TCP 端口被未经授权地用于数据传输或恶意活动。当您的工作负载使用Secure Web Proxy 作为下一个跃点来处理非 Web 协议时,此功能尤为有用。
如需实现 TCP 代理规则并为应用创建允许或屏蔽流量规则,您必须指定目标端口。(可选)您可以添加以下任一会话匹配器属性,以优化允许或屏蔽规则的条件。
下表详细介绍了可在 TCP 代理规则中使用的各种属性:
| 属性 | 属性类型 | 说明 |
|---|---|---|
source.ip |
字符串 | 发送请求的客户端的 IP 地址。 |
source.port |
字符串 | 发送请求的客户端端口。 |
destination.port |
字符串 | Secure Web Proxy 实例向其发送流量的上游端口。 |
source.matchTag(SECURE_TAG) |
布尔值 |
该参数是安全标记的永久 ID,例如 |
source.matchServiceAccount(SERVICE_ACCOUNT) |
布尔值 | True,如果来源与 SERVICE_ACCOUNT 相关联,例如 source.matchServiceAccount('x@my-project.')。
|
inIpRange(IP_ADDRESS, |
布尔值 | True,如果 IP_ADDRESS 包含在 IP_RANGE(例如 inIpRange(source.ip, '1.2.3.0/24'))中。IPv6 地址的子网掩码不能大于 `/64`。
|
TCP 代理规则示例
以下示例展示了如何使用 CEL 表达式定义 Secure Web Proxy gatewaySecurityPolicyRule,以允许所有 TCP 流量流向端口 22。您可以在应用 Secure Web Proxy 的 TCP 代理功能时使用此配置。
以下代码示例展示了如何定义 TCP 代理规则:
name: projects/PROJECT_ID/locations/REGION/gatewaySecurityPolicies/POLICY_NAME/rules/RULE_NAME
enabled: true
priority: 100 # Lower numbers have higher priority
description: "Allow TCP proxy traffic to port 22 - such as, for SSH"
basicProfile: ALLOW
sessionMatcher: "destination.port == 22"
替换以下内容:
PROJECT_ID:您的项目的 IDREGION:政策的区域POLICY_NAME:政策的名称RULE_NAME:TCP 代理规则的名称。在此示例中,我们可以将其值视为allow-ssh-tcp-proxy。
重要注意事项
您配置的所有 TCP 代理规则都必须具有比 HTTP/S 规则更高的优先级(更小的数字),以确保首先评估这些规则并采取相应措施。如需了解详情,请参阅规则评估顺序。
配置 TCP 代理规则时,不支持
host会话匹配器属性,因为主机信息在 TCP 层不可用。TCP 代理规则仅根据目标端口过滤 Web 流量。为了增强网络的安全性,我们建议您使用逻辑运算符(逻辑 AND 运算符 [&&] 和逻辑 OR 运算符 [||])以及支持状态属性(例如
source.ip)添加其他条件。以下示例展示了如何定义更具体的 TCP 代理规则:// Allow port 22 from only a specific source IP range sessionMatcher: "destination.port == 22 && inIpRange(source.ip, '10.0.0.0/24')"Secure Web Proxy 不支持为用户数据报协议 (UDP) 应用配置代理规则。因此,Secure Web Proxy 会屏蔽基于 UDP 的应用的流量。
创建安全规则
在创建网关安全规则之前,请确保执行以下操作:
创建规则并将其与政策关联后,您可以在部署 Secure Web Proxy 时使用该规则。
控制台
在 Google Cloud 控制台中,前往 SWP 政策页面。
点击您的政策名称,例如
policy1。点击 添加规则。
对于每条规则,请执行以下操作:
在优先级部分,输入规则的数字评估顺序。这些规则按照从最高到最低的优先级进行评估,其中
0是最高优先级。在名称字段中,输入规则的名称。
在说明字段中,输入规则的说明。
在操作部分,选择以下选项之一:
- 允许:允许与规则匹配的连接请求。
- 拒绝:拒绝与规则匹配的连接请求。
在状态字段中,选择以下选项之一来强制执行规则:
- 已启用:在 Secure Web Proxy 实例上强制执行规则。
- 已停用:不在 Secure Web Proxy 实例上强制执行该规则。
在会话匹配部分中,指定匹配会话的条件,例如
host() == "www.wikipedia.org"。如需详细了解
SessionMatcher的语法,请参阅 CEL 匹配器语言参考文档。在应用匹配部分中,指定用于匹配请求的条件。
如需详细了解如何匹配 TCP 流量,请参阅配置 TCP 代理规则。
点击添加规则。
Cloud Shell
使用您偏好的文本编辑器创建
rule.yaml文件。 如需详细了解sessionMatcher的语法,请参阅 CEL 匹配器语言参考文档。name: projects/PROJECT_ID/locations/REGION/gatewaySecurityPolicies/policy1/rules/RULE_NAME description: Allow wikipedia.org enabled: true priority: 1 basicProfile: ALLOW sessionMatcher: host() == 'www.wikipedia.org'替换以下内容:
PROJECT_ID:您的项目的 IDREGION:政策的区域RULE_NAME:规则的名称。在此示例中,我们可以将其值视为allow-wikipedia-org。
可选:或者,如果您想创建启用了 TLS 检查的规则,请创建
rule.yaml文件,如下所示。如需了解详情,请参阅 TLS 检查概览和启用 TLS 检查。name: projects/PROJECT_ID/locations/REGION/gatewaySecurityPolicies/policy1/rules/RULE_NAME description: Allow wikipedia.org enabled: true priority: 1 basicProfile: ALLOW sessionMatcher: host() == 'www.wikipedia.org' applicationMatcher: request.path.contains('index.html') tlsInspectionEnabled: true如需详细了解如何匹配 TCP 流量,请参阅配置 TCP 代理规则。
创建安全政策规则。
gcloud network-security gateway-security-policies rules import allow-wikipedia-org \ --source=rule.yaml \ --location=REGION \ --gateway-security-policy=policy1
限制
如果您在 Secure Web Proxy 实例中创建授权政策,则代理会忽略所有现有的网关安全政策和关联的网关安全规则。
Secure Web Proxy 不支持为用户数据报协议 (UDP) 应用配置规则。Secure Web Proxy 会屏蔽基于 UDP 的应用的流量。