管理 Cloud Armor 安全政策

本页面介绍了如何管理 Google Cloud Armor 安全政策,以及如何过滤流向应用的传入流量。Cloud Armor 安全政策可帮助保护您的 Web 应用和服务免受分布式拒绝服务 (DDoS 攻击) 攻击和来自互联网的其他威胁。若要强制执行严格的安全状况,您需要通过创建、测试和整合来管理安全政策。如需创建或查看安全政策,请参阅创建和查看 Cloud Armor 安全政策

管理安全政策

以下部分介绍了如何列出、更新、删除或测试安全政策。

列出安全政策

按照本部分中的步骤列出项目中的 Cloud Armor 安全政策。

控制台

  1. 在 Cloud de Confiance 控制台中,前往 Cloud Armor 政策页面。

    前往“Cloud Armor 政策”页面

  2. 如需查看某项政策,请在政策列表中点击该政策的名称。

gcloud

gcloud compute security-policies list

例如:

gcloud compute security-policies list

输出:

NAME: my-policy
REGION: us-central1

如需了解详情,请参阅 gcloud compute security-policies list

更新安全政策

本部分中的步骤介绍了如何更新 Cloud Armor 安全政策。您可以修改政策的说明、修改默认规则、更改目标后端服务或添加规则。

控制台

  1. 在 Cloud de Confiance 控制台中,前往 Cloud Armor 政策页面。

    前往“Cloud Armor 政策”页面

  2. 在政策列表中找到要更新的政策的名称,然后点击相应政策的 菜单

    • 如需更新说明或默认规则操作,请选择修改,进行所需的更改,然后点击更新
    • 如要添加规则,请选择添加规则,然后按照向安全政策添加规则中的步骤操作。
    • 如要替换目标后端服务,请选择将政策应用于目标,点击添加目标,然后选择一个目标,再点击添加

gcloud

如要更新安全政策,请使用以下 Google Cloud CLI 步骤:

删除多项安全政策

本部分介绍了如何删除 Cloud Armor 安全政策。必须先从政策中移除所有后端服务,然后才能删除政策。

控制台

  1. 在 Cloud de Confiance 控制台中,前往 Cloud Armor 政策页面。

    前往“Cloud Armor 政策”页面

  2. 选中要删除的政策旁边的复选框。

  3. 点击页面右上角的删除

gcloud

使用 gcloud compute security-policies delete NAME。将 NAME 替换为安全政策的名称:

gcloud compute security-policies delete NAME

测试安全政策

我们建议您在预览模式下部署所有新规则,然后检查请求日志,以验证政策和规则的行为符合预期。

管理安全政策规则

以下部分介绍了如何列出、添加、更新或删除安全政策规则。

列出安全政策中的规则

按照本部分中的步骤列出 Cloud Armor 安全政策中的规则。

控制台

  1. 在 Cloud de Confiance 控制台中,前往 Cloud Armor 政策页面。

    前往“Cloud Armor 政策”页面

  2. 点击特定安全政策的名称。政策详情页面会在规则标签页中显示政策规则。

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 安全政策。

控制台

  1. 在 Cloud de Confiance 控制台中,前往 Cloud Armor 政策页面。

    前往“Cloud Armor 政策”页面

  2. 点击安全政策的名称,打开政策详情页面。

  3. 在页面中间,点击规则标签页。

  4. 点击添加规则

  5. 可选:输入规则的说明。

  6. 选择模式:

    • 基本模式:根据 IP 地址或 IP 范围允许或拒绝流量。
    • 高级模式:根据规则表达式允许或拒绝流量。
  7. 匹配字段中,指定规则适用的条件:

    • 基本模式:输入 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')
        

  8. 操作列表中,选择允许拒绝

  9. 如果您要配置拒绝规则,请选择拒绝状态消息。

  10. 如要为规则启用预览模式,请选择启用

  11. 优先级字段中,输入一个正整数。

  12. 点击添加

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 安全政策中的单条规则。如需以原子方式更新多条规则,请参阅以原子方式更新安全政策中的多条规则

控制台

  1. 在 Cloud de Confiance 控制台中,前往 Cloud Armor 政策页面。

    前往“Cloud Armor 政策”页面

  2. 点击安全政策的名称,打开政策详情页面。

  3. 在页面中间,点击规则标签页。

  4. 在要更新的规则旁边,点击修改。随即会显示修改规则页面。

  5. 进行更改,然后点击更新

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

