文档首页/ Web应用防火墙 WAF/ API参考/ API/ 策略规则管理/ 批量修改CC防护规则 - BatchUpdateCcRules
更新时间:2025-12-11 GMT+08:00
分享

批量修改CC防护规则 - BatchUpdateCcRules

功能介绍

批量修改地理位置访问控制规则

调用方法

请参见如何调用API

授权信息

账号具备所有API的调用权限,如果使用账号下的IAM用户调用当前API,该IAM用户需具备调用API所需的权限。

  • 如果使用角色与策略授权,具体权限要求请参见权限和授权项
  • 如果使用身份策略授权,当前API调用无需身份策略权限。

URI

POST /v1/{project_id}/waf/rule/cc/batch-update

表1 路径参数

参数

是否必选

参数类型

描述

project_id

String

参数解释:

项目ID,对应控制台用户名->我的凭证->项目列表->项目ID。

约束限制:

不涉及

取值范围:

只能由英文字母、数字组成,且长度为32个字符。

默认取值:

不涉及

请求参数

表2 请求Header参数

参数

是否必选

参数类型

描述

X-Auth-Token

String

参数解释:

用户Token,通过调用IAM服务获取用户Token接口获取(响应消息头中X-Subject-Token的值)。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

Content-Type

String

参数解释:

内容类型

约束限制:

不涉及

取值范围:

不涉及

默认取值:

application/json;charset=utf8

表3 请求Body参数

参数

是否必选

参数类型

描述

name

String

规则名称

mode

Integer

cc规则防护模式,对应console上的mode,现在只支持创建高级cc规则防护模式。

  • 0:标准,只支持对域名的防护路径做限制。

  • 1:高级,支持对路径、IP、Cookie、Header、Params字段做限制。

url

String

需要防护的域名路径,当cc防护规则为标准模式(mode参数值为0)时,该参数必填。

conditions

Array of CcCondition objects

cc规则防护规则限速条件,当cc防护规则为高级模式(mode参数值为1)时,该参数必填。

action

CreateCcRuleRequestBodyAction object

请求次数限制到达后采取的防护动作

tag_type

String

参数解释:

限速模式标识,用于指定区分单个Web访问者的判断依据

约束限制:

不涉及

取值范围:

  • ip:IP限速,根据IP区分单个Web访问者

  • cookie:用户限速,根据Cookie键值区分单个Web访问者

  • header:用户限速,根据Header区分单个Web访问者

  • other:根据Referer(自定义请求访问的来源)字段区分单个Web访问者

  • policy:策略限速

  • domain:域名限速

  • url:url限速

默认取值:

不涉及

tag_index

String

用户标识,当限速模式为用户限速(cookie或header)时,需要传该参数。

  • 选择cookie时,设置cookie字段名,即用户需要根据网站实际情况配置唯一可识别Web访问者的cookie中的某属性变量名。用户标识的cookie,不支持正则,必须完全匹配。例如:如果网站使用cookie中的某个字段name唯一标识用户,那么可以选取name字段来区分Web访问者。

  • 选择header时,设置需要防护的自定义HTTP首部,即用户需要根据网站实际情况配置可识别Web访问者的HTTP首部。

tag_condition

tag_condition object

用户标识,当限速模式为other时,需要传该参数。根据Referer(自定义请求访问的来源)字段区分单个Web访问者

limit_num

Integer

限制频率,单位为次,范围为1~2147483647

limit_period

Integer

限速周期,单位为秒,范围1~3600

unlock_num

Integer

放行频率,单位为次,范围为0~2147483647。只有当防护动作类型为dynamic_block时,才需要传该参数。

lock_time

Integer

阻断时间,单位为秒,范围为0~65535。当“防护动作”选择“阻断”时,可设置阻断后恢复正常访问页面的时间。

domain_aggregation

Boolean

是否开启域名聚合统计。

region_aggregation

Boolean

是否开启全局计数。

description

String

规则描述

policy_rule_ids

Array of policy_rule_ids objects

参数解释:

策略和规则id数组,关联防护策略与对应的规则集合

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

表4 CcCondition

参数

是否必选

参数类型

描述

category

String

参数解释:

字段类型

约束限制:

不涉及

