本页面介绍了如何管理 Google Cloud Armor 安全政策,以及如何过滤流向应用的传入流量。Cloud Armor 安全政策可帮助保护您的 Web 应用和服务免受分布式拒绝服务 (DDoS 攻击) 攻击和来自互联网的其他威胁。若要强制执行严格的安全状况,您需要通过创建、测试和整合来管理安全政策。如需创建或查看安全政策,请参阅创建和查看 Cloud Armor 安全政策。
管理安全政策
以下部分介绍了如何列出、更新、删除或测试安全政策。
列出安全政策
按照本部分中的步骤列出项目中的 Cloud Armor 安全政策。
控制台
在 Google Cloud 控制台中,前往 Cloud Armor 政策页面。
如需查看某项政策,请在政策列表中点击该政策的名称。
gcloud
gcloud compute security-policies list
例如:
gcloud compute security-policies list
输出:
NAME: my-policy REGION: us-central1
如需了解详情,请参阅 gcloud compute security-policies
list。
更新安全政策
本部分中的步骤介绍了如何更新 Cloud Armor 安全政策。您可以修改政策的说明、修改默认规则、更改目标后端服务或添加规则。
控制台
在 Google Cloud 控制台中,前往 Cloud Armor 政策页面。
在政策列表中找到要更新的政策的名称,然后点击相应政策的 菜单。
- 如需更新说明或默认规则操作,请选择修改,进行所需的更改,然后点击更新。
- 如要添加规则,请选择添加规则,然后按照向安全政策添加规则中的步骤操作。
- 如要替换目标后端服务,请选择将政策应用于目标,点击添加目标,然后选择一个目标,再点击添加。
gcloud
如要更新安全政策,请使用以下 Google Cloud CLI 步骤:
- 如需更新规则,请参阅更新安全政策中的单个规则。
- 如需添加规则,请参阅将规则添加到安全政策。
- 如需删除规则,请参阅从安全政策中删除规则。
- 如需在一次原子更新中更新多条规则,请参阅以原子方式更新安全政策中的多条规则。
- 如需更新非规则字段(例如说明),请参阅导出安全政策和导入安全政策。
删除多项安全政策
本部分介绍了如何删除 Cloud Armor 安全政策。必须先从政策中移除所有后端服务,然后才能删除政策。
控制台
在 Google Cloud 控制台中,前往 Cloud Armor 政策页面。
选中要删除的政策旁边的复选框。
点击页面右上角的删除。
gcloud
使用 gcloud compute security-policies delete NAME。将 NAME 替换为安全政策的名称:
gcloud compute security-policies delete NAME
测试安全政策
我们建议您在预览模式下部署所有新规则,然后检查请求日志,以验证政策和规则的行为符合预期。
管理安全政策规则
以下部分介绍了如何列出、添加、更新或删除安全政策规则。
列出安全政策中的规则
按照本部分中的步骤列出 Cloud Armor 安全政策中的规则。
控制台
在 Google Cloud 控制台中,前往 Cloud Armor 政策页面。
点击特定安全政策的名称。政策详情页面会在规则标签页中显示政策规则。
gcloud
使用以下 gcloud 命令列出安全政策中的所有规则:
gcloud compute security-policies describe NAME \
使用以下 gcloud 命令列出指定区域中单个安全政策的所有规则以及该政策的说明:
gcloud compute security-policies describe NAME \ --region REGION
使用以下 gcloud 命令描述规则:
gcloud compute security-policies rules describe PRIORITY \
--security-policy POLICY_NAME
例如,以下命令描述了安全政策 my-policy 中优先级为 1000 的规则:
gcloud compute security-policies rules describe 1000 \
--security-policy my-policy
输出:
action: deny(403) description: block traffic from 192.0.2.0/24 and 198.51.100.0/24 kind: compute#securityPolicyRule match: srcIpRanges: - '192.0.2.0/24' - '198.51.100.0/24' preview: false priority: 1000
如需了解详情,请参阅 gcloud compute security-policies
describe。
将规则添加到安全政策
按照本部分中的步骤将规则添加到 Cloud Armor 安全政策。
控制台
在 Google Cloud 控制台中,前往 Cloud Armor 政策页面。
点击安全政策的名称,打开政策详情页面。
在页面中间,点击规则标签页。
点击添加规则。
可选:输入规则的说明。
选择模式:
- 基本模式:根据 IP 地址或 IP 范围允许或拒绝流量。
- 高级模式:根据规则表达式允许或拒绝流量。
在匹配字段中,指定规则适用的条件:
基本模式:输入 1 到 10 个要在规则中匹配的 IP 地址范围。您最多可以添加 10 个 IP 地址范围。如需了解限制,请参阅 Cloud Armor 配额和限制。
高级模式:
- 匹配条件构建器(预览版):使用直观的构建器创建表达式,无需编写原始 CEL 代码。合并和分组条件,并应用字符串转换。请参阅使用匹配条件构建器。
- 匹配条件编辑器:输入要根据传入请求进行评估的表达式。如需了解详情,请参阅自定义规则语言参考文档。
以下表达式与来自 IP 地址
1.2.3.4的请求匹配,并且在User-Agent标头中包含字符串example:inIpRange(origin.ip, '1.2.3.4/32') && has(request.headers['user-agent']) && request.headers['user-agent'].contains('example')以下表达式与具有特定值的 Cookie 的请求匹配:
has(request.headers['cookie']) && request.headers['cookie'].contains('cookie_name=cookie_value')以下表达式与来自区域
AU的请求匹配:origin.region_code == 'AU'以下表达式与来自区域
AU且不在指定 IP 范围内的请求匹配:origin.region_code == "AU" && !inIpRange(origin.ip, '1.2.3.0/24')如果 URI 与正则表达式匹配,则以下表达式与请求匹配:
request.path.matches('/example_path/')如果
user-id标头包含一个 Base64 编码的值,该值在解码后包含特定字符串,则以下表达式与请求匹配:has(request.headers['user-id']) && request.headers['user-id'].base64Decode().contains('myValue')以下表达式使用设置为与 SQLi 攻击匹配的预配置表达式:
evaluatePreconfiguredWaf('sqli-stable')
在操作列表中,选择允许或拒绝。
如果您要配置拒绝规则,请选择拒绝状态消息。
如要为规则启用预览模式,请选择启用。
在优先级字段中,输入一个正整数。
点击添加。
gcloud
使用 gcloud compute security-policies rules create
PRIORITY 命令。将 PRIORITY 替换为政策中规则的优先级:
gcloud compute security-policies rules create PRIORITY \
--security-policy POLICY_NAME \
--description DESCRIPTION \
--src-ip-ranges IP_RANGES | --expression EXPRESSION \
--action=[ allow | deny-403 | deny-404 | deny-502 ] \
--preview
例如,以下命令会添加一条优先级为 1000 的规则,以阻止来自 IP 地址范围 192.0.2.0/24 和 198.51.100.0/24 的流量:
gcloud compute security-policies rules create 1000 \
--security-policy my-policy \
--description "block traffic from 192.0.2.0/24 and 198.51.100.0/24" \
--src-ip-ranges "192.0.2.0/24","198.51.100.0/24" \
--action "deny-403"
使用 --expression 标志指定条件。以下命令将添加一条规则,以允许来自 IP 地址 1.2.3.4 的流量,并且在 User-Agent 标头中包含字符串 example:
gcloud compute security-policies rules create 1000 \
--security-policy my-policy \
--expression "inIpRange(origin.ip, '1.2.3.4/32') && has(request.headers['user-agent']) && request.headers['user-agent'].contains('example')" \
--action allow \
--description "Block User-Agent 'example'"
如果请求的 Cookie 包含特定值,以下命令将添加一条规则以阻止请求:
gcloud compute security-policies rules create 1000 \
--security-policy my-policy \
--expression "has(request.headers['cookie']) && request.headers['cookie'].contains('80=BLAH')" \
--action deny-403 \
--description "Cookie Block"
以下命令将添加一条规则,以阻止来自地区 AU 的请求:
gcloud compute security-policies rules create 1000 \
--security-policy my-policy \
--expression "origin.region_code == 'AU'" \
--action deny-403 \
--description "AU block"
以下命令会添加一条规则,以阻止来自不在指定 IP 范围内的 AU 区域的请求:
gcloud compute security-policies rules create 1000 \
--security-policy my-policy \
--expression "origin.region_code == "AU" && !inIpRange(origin.ip, '1.2.3.0/24')" \
--action deny-403 \
--description "country and IP block"
以下命令将添加一条规则,以阻止具有与正则表达式匹配的 URI 的请求:
gcloud compute security-policies rules create 1000 \
--security-policy my-policy \
--expression "request.path.matches('/example_path/')" \
--action deny-502 \
--description "regex block"
以下命令会添加一条规则,以便在 user-id 标头的 Base64 解码值包含特定值时阻止请求:
gcloud compute security-policies rules create 1000 \
--security-policy my-policy \
--expression "has(request.headers['user-id']) && request.headers['user-id'].base64Decode().contains('myValue')" \
--action deny-403 \
--description "country and IP block"
以下命令将添加一条规则,该规则使用预配置的表达式集来缓解 SQLi 攻击:
gcloud compute security-policies rules create 1000 \
--security-policy my-policy \
--expression "evaluatePreconfiguredWaf('sqli-stable')" \
--action deny-403
更新安全政策中的单个规则
本部分介绍了如何更新 Cloud Armor 安全政策中的单条规则。如需以原子方式更新多条规则,请参阅以原子方式更新安全政策中的多条规则。
控制台
在 Google Cloud 控制台中,前往 Cloud Armor 政策页面。
点击安全政策的名称,打开政策详情页面。
在页面中间,点击规则标签页。
在要更新的规则旁边,点击修改。随即会显示修改规则页面。
进行更改,然后点击更新。
gcloud
使用以下命令更新规则。您一次只能更新一个安全政策:
gcloud compute security-policies rules update PRIORITY [ \
--security-policy POLICY_NAME \
--description DESCRIPTION \
--src-ip-ranges IP_RANGES | --expression EXPRESSION \
--action=[ allow | deny-403 | deny-404 | deny-502 ] \
--preview
]
例如,以下命令将更新优先级为 1111 的规则,以允许来自 IP 地址范围 192.0.2.0/24 的流量:
gcloud compute security-policies rules update 1111 \
--security-policy my-policy \
--description "allow traffic from 192.0.2.0/24" \
--src-ip-ranges "192.0.2.0/24" \
--action "allow"
如需详细了解上述命令,请参阅 gcloud compute
security-policies rules
update。
如需更新规则的优先级,请使用 REST API。请参阅 securityPolicies.patchRule。
使用匹配条件构建器
匹配条件构建器是 Google Cloud 控制台中的一个直观界面,可帮助您创建复杂的 Cloud Armor 规则表达式,而无需编写通用表达式语言 (CEL) 代码。您无需编写代码,只需使用构建器的结构化界面来组合条件和分组逻辑,这样有助于您避免语法错误并更好地直观呈现规则结构。构建器支持扁平列表和嵌套逻辑,最多可包含 5 级表达式。 在配置规则以帮助保护多云后端或混合部署时,您可以使用此工具,因为在路由流量之前,您可能需要检查特定的请求属性。
匹配条件构建器的功能
匹配条件构建器包含以下功能:
- 逻辑和嵌套:使用
AND和OR运算符组合多个条件。构建器支持对最多 5 个表达式进行分组和嵌套。 - 字符串转换:对于基于字符串的属性(例如
request.path或request.headers),在评估之前应用转换来规范化数据。支持的转换包括:- 小写和大写
- Base64 解码
- 网址解码和网址解码 (Unicode)
- UTF-8 到 Unicode 转换
- 双向解析:在可视化匹配条件构建器和原始文本匹配条件编辑器之间切换。界面会自动将原始 CEL 代码解析为可视化块。
- 功能支持:构建器提供用于基于函数的表达式(例如预配置的 WAF 规则、地址组和威胁情报)的界面控件。
限制
匹配条件构建器是用于创建高级规则的默认界面。 如果表达式包含不受支持的逻辑(例如未知宏),构建器将被停用。在这种情况下,请使用匹配条件编辑器中的原始文本来修改规则。
此外,构建器中某些表达式的可用性取决于项目的 Google Cloud Armor Enterprise 层级和安全政策类型。
以原子方式更新安全政策中的多条规则
您可以使用原子更新功能,在一次更新中将更改应用于多条规则。单条规则更新可能会导致意外行为(例如错误),因为新旧规则可能会在短时间内重叠。
要以原子方式更新多个规则,请将当前安全政策导出到 JSON 或 YAML 文件中,然后对其进行修改。使用修改后的文件创建安全政策,然后切换后端服务的安全政策。
gcloud
导出政策以进行更新,如以下示例所示:
gcloud compute security-policies export my-policy \ --file-name my-file \ --file-format yaml导出后的政策将类似于以下示例:
description: my description fingerprint: PWfLGDWQDLY= id: '123' name: my-policy rules: - action: deny(404) description: my-rule-1 match: expr: expression: evaluatePreconfiguredWaf('xss-stable') versionedExpr: SRC_IPS_V1 preview: false priority: 1 - action: allow description: my-rule-2 match: config: srcIpRanges: - '1.2.3.4' versionedExpr: SRC_IPS_V1 preview: false priority: 2 - action: deny description: default rule kind: compute#securityPolicyRule match: config: srcIpRanges: - '*' versionedExpr: SRC_IPS_V1 preview: false priority: 2147483647 selfLink: https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy使用文本编辑器修改政策。例如,您可以修改现有规则的优先级并添加规则:
description: my description fingerprint: PWfLGDWQDLY= id: '123' name: my-policy rules: - action: deny(404) description: my-rule-1 match: expr: expression: evaluatePreconfiguredWaf('xss-stable') versionedExpr: SRC_IPS_V1 preview: false priority: 1 - action: allow description: my-new-rule match: config: srcIpRanges: - '1.2.3.1' versionedExpr: SRC_IPS_V1 preview: false priority: 10 - action: allow description: my-rule-2 match: config: srcIpRanges: - '1.2.3.4' versionedExpr: SRC_IPS_V1 preview: false priority: 11 - action: deny description: default rule kind: compute#securityPolicyRule match: config: srcIpRanges: - '*' versionedExpr: SRC_IPS_V1 preview: false priority: 2147483647 selfLink: https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy创建一个新的 Cloud Armor 安全政策并指定修改后的文件名和格式,如以下示例所示:
gcloud compute security-policies create new-policy \ --file-name modified-policy \ --file-format yaml从相关后端服务中移除旧安全政策,如以下示例所示:
gcloud compute backend-services update my-backend \ --security-policy ""将新安全政策添加到后端服务,如以下示例所示:
gcloud compute backend-services update my-backend \ --security-policy new-policy如果未使用旧政策,请将其删除:
gcloud compute security-policies delete my-policy
从安全政策中删除规则
按照本部分中的步骤删除 Cloud Armor 安全政策中的规则。
控制台
在 Google Cloud 控制台中,前往 Cloud Armor 政策页面。
点击安全政策的名称,打开政策详情页面。
在该页面中间的规则标签页上,选中要删除的规则旁边的复选框。
点击删除。
gcloud
使用以下命令可移除规则。您一次只能修改一个安全政策,但可以一次删除多个规则:
gcloud compute security-policies rules delete PRIORITY [...] [
--security-policy POLICY_NAME \
]
例如:
gcloud compute security-policies rules delete 1000 \
--security-policy my-policy
添加和移除安全政策
以下部分介绍了如何附加和移除安全政策。
将安全政策附加到后端服务
按照本部分中的步骤将 Cloud Armor 安全政策附加到后端服务。您可以将安全政策附加到多个后端服务,但是一个后端服务只能附加每种类型中的一个安全政策。
控制台
在 Google Cloud 控制台中,前往 Cloud Armor 政策页面。
点击安全政策的名称,打开政策详情页面。
在页面中间,点击目标标签页。
点击将政策应用于新目标。
点击添加目标。
在目标列表中,选择一个目标,然后点击添加。
gcloud
将后端安全政策附加到后端服务时,请使用 gcloud compute backend-services 命令和 --security-policy 标志:
gcloud compute backend-services update my-backend \
--security-policy my-policy
将边缘安全政策附加到后端服务时,请使用 gcloud compute backend-services 命令和 --edge-security-policy 标志:
gcloud compute backend-services update my-backend \
--edge-security-policy my-policy
从后端服务中移除安全政策
按照本部分中的步骤从后端服务中移除 Cloud Armor 安全政策。
控制台
在 Google Cloud 控制台中,前往 Cloud Armor 政策页面。
点击安全政策的名称,打开政策详情页面。
在页面中间,点击目标标签页。
选择要从中移除政策的目标后端服务。
点击移除。
在移除目标消息中,点击移除。
gcloud
移除后端安全政策时,请使用 gcloud compute
backend-services 命令和 --security-policy 标志:
gcloud compute backend-services update my-backend \
--security-policy ""
移除边缘安全政策时,请使用 gcloud compute
backend-services 命令和 --edge-security-policy 标志:
gcloud compute backend-services update my-backend \
--edge-security-policy ""
将安全政策附加到后端存储桶
按照本部分中的步骤将 Cloud Armor 边缘安全政策附加到后端存储桶。您可以将边缘安全政策附加到多个后端存储桶。
控制台
在 Google Cloud 控制台中,前往 Cloud Armor 政策页面。
点击安全政策的名称,打开政策详情页面。
在页面中间,点击目标标签页。
点击将政策应用于新目标。
点击添加目标。
在目标列表中,选择一个目标,然后点击添加。
gcloud
将边缘安全政策附加到后端存储桶时,请使用 cloud
compute backend-buckets 命令和 --edge-security-policy 标志:
gcloud compute backend-services update my-bucket \
--edge-security-policy my-edge-policy
从后端存储桶中移除安全政策
按照本部分中的步骤从后端存储桶中移除 Cloud Armor 边缘安全政策。
控制台
在 Google Cloud 控制台中,前往 Cloud Armor 政策页面。
点击安全政策的名称,打开政策详情页面。
在页面中间,点击目标标签页。
选择要从中移除政策的目标后端服务。
点击移除。
在移除目标消息中,点击移除。
gcloud
从后端存储桶移除边缘安全政策时,请使用 cloud compute backend-buckets 命令和 --edge-security-policy 标志:
gcloud compute backend-services update my-bucket \
--edge-security-policy ""
导入和导出安全政策
以下部分介绍了如何导入和导出安全政策。
导出安全政策
您可以使用 Google Cloud CLI 将 Cloud Armor 安全政策导出为 YAML 或 JSON 文件。此功能具有以下优势:
保存副本以进行版本控制或备份:导出功能可提供政策的本地副本。将此副本保存在源代码控制系统中,以用作备份或跟踪更改。您可以在日后重新导入该副本,以恢复之前的版本。
在本地修改和更新政策:使用文本编辑器离线修改导出的政策。进行更改后,重新导入更新后的政策,以将修改应用于 Cloud Armor。
gcloud
在以下命令中,
NAME是安全政策的名称。有效文件格式为 YAML 和 JSON。如果您不指定文件格式,Cloud Armor 会使用 YAML。gcloud compute security-policies export NAME \ --file-name FILE_NAME \ --file-format FILE_FORMAT以下示例展示了将
my-policy安全政策以 YAML 格式导出到my-file文件的命令:gcloud compute security-policies export my-policy \ --file-name my-file \ --file-format yaml以下示例显示了导出的安全政策:
description: my description fingerprint: PWfLGDWQDLY= id: '123' name: my-policy rules: - action: allow description: default rule match: config: srcIpRanges: - '*' versionedExpr: SRC_IPS_V1 preview: false priority: 2147483647 selfLink: https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy使用文本编辑器修改导出的文件,然后使用
import命令将其导入回 Google Cloud 。
导入安全政策
您可以使用 Google Cloud CLI 从 YAML 或 JSON 文件导入 Cloud Armor 安全政策。您不能使用 import 命令更新现有政策的规则。相反,您必须使用更新安全政策中的单个规则过程逐个更新规则,或者使用以原子方式更新安全政策中的多个规则过程一次性更新所有规则。
gcloud
如需导入安全政策,请使用以下 gcloud compute
security-policies import NAME 命令。
gcloud compute security-policies import NAME \
--file-name FILE_NAME \
[--file-format FILE_FORMAT]
例如,以下命令通过导入文件 my-file 来更新政策 my-policy。
gcloud compute security-policies import my-policy \
--file-name my-file \
--file-format json
将 NAME 替换为安全政策的名称。如果您未提供文件格式,将根据文件结构采用正确的格式。如果结构无效,gcloud CLI 会返回错误消息。
如果导入时该政策的指纹已过期,则 Cloud Armor 会返回错误。这意味着该政策在上次导出后已被修改。如需解决此问题,请对该政策使用 describe 命令以获取最新的指纹。您可以将 --format=yaml 或 --format=json 与 describe 命令搭配使用,以便更轻松地进行比较。将 describe 输出的 rules 部分与政策文件中的 rules 部分进行比较,合并所有差异,然后将文件中的过时指纹替换为 describe 输出中的最新指纹。
列出可用的预配置规则
除了您自行配置的规则之外,Cloud Armor 还提供可在安全政策中使用的预配置规则。您可以列出预配置规则,以查看预定义的应用保护规则和签名,例如 Cloud Armor 提供的 OWASP 核心规则集。这些规则包含内置特征签名,Cloud Armor 会使用这些特征签名对传入请求进行评估。您可以使用自定义规则语言参考将这些预配置的规则添加到新规则或现有规则中。
如需了解详情,请参阅预配置的规则。
gcloud
运行
gcloud compute security-policies list-preconfigured-expression-sets命令:gcloud compute security-policies list-preconfigured-expression-sets
以下示例显示了命令输出的形式:
EXPRESSION_SET expression-set-1 RULE_ID SENSITIVITY expression-set-1-id-1 sensitivity-value-1 expression-set-1-id-2 sensitivity-value-2 expression-set-2 alias-1 RULE_ID SENSITIVITY expression-set-2-id-1 sensitivity-value-1 expression-set-2-id-2 sensitivity-value-2
以下示例包含命令的实际输出示例。 请注意,实际输出将包含调整 Cloud Armor WAF 规则中列出的所有规则。
gcloud compute security-policies list-preconfigured-expression-sets
EXPRESSION_SET sqli-canary RULE_ID SENSITIVITY owasp-crs-v042200-id942120-sqli 2 … xss-canary RULE_ID SENSITIVITY owasp-crs-v042200-id941110-xss 1 owasp-crs-v042200-id941120-xss 2 … sourceiplist-fastly sourceiplist-cloudflare sourceiplist-imperva