IBM Cloud Docs
部署托管规则集

部署托管规则集

您可以使用 CLI、API 或 Terraform 在区域或实例级别部署受管规则集。

您可以通过覆盖来部署具有自定义行为(在默认配置之外执行的更改)的托管规则集。 更多信息,请参阅“覆盖托管规则集”。

部署工作流程

使用以下工作流程将受管规则集部署到区域级别的阶段:

  1. 获取区域标识。
  2. 运行 列表区域 规则集操作以获取可用规则集。
  3. 找到您要部署的管理规则集的规则集ID。
  4. 确定要在其中部署受管规则集的阶段。 确保托管规则集与您想要部署的规则集处于同一阶段。
  5. 在区域级相位入口点规则集中添加一条规则,运行受管理的规则集。

从CLI部署托管规则集

您可以通过CLI部署托管规则集。

从CLI列出已管理的规则集

要从 CLI 列出所有区域管理的规则集,请按照以下步骤操作:

  1. 设置 CLI 环境

  2. 使用 CLI 登录您的账户。 输入密码后,系统会提示输入要使用的账户和地区:

    ibmcloud login --sso
    
  3. 运行以下命令创建自定义规则:

    ibmcloud cis managed-waf rulesets DNS_DOMAIN_ID [-i, --instance INSTANCE] [--output FORMAT]
    

其中:

  • DNS_DOMAIN_ID 是域的 ID。
  • -i, --instance 值是实例名称或 ID。
  • -- output value 指定输出格式; 仅支持 JSON。

从CLI更新已部署的规则集

要从 CLI 更新已部署的规则集,请按照以下步骤操作:

  1. 设置 CLI 环境

  2. 使用 CLI 登录您的账户。 输入密码后,系统会提示输入要使用的账户和地区:

    ibmcloud login --sso
    
  3. 运行以下命令创建自定义规则:

ibmcloud cis managed-waf deployment-add-ruleset DNS_DOMAIN_ID RULESET_ID [--match EXPRESSION] [--enabled true|false] [--override-action ACTION] [--override-status STATUS] [--paranoia-level LEVEL] [--override-rules RULE] [-i, --instance INSTANCE] [--output FORMAT]

其中:

  • DNS_DOMAIN_ID 是域的 ID。
    • 启用值指示规则是否处于启用状态。 缺省值为 true
  • -- overide-action value 是任何覆盖的规则集操作。 有效值为 managed_challengeblockjs_challengelogchallenge
  • -- paranoia-level value 是 OWASP paranoia 级别。 有效值为 PL1PL2PL3PL4。这仅适用于 CIS OWASP Core Ruleset
  • -- override-rules value 是覆盖的规则选项。 例如,--override-rules rule=RULE_ID,action=ACTION,enabled=STATUS
  • -i, --instance 值是实例名称或 ID。
  • -- output value 指定输出格式; 仅支持 JSON。

命令示例

本例展示了如何部署规则集 efb7b8c949ac4650a09736fc376e9aee 以及覆盖规则集内的规则。 它还可以覆盖 wordpress 类别的规则。

ibmcloud cis managed-waf deployment-add-ruleset $domain efb7b8c949ac4650a09736fc376e9aee --match "(http.cookie eq \"example.com/contact?page=1234\")" --action execute --enabled false --override-action block --override-status false --override-rules rule=5de7edfa648c4d6891dc3e7f84534ffa,action=log,enabled=true --override-rules action=managed_challenge,rule=e3a567afc347477d9702d9047e97d760

使用API部署托管规则集

您可以使用 API 部署托管规则集。

获取 API 的自定义规则入口点

所有自定义规则 API 操作都需要 RULESET_ID 自定义规则阶段的入口点规则集。 该入口点规则集可能已经存在,如果不存在,则需要创建。

按照以下步骤获取自定义规则入口点规则集:

  1. 使用正确的变量设置 API 环境。

  2. 在变量中存储以下值,以便在 API 命令中使用:

    CRN:服务实例的完整 URL 编码云资源名称 (CRN)。

    ZONE_ID:域名 ID。

  3. 启动所有变量后,获取入口点规则集:

curl -X GET "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/phases/http_request_firewall_custom/entrypoint" \
--header "X-Auth-User-Token: Bearer <API_TOKEN>" \
--header "Content-Type: application/json"