取值范围:

  • url

  • ip

  • ipv6

  • asn

  • params

  • cookie

  • referer

  • user-agent

  • header

  • response_code

  • response_header

  • response_body

  • request_body

  • method

  • tls_fingerprint

  • tls_ja3_fingerprint

默认取值:

不涉及

logic_operation

String

条件列表匹配逻辑。

  • 如果字段类型category是url, 匹配逻辑可以为:contain、 not_contain、 equal、 not_equal、 prefix、 not_prefix、 suffix、 not_suffix、 contain_any、 not_contain_all、 equal_any、 not_equal_all、 equal_any、 not_equal_all、 prefix_any、 not_prefix_all、 suffix_any、 not_suffix_all、 len_greater、 len_less、len_equal或者len_not_equal

  • 如果字段类型category是ip或者ipv6,匹配逻辑可以为: equal、not_equal、equal_any或者not_equal_all

  • 如果字段类型category是params、cookie或者header, 匹配逻辑可以为:contain、 not_contain、 equal、 not_equal、 prefix、 not_prefix、 suffix、 not_suffix、 contain_any、 not_contain_all、 equal_any、not_equal_all、 equal_any、 not_equal_all、 prefix_any、 not_prefix_all、 suffix_any、 not_suffix_all、 len_greater、 len_less、len_equal、len_not_equal、、num_greater、num_less、num_equal、num_not_equal、exist或者not_exist

contents

Array of strings

条件列表逻辑匹配内容。当logic_operation参数不以any或者all结尾时,需要传该参数。

value_list_id

String

引用表id。当logic_operation参数以any或者all结尾时,需要传该参数。此外,引用表类型要与category类型保持一致。

index

String

子字段,当字段类型(category)选择“params”、“cookie”、“header”时,请根据实际需求配置子字段且该参数必填。

表5 CreateCcRuleRequestBodyAction

参数

是否必选

参数类型

描述

category

String

动作类型:

  • captcha:人机验证,阻断后用户需要输入正确的验证码,恢复正确的访问页面。

  • log: 仅记录

  • dynamic_block: 上一个限速周期内,请求频率超过“限速频率”将被阻断,那么在下一个限速周期内,请求频率超过“放行频率”将被阻断。注:只有当cc防护规则模式为高级模式时才支持设置dynamic_block防护动作。

-block:阻断。

detail

detail object

阻断页面信息。当防护动作(category)选择阻断(block)或者动态阻断(dynamic_block)时,需要设置返回的阻断页面。

  • 如果需要返回的阻断页面为系统默认的阻断页面,不需要传该参数。

  • 如果用户想防护自定义的阻断页面,可以通过此参数设置

表6 detail

参数

是否必选

参数类型

描述

response

response object

返回页面

表7 response

参数

是否必选

参数类型

描述

content_type

String

参数解释:

内容类型

约束限制:

不涉及

取值范围:

  • text/html

  • text/xml

  • application/json

默认取值:

不涉及

content

String

防护页面内容

表8 tag_condition

参数

是否必选

参数类型

描述

category

String

用户标识字段,其值固定为referer

contents

Array of strings

用户标识字段内容

表9 policy_rule_ids

参数

是否必选

参数类型

描述

policy_id

String

参数解释:

策略id,唯一标识一条防护策略.策略id从"查询防护策略列表"(ListPolicy)接口获取

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

rule_ids

Array of strings

参数解释:

规则id数组,包含当前防护策略下的多条规则ID.精准防护规则id,通过对应规则类型的查询防护规则列表接口获取

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

响应参数

状态码:200

表10 响应Body参数

参数

参数类型

描述

policy_rule_ids

Array of policy_rule_ids objects

参数解释:

策略和规则id数组,返回防护策略与对应规则的ID关联关系

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

表11 policy_rule_ids

参数

参数类型

描述

policy_id

String

参数解释:

策略id,唯一标识一条防护策略

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

rule_ids

Array of strings

参数解释:

规则id数组,返回当前防护策略下的多条规则ID

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

状态码:400

表12 响应Body参数

参数

参数类型

描述

error_code

String

错误码

error_msg

String

错误信息

encoded_authorization_message

String

