安全政策示例

本页面介绍不同类型的负载均衡器和安全政策的示例安全政策配置。

为外部应用负载均衡器配置安全政策

以下是配置 Google Cloud Armor 安全政策的简要步骤,可启用允许或拒绝流向全球外部应用负载均衡器或传统版应用负载均衡器的流量:

  1. 创建 Google Cloud Armor 安全政策。
  2. 根据 IP 地址列表、自定义表达式或预配置表达式集向安全规则添加规则。
  3. 将安全政策附加到您要控制访问权限的全球外部应用负载均衡器或传统版应用负载均衡器的后端服务。
  4. 根据需要更新安全政策。

在以下示例中,您将创建两项 Google Cloud Armor 安全政策并将其应用于不同的后端服务。

将两个安全政策应用于不同后端服务的示例。
将两项安全政策应用于不同后端服务的示例(点击可放大)。

在示例中,以下项是 Google Cloud Armor 安全政策:

  • mobile-clients-policy 适用于您的 games 服务的外部用户。
  • internal-users-policy 适用于您组织的 test-network 团队。

您将 mobile-clients-policy 应用于 games 服务,其后端服务称为 games,并将 internal-users-policy 应用于测试团队的内部 test 服务,其相应的后端服务称为 test-network

如果后端服务的后端实例位于多个区域,则与该服务关联的 Google Cloud Armor 安全政策适用于所有区域中的实例。在上述示例中,安全政策 mobile-clients-policy 适用于 us-central 中的实例 1、2、3 和 4,以及 us-east 中的实例 5 和实例 6。

创建示例

按照说明创建上一部分讨论的示例配置。

控制台

为外部用户配置安全政策:

  1. 在 Google Cloud 控制台中,转到 Google Cloud Armor 政策页面。

    转到“Google Cloud Armor 政策”

  2. 点击创建政策

  3. 名称字段中,输入 mobile-clients-policy

  4. 说明字段中,输入 Policy for external users

  5. 对于默认规则操作,选择拒绝

  6. 对于拒绝状态,请选择 404(未找到)

  7. 点击下一步

添加更多规则:

  1. 点击添加规则
  2. 说明字段中,输入 allow traffic from 192.0.2.0/24
  3. 对于模式,请选择基本模式(仅限 IP 地址/范围)
  4. 匹配字段中,输入 192.0.2.0/24
  5. 对于操作,请选择允许
  6. Priority(优先级)字段中,输入 1000
  7. 点击完成
  8. 点击下一步

将政策应用于目标:

  1. 点击添加目标
  2. 目标列表中,选择一个目标。
  3. 点击完成
  4. 点击创建政策

酌情启用 Google Cloud Armor Adaptive Protection:

  1. 如需启用 Adaptive Protection,请勾选启用复选框。

为内部用户配置安全政策:

  1. 点击创建政策
  2. 名称字段中,输入 internal-users-policy
  3. 说明字段中,输入 Policy for internal test users
  4. 对于默认规则操作,选择拒绝
  5. 对于拒绝状态,请选择 502 (网关错误)
  6. 点击下一步

添加更多规则:

  1. 点击添加规则
  2. 说明字段中,输入 allow traffic from 198.51.100.0/24
  3. 对于模式,请选择基本模式(仅限 IP 地址/范围)
  4. 匹配字段中,输入 198.51.100.0/24
  5. 对于操作,请选择允许
  6. 对于仅可预览,请选择启用复选框。
  7. Priority(优先级)字段中,输入 1000
  8. 点击完成
  9. 点击下一步

将政策应用于目标:

  1. 点击添加目标
  2. 目标列表中,选择一个目标。
  3. 点击完成
  4. 点击创建政策