规则集 ID 将出现在成功请求的响应中。 如果上述调用返回 404 Not Found 响应,请使用以下 API 为自定义规则阶段创建入口点规则集:

curl -x POST https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets \
--header "X-Auth-User-Token: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
  "name": "Zone-level phase entry point",
  "kind": "zone",
  "description": "Custom rule entry point ruleset.",
  "phase": "http_request_firewall_custom"
}'

使用 API 列出托管规则集

请按照以下步骤使用 API 列出托管规则集:

  1. 使用正确的变量设置 API 环境。

  2. 在变量中存储以下值,以便在 API 命令中使用:

    CRN:服务实例的完整 URL 编码云资源名称 (CRN)。

    ZONE_ID:域名 ID。

    RULESET_ID:自定义规则入口点规则集的 ID。

  3. 启动所有变量后,列出所有区域管理规则集:

curl -X GET \
  https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets \
  -H 'content-type: application/json' \
  -H 'accept: application/json' \
  -H 'x-auth-user-token: Bearer xxxxxx'

使用应用程序接口更新入口点规则集

请按照以下步骤使用 API 更新入口点规则集:

  1. 使用正确的变量设置 API 环境。

  2. 在变量中存储以下值,以便在 API 命令中使用:

    CRN:服务实例的完整 URL 编码云资源名称 (CRN)。

    ZONE_ID:域名 ID。

    RULESET_ID:自定义规则入口点规则集的 ID。

  3. 启动所有变量后,更新入口点规则集:

curl -X PUT \
  https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/phases/$RULESET_PHASE/entrypoint \
  -H 'content-type: application/json' \
  -H 'accept: application/json' \
  -H 'x-auth-user-token: Bearer xxxxxx' \
  -d '{"rules":[{"action":"execute","action_parameters":{"id":"4814384a9e5d4991b9815dcfc25d2f1f"},"expression":"true","description":"Execute WAF OWASP ruleset"}]}'

其中:

  • $RULESET_PHASE 是即将部署的规则集阶段。 使用 http_request_firewall_managed 部署托管 WAF 规则集。
    • d 是创建规则集所需的属性对象。
    • 规则是规则集要部署的规则数组。 例如:
      • action 是规则要执行的操作。 请参阅 规则操作 以获取可使用的操作的描述。
      • action_parameters 是用于定义操作应操作的对象。
        • id 是运行规则集的ID。 此标识是从 list zone rulesets 操作中检索的。
    • 表达是规则运行的条件。 使用 true 意味着此规则始终有效。
    • description 定义规则正在实现的内容的摘要。

使用 Terraform 部署托管规则集

使用 Terraform 列出受管规则集

下面的示例通过使用 Terraform 列出了托管规则集:

data "ibm_cis_rulesets" "tests" {
    cis_id    = ibm_cis.instance.id
    domain_id = data.ibm_cis_domain.cis_domain.domain_id
    }

有关参数和属性的更多信息,请参阅 ibm_cis_rulesets 中的

列出托管规则集的所有规则

下面的示例使用 Terraform 列出了托管规则集的所有规则:

resource "ibm_cis_ruleset" "config" {
    cis_id    = ibm_cis.instance.id
    domain_id = data.ibm_cis_domain.cis_domain.domain_id
    ruleset_id = "943c5da120114ea5831dc1edf8b6f769"
}

有关参数和属性的更多信息,请参阅 ibm_cis_ruleset 中的

优先规则

下面的示例使用 Terraform 重写了一条规则:

resource "ibm_cis_ruleset_entrypoint_version" "test" {
    cis_id    = ibm_cis.instance.id
    domain_id = data.ibm_cis_domain.cis_domain.domain_id
    phase = "http_request_firewall_managed"
    rulesets {
      description = "Entrypoint ruleset for managed ruleset"
      rules {
        action =  "execute"
        description = "Deploy CIS managed ruleset"
        enabled = true
        expression = "true"
        action_parameters  {
          id = "efb7b8c949ac4650a09736fc376e9aee"
          overrides {
            action = "block"
            enabled = true
            override_rules {
              rule_id = "var.overriden_rule.id"
              enabled = true
              action = "block"
            }
            categories {
              category = "wordpress"
              enabled = true
              action = "block"
            }
          }
        }
      }
    }
  }

有关参数和属性的更多信息,请参阅 ibm_cis_ruleset_entrypoint_version 中的