配置審計使用自訂條件規則作為規則部署實施的方式之一,自訂條件規則由資源(Resource)、條件(Condition)、調試(DryRun)等基本元素組成。
條件(Condition)是自訂條件規則的重點元素,由條件子句構成,多個子句之間可以通過邏輯與(and)和邏輯或(or) 一起構成更為複雜的邏輯結構。由邏輯符串聯的一組子句稱為條件組。子句是整個條件組的精華,由特徵(featurePath)、操作符(operator)和預期值(desiredValue) 組成。
元素名稱 | 是否必選 | 描述 |
是 | 資源特徵。取自資源(Resource)的屬性或其相關的來源特徵,通過JSONPath描述,例如:資源狀態屬性為Status, 用特徵描述為 | |
是 | 資源特徵的來源。 | |
是 | 條件的操作符。 | |
否 | 一目操作符的情況。允許為空白,例如:操作符為IsStringEmpty。 |
特徵(featurePath)
權限原則支援JSONPath格式。當您建立或更新權限原則時,配置審計會檢查JSONPath格式的正確。您也可以使用第三方JSONPath格式驗證器和編輯器自行檢查JSONPath格式的正確性。關於JSONPath文法標準,請參見JSONPath。
JSONPath | Description |
$ | the root object/element |
@ | the current object/element |
. or [] | child operator |
.. | recursive descent. JSONPath borrows this syntax from E4X. |
* | wildcard. All objects/elements regardless their names. |
[] | subscript operator. XPath uses it to iterate over element collections and for predicates. In Javascript and JSON it is the native array operator. |
[,] | Union operator in XPath results in a combination of node sets. JSONPath allows alternate names or array indices as a set. |
[start:end:step] | array slice operator borrowed from ES4. |
?() | applies a filter (script) expression. |
() | script expression, using the underlying script engine. |
樣本1:ACS::ECS::Instance狀態特徵
$.Status
類型判定為String,會推薦String類型的操作符。樣本2:ACS::ECS::Instance標籤特徵
$.Tags[*].TagKey
,結果為Array。樣本3:ACS::ECS::SecurityGroup安全性群組許可權配置特徵
$.Permissions.Permission[?(@.Policy=='Accept')][?(@.IpProtocol=='TCP' || @.IpProtocol=='UDP')][?(@.SourceCidrIp=='0.0.0.0/0')].PortRange
,表示允許條目為TCP或UDP協議且來源IP為任意IP的連接埠,可以配置連接埠是否包括22和3389等。{ "featureSource": "CONFIGURATION", "desired": "21/21,22/22,23/23,3389/3389,445/445,-1/-1", "children": [], "operator": "ExcludeAll", "featurePath": "$.Permissions.Permission[?(@.Policy=='Accept')][?(@.IpProtocol=='TCP' || @.IpProtocol=='UDP')][?(@.SourceCidrIp=='0.0.0.0/0')].PortRange" }
特徵來源(featureSource)
資源特徵的來源,具體如下:
CONFIGURATION(預設值):資源屬性配置。空值也按照資源屬性處理。
RESOURCE_RELATIONSHIP_${targetResourceType}
:資源關係,例如:RESOURCE_RELATIONSHIP_ACS::ECS::DISK
。
操作符(operator)
操作符包括邏輯操作符和計算操作符,邏輯操作符包括邏輯與(and)和邏輯或(or),計算操作符如下表所示。
操作符 | 描述 |
SizeLess | 數組元素個數小於 |
DistinctSizeGreater | 元素去重後個數大於 |
AllGreaterOrEquals | 元素全部大於等於 |
InAllItem | 所有元素包含 |
AllLessOrEquals | 元素全部小於等於 |
AllGreater | 元素全部大於 |
SizeGreater | 數組元素個數大於 |
NotContainsIP | 數組中不包含指定的IP地址 |
ContainsIP | 數組中包含指定的IP地址 |
ContainsAny | 數組中不包含目標數組中的任意對象 |
NotContainsNull | 數組中不包含空元素 |
NotContainsInternetCidr | 不包含公網IP位址區段 |
IsNotEmpty | 不為空白 |
AllIn | 全部存在 |
IsEmpty | 為空白 |
ExcludeAll | 排除全部 |
ContainsAll | 包含全部 |
NotIn | 不存在 |
In | 存在 |
NotContains | 不包含 |
Contains | 包含 |
NotBase64Contains | 不包含 |
Base64Contains | 包含 |
NotBoolEquals | 不等於 |
BoolEquals | 等於 |
NotEquals | 不等於 |
Equals | 等於 |
LessOrEquals | 小於等於 |
Less | 小於 |
Greater | 大於 |
GreaterOrEquals | 大於等於 |
StringItemSizeGreater | 字串分割元素個數大於指定值 |
StringMatch | 匹配正則 |
NotStringTrimIn | 有效值不存在 |
StringTrimIn | 有效值存在 |
IsNotStringEmpty | 不為空白 |
IsStringEmpty | 為空白 |
NotStringContains | 不包含 |
StringContains | 包含 |
NotStringIn | 不存在 |
StringIn | 存在 |
NotStringEquals | 不等於 |
StringEquals | 等於 |
預期值(desired)
允許為空白,例如:操作符為IsStringEmpty。