使用匹配条件构建器

匹配条件构建器是 Cloud de Confiance 控制台中的一个直观界面,可帮助您创建复杂的 Cloud Armor 规则表达式,而无需编写通用表达式语言 (CEL) 代码。您无需编写代码,只需使用构建器的结构化界面来组合条件和分组逻辑,这样有助于您避免语法错误并更好地直观呈现规则结构。构建器支持扁平列表和嵌套逻辑,最多可包含 5 级表达式。 在配置规则以帮助保护多云后端或混合部署时,您可以使用此工具,因为在路由流量之前,您可能需要检查特定的请求属性。

匹配条件构建器的功能

匹配条件构建器包含以下功能:

  • 逻辑和嵌套:使用 ANDOR 运算符组合多个条件。构建器支持对最多 5 个表达式进行分组和嵌套。
  • 字符串转换:对于基于字符串的属性(例如 request.pathrequest.headers),在评估之前应用转换来规范化数据。支持的转换包括:
    • 小写和大写
    • Base64 解码
    • 网址解码和网址解码 (Unicode)
    • UTF-8 到 Unicode 转换
  • 双向解析:在可视化匹配条件构建器和原始文本匹配条件编辑器之间切换。界面会自动将原始 CEL 代码解析为可视化块。
  • 功能支持:构建器提供用于基于函数的表达式(例如预配置的 WAF 规则、地址组和威胁情报)的界面控件。

限制

匹配条件构建器是用于创建高级规则的默认界面。 如果表达式包含不受支持的逻辑(例如未知宏),构建器将被停用。在这种情况下,请使用匹配条件编辑器中的原始文本来修改规则。

此外,构建器中某些表达式的可用性取决于项目的 Google Cloud Armor Enterprise 层级和安全政策类型。

以原子方式更新安全政策中的多条规则

您可以使用原子更新功能,在一次更新中将更改应用于多条规则。单条规则更新可能会导致意外行为(例如错误),因为新旧规则可能会在短时间内重叠。

要以原子方式更新多个规则,请将当前安全政策导出到 JSON 或 YAML 文件中,然后对其进行修改。使用修改后的文件创建安全政策,然后切换后端服务的安全政策。

gcloud

  1. 导出政策以进行更新,如以下示例所示:

    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
    
  2. 使用文本编辑器修改政策。例如,您可以修改现有规则的优先级并添加规则:

        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
    
  3. 创建一个新的 Cloud Armor 安全政策并指定修改后的文件名和格式,如以下示例所示:

    gcloud compute security-policies create new-policy \
        --file-name modified-policy \
        --file-format yaml
    
  4. 从相关后端服务中移除旧安全政策,如以下示例所示:

    gcloud compute backend-services update my-backend \
        --security-policy ""
    
  5. 将新安全政策添加到后端服务,如以下示例所示:

    gcloud compute backend-services update my-backend \
        --security-policy new-policy
    
  6. 如果未使用旧政策,请将其删除:

    gcloud compute security-policies delete my-policy
    

从安全政策中删除规则

按照本部分中的步骤删除 Cloud Armor 安全政策中的规则。

控制台

  1. 在 Cloud de Confiance 控制台中,前往 Cloud Armor 政策页面。

    前往“Cloud Armor 政策”页面

  2. 点击安全政策的名称,打开政策详情页面。

  3. 在该页面中间的规则标签页上,选中要删除的规则旁边的复选框。

  4. 点击删除

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 安全政策附加到后端服务。您可以将安全政策附加到多个后端服务,但是一个后端服务只能附加每种类型中的一个安全政策。

控制台

  1. 在 Cloud de Confiance 控制台中,前往 Cloud Armor 政策页面。

    前往“Cloud Armor 政策”页面

  2. 点击安全政策的名称,打开政策详情页面。

  3. 在页面中间,点击目标标签页。

  4. 点击将政策应用于新目标

  5. 点击添加目标

  6. 目标列表中,选择一个目标,然后点击添加

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 安全政策。

控制台

  1. 在 Cloud de Confiance 控制台中,前往 Cloud Armor 政策页面。

    前往“Cloud Armor 政策”页面

  2. 点击安全政策的名称,打开政策详情页面。

  3. 在页面中间,点击目标标签页。

  4. 选择要从中移除政策的目标后端服务。

  5. 点击移除

  6. 移除目标消息中,点击移除

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 ""