资源合规概述
概述
资源合规特性帮助您快速创建一组合规规则,用于评估您的资源是否满足合规要求。您可以选择Config提供的系统内置预设策略或自定义策略,并指定需要评估的资源范围来创建一个合规规则;合规规则创建后,有多种机制触发规则评估,然后查看合规规则的评估结果来了解资源的合规情况。
在使用资源合规时,如果您是组织管理员或Config服务的委托管理员,您还可以添加组织类型的资源合规规则,直接作用于您组织内账号状态为“正常”的所有成员账号中。
针对合规规则评估出的不合规资源,合规修正功能可以帮助您设置基于合规规则的修正配置,通过关联RFS服务的私有模板或FunctionGraph服务的函数实例,按照您自定义的修正逻辑对不合规资源进行快速修正,确保您的云上资源持续合规。
约束与限制
- 每个账号最多可以添加500个合规规则(包括由组织合规规则和合规规则包创建的托管规则)。
- 添加、修改、启用合规规则和触发规则评估需要开启资源记录器,资源记录器处于关闭状态时,合规规则仅支持查看、停用和删除操作。
托管合规规则不支持进行修改、停用、启用、删除操作,托管合规规则是由组织合规规则或合规规则包创建的,由组织合规规则创建的托管规则只能由创建规则的组织账号进行修改和删除操作,由合规规则包创建的托管规则可以通过更新合规规则包进行参数修改,且只能通过删除相应合规规则包来进行删除。具体请参见组织合规规则和合规规则包。
- 添加、修改组织合规规则和触发规则评估需要开启资源记录器,资源记录器处于关闭状态时,组织合规规则仅支持查看和删除操作。
- 当前仅用户自行创建的预定义或自定义合规规则支持修正配置,通过组织合规规则或合规规则包创建的托管合规规则不支持修正配置。
- 基于RFS服务私有模板执行修正的场景下,对应区域的资源栈应至少预留5个配额,否则执行修正可能会因配额不足导致失败。
- 一个合规规则上只能创建一个修正配置。
- 当合规规则存在修正配置,则必须删除修正配置并且停用规则后,才可删除此合规规则。
- 单个合规规则的修正配置最多支持用户手动添加100个修正例外资源,基于设置的修正重试规则被自动添加至修正例外的资源没有配额限制。
仅被资源记录器收集的资源可参与资源评估,为保证资源合规规则的评估结果符合预期,强烈建议您保持资源记录器的开启状态,不同场景的说明如下:
- 如您未开启资源记录器,则资源合规规则无法评估任何资源数据。历史的合规规则评估结果依然存在。
- 如您已开启资源记录器,但仅在资源记录器监控范围内勾选部分资源,则资源合规规则仅会评估所选择的资源数据。
关于如何开启并配置资源记录器请参见:配置资源记录器。
合规策略
合规策略是一个可以用于评估资源是否合规的逻辑表达式。将合规策略应用到资源上时,可以评估出这个资源是否满足合规策略中的要求。
合规策略本身只是一个静态的逻辑,如果想要让其生效,必须将合规策略指定到一个具体的范围(例如通过设置过滤器来指定具体的资源范围)上,即生成一个具体的合规规则。
使用JSON表达式来表示一个合规策略定义,如表1所示。
|
参数 |
定义 |
说明 |
|---|---|---|
|
id |
合规策略的唯一标识符 |
- |
|
name |
合规策略的名称 |
name最大长度为64个字符。 |
|
display_name |
合规策略的展示名 |
display_name最大长度为64个字符。 |
|
description |
合规策略的描述 |
description最大长度为512个字符。 |
|
parameters |
合规策略的规则参数,即每个合规策略下包含的参数。 具有如下属性:
|
合规策略中包含的参数名称保持不变,您可以根据需要设置不同的值。
|
|
keywords |
合规策略关键词 |
一般为与合规策略相关的产品简称。 |
|
policy_type |
合规策略的类型。 主要有以下类型:
|
|
|
policy_rule_type |
合规策略的语法类型 |
DSL:一种Config服务提供的合规策略描述语言,用户可以根据此语法,将合规判断逻辑描述为一个具体的合规策略。 |
|
trigger_type |
触发类型。 有以下类型:
|
|
|
default_resource_types |
合规策略评估的资源类型 |
大部分合规策略只评估部分的资源类型。创建合规规则时,建议只评估“default_resource_types”中的资源类型。 |
如下JSON表示了一个用于检查ECS实例的镜像ID是否在指定范围内的合规策略:
{
"id": "5fa265c0aa1e6afc05a0ff07",
"name": "allowed-images-by-id",
"description": "指定允许的镜像ID列表,ECS实例的镜像ID不在指定的范围内,视为“不合规”",
"parameters": {
"listOfAllowedImages": {
"name": "null",
"description": "The list of allowed image IDs",
"type": "Array"
"allowed_values": null,
"default_value": null,
}
},
"keywords": [
"ecs",
"ims"
],
"policy_type": "builtin",
"policy_rule_type": "dsl",
"trigger_type": "resource",
"policy_rule": {
"allOf": [
{
"value": "${resource().provider}",
"comparator": "equals",
"pattern": "ecs"
},
{
"value": "${resource().type}",
"comparator": "equals",
"pattern": "cloudservers"
},
{
"value": "${resource().properties.metadata.meteringImageId}",
"comparator": "notIn",
"pattern": "${parameters('listOfAllowedImages')}"
}
]
},
}
更多样例详见自定义合规规则示例。
合规规则
通过指定合规策略和合规策略所应用的范围(如:在某一区域的某些资源)来构成合规规则。
使用JSON表达式来表示一个合规规则定义,如表2所示。
|
参数 |
定义 |
限制 |
说明 |
|---|---|---|---|
|
id |
合规规则唯一标识符 |
- |
- |
|
policy_assignment_type |
合规规则类型 |
- |
包含以下两种:
如不设置此参数,则默认为预设策略。 |
|
name |
合规规则的名称 |
字符串类型,最多64个字符。 |
规则名称默认复用所选择合规策略的名称,也可自行修改。 name最大长度为64个字符。 |
|
description |
合规规则的描述 |
字符串类型,最多512个字符。 |
指的是规则简介,默认复用所选择合规策略的简介,需自行修改。 description最大长度为512个字符。 |
|
period |
周期频率 |
- |
包含以下几种:
|
|
policy_filter |
合规规则过滤器,用于过滤范围内的哪些资源参与此规则的评估。 过滤器的属性主要有以下几个:
|
policy_filter:Object类型。
|
说明:
资源类型(resource_provider)是判断过滤器类型(指定资源/所有资源)的依据,如果policy_filter中资源类型存在,则过滤器类型为“指定资源”;如果policy_filter中资源类型不存在,则过滤器类型为“所有资源”。 因此policy_filter中没有设置单独的过滤器类型属性。 |
|
state |
合规规则的运行状态 |
- |
包含以下几种:
|
|
created |
合规规则的创建时间 |
- |
说明:
时间具有固定格式:遵循ISO8601格式,UTC时区(例如:2018-11-14T08:59:14Z)。 |
|
updated |
合规规则的更新时间 |
- |
|
|
policy_definition_id |
合规策略ID |
字符串类型,最多64个字符,只能包括字母、数字、中划线(-)。 |
policy_definition_id指定此规则绑定的合规策略ID。 |
|
custom_policy |
自定义策略,包含如下属性:
|
custom_policy:Object类型 。
|
custom_policy指定此规则绑定的自定义策略的函数URN和调用时的鉴权方式。 |
|
parameters |
合规策略的规则参数的值 |
parameters:Object类型
|
合规规则绑定的合规策略,会有相应的规则参数,规则参数的个数、类型以及范围取决于所选择的合规策略。 |
|
tags |
合规规则的标签列表 |
- |
|
|
created_by |
合规规则的创建者 |
- |
用户创建(custom)或服务关联委托方式创建。 |
为避免循环评估的行为,合规规则不支持评估配置审计服务的合规规则和合规规则包两种资源类型。
如下JSON表示了一个用于检查在区域1的弹性云服务器是否具有tag(env:production)标签的预设策略:
{
"id": "5fcd8696dfb78231e6f2f899",
"name": "required-tag-check",
"description": "指定一个标签,不具有此标签的资源,视为“不合规”",
"policy_filter": {
"region_id": "regionid_1",
"resource_provider": "ecs",
"resource_type": "cloudservers",
"tag_key": "env",
"tag_value": "production"
},
"period": null,
"state": "Enabled",
"created": "2020-12-07T01:34:14.266Z",
"updated": "2020-12-07T01:34:14.266Z",
"policy_definition_id": "5fa9f89b6eed194ccb2c04db",
"parameters": {
"specifiedTagKey": {
"value": "a" },
"specifiedTagValue": {
"value": []
}
}
"tags": [],
"created_by": "custom"
}
如下JSON表示了一个用于检查在区域1的弹性云服务器的自定义合规规则:
{
"id": "719d8696dfb78231e6f2f719",
"name": "test_consume_policy",
"description": "指定一个标签,不具有此标签的资源,视为“不合规”",
"policy_filter": {
"region_id": "regionid_1",
"resource_provider": "ecs",
"resource_type": "cloudservers",
"tag_key": null,
"tag_value": null
},
"period": null,
"state": "Enabled",
"created": "2022-07-19T01:34:14.266Z",
"updated": "2022-07-19T01:34:14.266Z",
"policy_definition_id": null,
"custom_policy": {
"function_urn": "urn:fss:regionid_1:projectidforpolicy:function:default:test_consume_policy:latest",
"auth_type": "agency",
"auth_value": {"agency_name": "rms_fg_agency"}
},
"parameters": {
"vpcId": {"value": "allowed-vpc-id"}
}
}
"tags": [],
"created_by": "custom"
}
规则评估结果
当触发规则评估后,会生成相应的评估结果(PolicyState)。
使用JSON表达式来表示一个评估结果,如表3所示。
|
参数 |
定义 |
说明 |
|---|---|---|
|
domain_id |
账号ID |
用于区分用户。规则评估结果的domain_id不会为空。 |
|
resource_id |
评估结果所属资源的ID |
- |
|
resource_name |
评估结果所属资源的名称 |
- |
|
resource_provider |
资源所属的服务 |
- |
|
resource_type |
资源类型 |
- |
|
trigger_type |
触发类型 |
包含如下值:
|
|
compliance_state |
合规结果 |
包含如下值:
|
|
policy_assignment_id |
评估结果对应合规规则的ID |
- |
|
policy_definition_id |
评估结果对应合规策略的ID |
- |
|
evaluation_time |
评估时间戳 |
- |
如下JSON表示了一个不合规的评估结果:
{
"domain_id": "domainidforpolicy",
"resource_id": "special-ecs1-with-public-ip-with-tag",
"resource_name": "ecs1-with-public-ip-with-tag",
"resource_provider": "ecs",
"resource_type": "cloudservers",
"trigger_type": "resource",
"compliance_state": "NonCompliant",
"policy_assignment_id": "5fa9f8a2501013093a192b07",
"policy_definition_id": "5fa9f8a2501013093a192b06",
"evaluation_time": 1604974757084
}