编码 (加密) 后的详细拒绝原因,用户可以自行调用 STS 服务的decode-authorization-message接口进行解码,可参考STS5联调自验证。IAM5鉴权错误时才会返回此字段。

details

Array of IAM5ErrorDetails objects

调用下游服务的报错信息集合,IAM5鉴权错误时才会返回此字段。

表13 IAM5ErrorDetails

参数

参数类型

描述

error_code

String

下游服务错误码

error_msg

String

下游服务报错信息

状态码:401

表14 响应Body参数

参数

参数类型

描述

error_code

String

错误码

error_msg

String

错误信息

encoded_authorization_message

String

编码 (加密) 后的详细拒绝原因,用户可以自行调用 STS 服务的decode-authorization-message接口进行解码,可参考STS5联调自验证。IAM5鉴权错误时才会返回此字段。

details

Array of IAM5ErrorDetails objects

调用下游服务的报错信息集合,IAM5鉴权错误时才会返回此字段。

表15 IAM5ErrorDetails

参数

参数类型

描述

error_code

String

下游服务错误码

error_msg

String

下游服务报错信息

状态码:500

表16 响应Body参数

参数

参数类型

描述

error_code

String

错误码

error_msg

String

错误信息

encoded_authorization_message

String

编码 (加密) 后的详细拒绝原因,用户可以自行调用 STS 服务的decode-authorization-message接口进行解码,可参考STS5联调自验证。IAM5鉴权错误时才会返回此字段。

details

Array of IAM5ErrorDetails objects

调用下游服务的报错信息集合,IAM5鉴权错误时才会返回此字段。

表17 IAM5ErrorDetails

参数

参数类型

描述

error_code

String

下游服务错误码

error_msg

String

下游服务报错信息

请求示例

批量修改CC防护规则

POST https://{endpoint}/v1/{project_id}/waf/rule/cc/batch-update?enterprise_project_id=0

{
  "description" : "",
  "tag_type" : "cookie",
  "limit_num" : 10,
  "limit_period" : 60,
  "action" : {
    "category" : "dynamic_block",
    "detail" : {
      "response" : {
        "content_type" : "application/json",
        "content" : "481"
      }
    }
  },
  "mode" : 1,
  "name" : "test",
  "conditions" : [ {
    "category" : "url",
    "logic_operation" : "contain",
    "contents" : [ "/test" ],
    "index" : null
  } ],
  "unlock_num" : 1,
  "tag_index" : "test",
  "policy_rule_ids" : [ {
    "rule_ids" : [ "ed37d85a925d469bb01986d06291d15f" ],
    "policy_id" : "4a34899ab17a4811a6da57742f69135a"
  } ]
}

响应示例

状态码:200

参数解释:

OK

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

{
  "policy_rule_ids" : [ {
    "rule_ids" : [ "ed37d85a925d469bb01986d06291d15f" ],
    "policy_id" : "4a34899ab17a4811a6da57742f69135a"
  } ]
}

SDK代码示例

SDK代码示例如下。

批量修改CC防护规则

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package com.huaweicloud.sdk.test;

import com.huaweicloud.sdk.core.auth.ICredential;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.exception.ServiceResponseException;
import com.huaweicloud.sdk.waf.v1.region.WafRegion;
import com.huaweicloud.sdk.waf.v1.*;
import com.huaweicloud.sdk.waf.v1.model.*;

import java.util.List;
import java.util.ArrayList;

public class BatchUpdateCcRulesSolution {