gcloud

  1. 创建 Google Cloud Armor 安全政策:

    gcloud compute security-policies create mobile-clients-policy \
        --description "policy for external users"
    
    gcloud compute security-policies create internal-users-policy \
        --description "policy for internal test users"
    
  2. 将默认规则更新为安全政策以拒绝流量:

    gcloud compute security-policies rules update 2147483647 \
        --security-policy mobile-clients-policy \
        --action "deny-404"
    
    gcloud compute security-policies rules update 2147483647 \
        --security-policy internal-users-policy \
        --action "deny-502"
    
  3. 向安全政策添加规则:

    gcloud compute security-policies rules create 1000 \
        --security-policy mobile-clients-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 create 1000 \
        --security-policy internal-users-policy \
        --description "allow traffic from 198.51.100.0/24" \
        --src-ip-ranges "198.51.100.0/24" \
        --action "allow"
    
  4. 将安全政策附加到后端服务:

    gcloud compute backend-services update games \
        --security-policy mobile-clients-policy
    
    gcloud compute backend-services update test-network \
        --security-policy internal-users-policy
    
  5. (可选)启用自动调节式保护:

    gcloud compute security-policies update mobile-clients-policy \
        --enable-layer7-ddos-defense
    
    gcloud compute security-policies update internal-users-policy \
        --enable-layer7-ddos-defense
    

创建安全政策

您可以使用 Google Cloud 控制台或 gcloud CLI 创建安全政策。本部分中的说明假设您要配置安全政策,以应用于现有全球外部应用负载均衡器或传统版应用负载均衡器和后端服务。如需查看如何完成字段的示例,请参阅创建示例

控制台

创建 Google Cloud Armor 安全政策和规则并将安全政策附加到后端服务:

  1. 在 Google Cloud 控制台中,转到 Google Cloud Armor 政策页面。

    转到“Google Cloud Armor 政策”

  2. 点击创建政策

  3. 名称字段中,输入政策的名称。

  4. 可选:输入政策说明。

  5. 对于政策类型,选择后端安全政策边缘安全政策

  6. 对于默认规则操作,为允许访问的默认规则,选择允许;为禁止访问 IP 地址或 IP 地址范围的默认规则,选择拒绝

    默认规则是最低优先级规则,仅在没有其他规则适用时才生效。

  7. 如果您要配置拒绝规则,请选择拒绝状态消息。如果没有访问权限的用户尝试获得访问权限,这是 Google Cloud Armor 显示的错误消息。

  8. 无论您要配置何种规则类型,都请点击下一步

添加更多规则:

  1. 点击添加规则
  2. 可选:输入规则的说明。
  3. 选择模式:

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

    • 基本模式:在规则中输入要匹配的 IP 地址或 IP 范围。
    • 高级模式:输入要根据传入请求进行评估的表达式或子表达式。如需了解如何编写表达式,请参阅配置自定义规则语言属性
  5. 对于操作,请选择允许拒绝,以便在规则匹配时允许或拒绝流量。

  6. 如要启用预览模式,请选中启用复选框。在预览模式下,您可以查看规则的行为,但是不启用规则。

  7. 输入该规则的优先级。这可以是 0 到 2,147,483,646(含)之间的任何正整数。如需详细了解评估顺序,请参阅规则评估顺序

  8. 点击完成

  9. 如要添加更多规则,请点击添加规则,然后重复上述步骤。否则,请点击下一步

将政策应用于目标:

  1. 点击添加目标
  2. 目标列表中,选择一个目标。
  3. 如需添加更多目标,请点击添加目标
  4. 点击完成
  5. 点击创建政策

