一、操作步骤
1. 登录 配置审计 控制台,进入合规审计 > 规则页面。
2. 在规则页面,选择规则应用范围(可选择本账号、全局账号组或者自定义账号组)。
3. 确认规则应用范围后,单击新建自定义规则。
4. 在基本属性页面,输入规则名称、风险等级、规则描述以及规则函数,单击下一步。
package mainimport ( "context" "encoding/json" "fmt" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" config "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/config/v20220802" "github.com/tencentyun/scf-go-lib/cloudfunction")// maingofunc main() { cloudfunction.Start(ReceiveMessage)}type Tag struct { TagKey string TagValue string}type ClientContext struct { InvokingEvent *InvokingEvent RuleParameters map[string]string //规则参数 ResultToken string //加密令牌 OrderingTimestamp int64 //评估时间戳}type InvokingEvent struct { TriggerType string ConfigurationItem *ConfigurationItem}type ConfigurationItem struct { AccountId int64 //资源所属用户ID Region string //资源地域 Zone string //资源可用区 Configuration string //资源详细配置 ResourceCreationTime int64 //资源创建时间戳 ResourceType string //资源类型 ResourceId string //资源ID ResourceStatus string //资源ID ResourceName string //资源名称 Tags []Tag //资源标签 CaptureTime int64 //资源快照时间戳}// ReceiveMessage 接受消费消息{// "InvokingEvent": {// "TriggerType": "MANUAL",// "ConfigurationItem": {// "AccountId": 100004293724,// "Region": "ap-guangzhou",// "Zone": "",// "Configuration": { //每种资源类型Configuration内容字段不同// "CidrBlock": "172.16.0.0/16",// "IsDefault": true,// "Ipv6CidrBlock": "",// "DnsServerSet": null,// "DomainName": "",// "DhcpOptionsId": ""// },// "ResourceCreationTime": 1520431078,// "ResourceType": "QCS::VPC::Vpc",// "ResourceId": "vpc-q252nx9j",// "ResourceStatus": "",// "ResourceName": "Default-VPC",// "Tags": null,// "CaptureTime": 1686500243// }// },// "RuleParameters": {// "234": "324"// },// "ResultToken": "Wm9yZlY3WmlKa3cxaW1oQpgtklO2shRhG1gtxnC4qyszJtkSz5ZpZDshF6YyaaIAagGsEAcidC-VFNJHtRfXfam_FHMR_RhhelEAT4ApsKFQIBEZNaWN284dZS02f7uRT6w_zwHz5E1dXmNYvancDRgiCQHip_uUrif0Toypdbh1tuLODHgVN1csbaPKu3hb2-O-PBh824HACVUkDXJAp2KMQnqhNagmlUULjY-GMyM=",// "OrderingTimestamp": 1686537830//}func ReceiveMessage(ctx context.Context, event ClientContext) error { eventStr, _ := json.Marshal(event) fmt.Println("SCF:ReceiveMessage:Event:", string(eventStr)) putRuleResule(event) return nil}//自定义判断资源是否合规—对资源进行评估,需要根据实际业务自行实现评估逻辑,返回COMPLIANT、NON_COMPLIANT;以下代码仅供参考func getComplianceType(configurationStr string) string { return "COMPLIANT"}func putRuleResule(event ClientContext) { evaluations := make([]*config.Evaluation, 0) //1:设置评估结果,格式需符合以下示例要求。 complianceType := getComplianceType(event.InvokingEvent.ConfigurationItem.Configuration) configuration := "xxxx" desiredValue := "xxxxx" evaluation := &config.Evaluation{ ComplianceResourceId: &event.InvokingEvent.ConfigurationItem.ResourceId, ComplianceResourceType: &event.InvokingEvent.ConfigurationItem.ResourceType, ComplianceRegion: &event.InvokingEvent.ConfigurationItem.Region, ComplianceType: &complianceType, Annotation: &config.Annotation{ Configuration: &configuration, DesiredValue: &desiredValue, }, } evaluations = append(evaluations, evaluation) //2:上报评估结果 //需具备权限Config_QCSLinkedRoleInConfigRecorder服务角色 credential := common.NewCredential( "xxxx", "xxxxx", ) cpf := profile.NewClientProfile() cpf.HttpProfile.Endpoint = "config.internal.tencentcloudapi.com" client, _ := config.NewClient(credential, "ap-guangzhou", cpf) request := config.NewPutEvaluationsRequest() request.ResultToken = &event.ResultToken request.Evaluations = evaluations response, err := client.PutEvaluations(request) if _, ok := err.(*errors.TencentCloudSDKError); ok { fmt.Printf("An API error has returned: %s", err) return } if err != nil { panic(err) } // 输出json格式的字符串回包 fmt.Printf("%s", response.ToJsonString())}
注意:说明:
注意:详细的函数说明可以查看上述代码的注释部分。
5. 在关联资源页面的按资源类型模块,选择应用的资源类型,可以按需设置按标签或者按地域来确认应用范围,也可按资源 ID 排除范围,单击下一步。
6. 在触发机制页面,按需选择规则触发机制和触发频率,单击下一步。
7. 在参数设置页面,设置规则参数值,单击下一步。
8. 在修正设置页面,选择修正函数对应的地域和函数名称,单击下一步。若无修正函数,你可以单击前往创建新的函数进行相应操作。
9. 在预览并保存页面,你可以看到即将创建的自定义规则的信息,你也可以根据需要返回上一步操作,确认无误后,单击保存,即可创建成功。