    public static void main(String[] args) {
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        String ak = System.getenv("CLOUD_SDK_AK");
        String sk = System.getenv("CLOUD_SDK_SK");
        String projectId = "{project_id}";

        ICredential auth = new BasicCredentials()
                .withProjectId(projectId)
                .withAk(ak)
                .withSk(sk);

        WafClient client = WafClient.newBuilder()
                .withCredential(auth)
                .withRegion(WafRegion.valueOf("<YOUR REGION>"))
                .build();
        BatchUpdateCcRulesRequest request = new BatchUpdateCcRulesRequest();
        BatchUpdateCcRulesRequestBody body = new BatchUpdateCcRulesRequestBody();
        List<String> listPolicyRuleIdsRuleIds = new ArrayList<>();
        listPolicyRuleIdsRuleIds.add("ed37d85a925d469bb01986d06291d15f");
        List<BatchUpdateCcRulesRequestBodyPolicyRuleIds> listbodyPolicyRuleIds = new ArrayList<>();
        listbodyPolicyRuleIds.add(
            new BatchUpdateCcRulesRequestBodyPolicyRuleIds()
                .withPolicyId("4a34899ab17a4811a6da57742f69135a")
                .withRuleIds(listPolicyRuleIdsRuleIds)
        );
        CreateCcRuleRequestBodyActionDetailResponse responseDetail = new CreateCcRuleRequestBodyActionDetailResponse();
        responseDetail.withContentType(CreateCcRuleRequestBodyActionDetailResponse.ContentTypeEnum.fromValue("application/json"))
            .withContent("481");
        CreateCcRuleRequestBodyActionDetail detailAction = new CreateCcRuleRequestBodyActionDetail();
        detailAction.withResponse(responseDetail);
        CreateCcRuleRequestBodyAction actionbody = new CreateCcRuleRequestBodyAction();
        actionbody.withCategory(CreateCcRuleRequestBodyAction.CategoryEnum.fromValue("dynamic_block"))
            .withDetail(detailAction);
        List<String> listConditionsContents = new ArrayList<>();
        listConditionsContents.add("/test");
        List<CcCondition> listbodyConditions = new ArrayList<>();
        listbodyConditions.add(
            new CcCondition()
                .withCategory(CcCondition.CategoryEnum.fromValue("url"))
                .withLogicOperation("contain")
                .withContents(listConditionsContents)
        );
        body.withPolicyRuleIds(listbodyPolicyRuleIds);
        body.withDescription("");
        body.withUnlockNum(1);
        body.withLimitPeriod(60);
        body.withLimitNum(10);
        body.withTagIndex("test");
        body.withTagType(BatchUpdateCcRulesRequestBody.TagTypeEnum.fromValue("cookie"));
        body.withAction(actionbody);
        body.withConditions(listbodyConditions);
        body.withMode(1);
        body.withName("test");
        request.withBody(body);
        try {
            BatchUpdateCcRulesResponse response = client.batchUpdateCcRules(request);
            System.out.println(response.toString());
        } catch (ConnectionException e) {
            e.printStackTrace();
        } catch (RequestTimeoutException e) {
            e.printStackTrace();
        } catch (ServiceResponseException e) {
            e.printStackTrace();
            System.out.println(e.getHttpStatusCode());
            System.out.println(e.getRequestId());
            System.out.println(e.getErrorCode());
            System.out.println(e.getErrorMsg());
        }
    }
}

批量修改CC防护规则

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# coding: utf-8

import os
from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkwaf.v1.region.waf_region import WafRegion
from huaweicloudsdkcore.exceptions import exceptions
from huaweicloudsdkwaf.v1 import *

if __name__ == "__main__":
    # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak = os.environ["CLOUD_SDK_AK"]
    sk = os.environ["CLOUD_SDK_SK"]
    projectId = "{project_id}"

    credentials = BasicCredentials(ak, sk, projectId)

    client = WafClient.new_builder() \
        .with_credentials(credentials) \
        .with_region(WafRegion.value_of("<YOUR REGION>")) \
        .build()

    try:
        request = BatchUpdateCcRulesRequest()
        listRuleIdsPolicyRuleIds = [
            "ed37d85a925d469bb01986d06291d15f"
        ]
        listPolicyRuleIdsbody = [
            BatchUpdateCcRulesRequestBodyPolicyRuleIds(
                policy_id="4a34899ab17a4811a6da57742f69135a",
                rule_ids=listRuleIdsPolicyRuleIds
            )
        ]
        responseDetail = CreateCcRuleRequestBodyActionDetailResponse(
            content_type="application/json",
            content="481"
        )
        detailAction = CreateCcRuleRequestBodyActionDetail(
            response=responseDetail
        )
        actionbody = CreateCcRuleRequestBodyAction(
            category="dynamic_block",
            detail=detailAction
        )
        listContentsConditions = [
            "/test"
        ]
        listConditionsbody = [
            CcCondition(
                category="url",
                logic_operation="contain",
                contents=listContentsConditions
            )
        ]
        request.body = BatchUpdateCcRulesRequestBody(
            policy_rule_ids=listPolicyRuleIdsbody,
            description="",
            unlock_num=1,
            limit_period=60,
            limit_num=10,
            tag_index="test",
            tag_type="cookie",
            action=actionbody,
            conditions=listConditionsbody,
            mode=1,
            name="test"
        )
        response = client.batch_update_cc_rules(request)
        print(response)
    except exceptions.ClientRequestException as e:
        print(e.status_code)
        print(e.request_id)
        print(e.error_code)
        print(e.error_msg)