gcloud

  1. 如要创建新的 Google Cloud Armor 安全政策,请使用 gcloud compute security-policies create 命令。

    type 字段中,使用 CLOUD_ARMOR 创建后端安全政策,或使用 CLOUD_ARMOR_EDGE 创建边缘安全政策。type 标志是可选的;如果未指定类型,则默认创建后端安全政策:

    gcloud compute security-policies create NAME \
       [--type=CLOUD_ARMOR|CLOUD_ARMOR_EDGE] \
       [--file-format=FILE_FORMAT | --description=DESCRIPTION] \
       [--file-name=FILE_NAME]
    
    

    请替换以下内容:

    • NAME:安全政策的名称
    • DESCRIPTION:安全政策的说明

    以下命令会更新您之前创建的政策,启用 JSON 解析,并将日志级别更改为 VERBOSE

    gcloud compute security-policies update my-policy \
        --json-parsing=STANDARD \
        --log-level=VERBOSE
    
  2. 如需向安全政策添加规则,请使用 gcloud compute security-policies rules create PRIORITY 命令。

    gcloud compute security-policies rules create PRIORITY  \
        [--security-policy POLICY_NAME] \
        [--description DESCRIPTION] \
        --src-ip-ranges IP_RANGE,... | --expression EXPRESSION \
        --action=[ allow | deny-403 | deny-404 | deny-502 ] \
        [--preview]
    

    PRIORITY 替换为政策中分配给规则的优先级。如要了解规则优先级的工作原理,请参阅规则评估顺序

    例如,以下命令会添加一个规则,以阻止来自 IP 地址范围 192.0.2.0/24198.51.100.0/24 的流量。该规则的优先级为 1000,它是名为 my-policy 的政策中的规则。

    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"
    

    添加 --preview 标志后,会将规则添加到政策,但不会执行,并且仅记录触发规则的所有流量。

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

    使用 --expression 标志指定自定义条件。如需了解详情,请参阅配置自定义规则语言属性。以下命令将添加一条规则,以允许来自 IP 地址 1.2.3.4 的流量,并且在用户代理标头中包含字符串 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('cookie_name=cookie_value')" \
        --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('/bad_path/')" \
        --action "deny-403" \
        --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 "evaluatePreconfiguredExpr('sqli-stable')" \
        --action "deny-403"
    

    以下命令将添加一条规则,该规则使用预配置的表达式以允许从已命名的 IP 地址列表中的所有 IP 地址访问:

    gcloud compute security-policies rules create 1000 \
        --security-policy my-policy \
        --expression "evaluatePreconfiguredExpr('sourceiplist-fastly')" \
        --action "allow"
    

为区域级外部应用负载均衡器配置安全政策

本部分介绍如何为区域级外部应用负载均衡器配置区域范围的 Google Cloud Armor 安全政策。

保护区域负载均衡的工作负载

请按照以下步骤配置安全政策以保护区域范围的后端服务:

  1. 创建区域范围的安全政策。

    gcloud compute security-policies create POLICY_NAME \
       --type=CLOUD_ARMOR \
       --region=REGION
    
  2. 将区域范围的安全政策附加到区域范围的后端服务。将 BACKEND_NAME 替换为现有区域范围后端服务的名称。

    gcloud compute backend-services update BACKEND_NAME \
       --security-policy=POLICY_NAME \
       --region=REGION
    

应用区域范围的 Google Cloud Armor 安全政策

举个例子,假设您是安全管理员,想要满足所有后端工作负载和 WAF 规则都部署在一个特定区域中的驻留要求。假设您已提前完成以下操作:

  1. 在区域中创建区域范围的负载均衡后端服务。
  2. 在部署中停用任何现有的全球范围安全政策。
  3. 在同一区域中创建并附加区域范围的安全政策(如上一部分中所述)。

您可以使用以下示例命令将 WAF 规则和其他高级规则添加到政策中,同时满足该要求:

  • 向政策添加 WAF 规则:

    gcloud compute security-policies rules create 1000 --action=deny-404 \
      --expression="evaluatePreconfiguredExpr('xss-v33-stable', ['owasp-crs-v030301-id941100-xss', 'owasp-crs-v030301-id941160-xss'])" \
      --security-policy=POLICY_NAME \
      --region=REGION
    
  • 向政策添加高级规则:

    gcloud compute security-policies rules create 1000 --action=allow \
      --expression="has(request.headers['cookie']) && request.headers['cookie'].contains('80=EXAMPLE')" \
      --security-policy=POLICY_NAME \
      --region=REGION
    
  • 向政策添加速率限制规则:

    gcloud compute security-policies rules create 1000 --action=throttle \
      --src-ip-ranges="1.1.1.1/32" \
      --rate-limit-threshold-count=1000 \
      --rate-limit-threshold-interval-sec=120 \
      --conform-action="allow" \
      --exceed-action="deny-429" \
      --enforce-on-key=IP \
      --ban-duration-sec=999 \
      --ban-threshold-count=5000 \
      --ban-threshold-interval-sec=60 \
      --security-policy=POLICY_NAME \
      --region=REGION
    

后续步骤