部署托管规则集
您可以使用 CLI、API 或 Terraform 在区域或实例级别部署受管规则集。
您可以通过覆盖来部署具有自定义行为(在默认配置之外执行的更改)的托管规则集。 更多信息,请参阅“覆盖托管规则集”。
部署工作流程
使用以下工作流程将受管规则集部署到区域级别的阶段:
- 获取区域标识。
- 运行 列表区域 规则集操作以获取可用规则集。
- 找到您要部署的管理规则集的规则集ID。
- 确定要在其中部署受管规则集的阶段。 确保托管规则集与您想要部署的规则集处于同一阶段。
- 在区域级相位入口点规则集中添加一条规则,运行受管理的规则集。
从CLI部署托管规则集
您可以通过CLI部署托管规则集。
从CLI列出已管理的规则集
要从 CLI 列出所有区域管理的规则集,请按照以下步骤操作:
-
使用 CLI 登录您的账户。 输入密码后,系统会提示输入要使用的账户和地区:
ibmcloud login --sso
-
运行以下命令创建自定义规则:
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 更新已部署的规则集,请按照以下步骤操作:
-
使用 CLI 登录您的账户。 输入密码后,系统会提示输入要使用的账户和地区:
ibmcloud login --sso
-
运行以下命令创建自定义规则:
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_challenge
,block
,js_challenge
,log
和challenge
。 - -- paranoia-level value 是 OWASP paranoia 级别。 有效值为
PL1
,PL2
,PL3
和PL4
。这仅适用于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
自定义规则阶段的入口点规则集。 该入口点规则集可能已经存在,如果不存在,则需要创建。
按照以下步骤获取自定义规则入口点规则集:
-
使用正确的变量设置 API 环境。
-
在变量中存储以下值,以便在 API 命令中使用:
CRN
:服务实例的完整 URL 编码云资源名称 (CRN)。ZONE_ID
:域名 ID。 -
启动所有变量后,获取入口点规则集:
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 列出托管规则集:
-
使用正确的变量设置 API 环境。
-
在变量中存储以下值,以便在 API 命令中使用:
CRN
:服务实例的完整 URL 编码云资源名称 (CRN)。ZONE_ID
:域名 ID。RULESET_ID
:自定义规则入口点规则集的 ID。 -
启动所有变量后,列出所有区域管理规则集:
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 更新入口点规则集:
-
使用正确的变量设置 API 环境。
-
在变量中存储以下值,以便在 API 命令中使用:
CRN
:服务实例的完整 URL 编码云资源名称 (CRN)。ZONE_ID
:域名 ID。RULESET_ID
:自定义规则入口点规则集的 ID。 -
启动所有变量后,更新入口点规则集:
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
操作中检索的。
- id 是运行规则集的ID。 此标识是从
- 表达是规则运行的条件。 使用
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
中的