批量修改CC防护规则

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package main

import (
	"fmt"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
    waf "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/waf/v1"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/waf/v1/model"
    region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/waf/v1/region"
)

func main() {
    // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak := os.Getenv("CLOUD_SDK_AK")
    sk := os.Getenv("CLOUD_SDK_SK")
    projectId := "{project_id}"

    auth := basic.NewCredentialsBuilder().
        WithAk(ak).
        WithSk(sk).
        WithProjectId(projectId).
        Build()

    client := waf.NewWafClient(
        waf.WafClientBuilder().
            WithRegion(region.ValueOf("<YOUR REGION>")).
            WithCredential(auth).
            Build())

    request := &model.BatchUpdateCcRulesRequest{}
	var listRuleIdsPolicyRuleIds = []string{
        "ed37d85a925d469bb01986d06291d15f",
    }
	policyIdPolicyRuleIds:= "4a34899ab17a4811a6da57742f69135a"
	var listPolicyRuleIdsbody = []model.BatchUpdateCcRulesRequestBodyPolicyRuleIds{
        {
            PolicyId: &policyIdPolicyRuleIds,
            RuleIds: &listRuleIdsPolicyRuleIds,
        },
    }
	contentTypeResponse:= model.GetCreateCcRuleRequestBodyActionDetailResponseContentTypeEnum().APPLICATION_JSON
	contentResponse:= "481"
	responseDetail := &model.CreateCcRuleRequestBodyActionDetailResponse{
		ContentType: &contentTypeResponse,
		Content: &contentResponse,
	}
	detailAction := &model.CreateCcRuleRequestBodyActionDetail{
		Response: responseDetail,
	}
	actionbody := &model.CreateCcRuleRequestBodyAction{
		Category: model.GetCreateCcRuleRequestBodyActionCategoryEnum().DYNAMIC_BLOCK,
		Detail: detailAction,
	}
	var listContentsConditions = []string{
        "/test",
    }
	var listConditionsbody = []model.CcCondition{
        {
            Category: model.GetCcConditionCategoryEnum().URL,
            LogicOperation: "contain",
            Contents: &listContentsConditions,
        },
    }
	descriptionBatchUpdateCcRulesRequestBody:= ""
	unlockNumBatchUpdateCcRulesRequestBody:= int32(1)
	tagIndexBatchUpdateCcRulesRequestBody:= "test"
	nameBatchUpdateCcRulesRequestBody:= "test"
	request.Body = &model.BatchUpdateCcRulesRequestBody{
		PolicyRuleIds: &listPolicyRuleIdsbody,
		Description: &descriptionBatchUpdateCcRulesRequestBody,
		UnlockNum: &unlockNumBatchUpdateCcRulesRequestBody,
		LimitPeriod: int32(60),
		LimitNum: int32(10),
		TagIndex: &tagIndexBatchUpdateCcRulesRequestBody,
		TagType: model.GetBatchUpdateCcRulesRequestBodyTagTypeEnum().COOKIE,
		Action: actionbody,
		Conditions: listConditionsbody,
		Mode: int32(1),
		Name: &nameBatchUpdateCcRulesRequestBody,
	}
	response, err := client.BatchUpdateCcRules(request)
	if err == nil {
        fmt.Printf("%+v\n", response)
    } else {
        fmt.Println(err)
    }
}

更多编程语言的SDK代码示例,请参见API Explorer的代码示例页签,可生成自动对应的SDK代码示例。

状态码

状态码

描述

200

参数解释:

OK

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

400

参数解释:

请求失败

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

401

参数解释:

token权限不足

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

500

参数解释:

服务器内部错误

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

错误码

请参见错误码

相关文档