是的,你没看错,是AuditIfExists而不是AuditIfNotExists。
我的用例是,我希望审核所有Azure SQL服务器中具有特定IP地址的防火墙规则,并且希望所有策略仪表板指标都与SQL服务器相关,而不是与防火墙规则相关。(即,每个包含3个防火墙规则的2个SQL服务器应标识2个资源,而不是Microsoft.SQL/servers/firewallRules的直接Audit将报告的6个资源)。
在使用AuditIfNotExists或DeployIfNotExists时,我的许多其他自定义策略都会检查相关资源,并代表父级报告这些指标。然而,这些检查的基本基础是,无论存在条件评估结果如何,子类型的不存在都会创建不符合的状态。因此,在我的示例中,如果SQL Server没有防火墙规则(对我来说,这将是符合状态),则策略将其评估为不符合。如果我像这个策略问题线程(https://github.com/Azure/azure-policy/issues/374)中的@mentat9建议的那样,再次尝试在我的存在条件中检查是否存在,那么通过几次尝试,很明显,如果不存在所需类型的对象,策略引擎甚至不会评估存在条件。
下面是我最近一次尝试的policyRule。
"policyRule": {
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.Sql/servers"
}
]
},
"then": {
"effect": "[parameters('effect')]",
"details": {
"type": "Microsoft.Sql/servers/firewallRules",
"roleDefinitionIds": [
"/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
],
"existenceCondition": {
"anyOf": [
{
"field": "Microsoft.Sql/servers/firewallRules/startIpAddress",
"exists": false
},
{
"allOf": [
{
"field": "Microsoft.Sql/servers/firewallRules/startIpAddress",
"notequals": "0.0.0.0"
},
{
"field": "Microsoft.Sql/servers/firewallRules/endIpAddress",
"notequals": "0.0.0.0"
}
]
}
]
}
}
}
}发布于 2020-10-16 13:31:33
Count表达式怎么样?
{
"count": {
"field": "Microsoft.Sql/servers/firewallRules[*]",
"where": {
"field": "Microsoft.Sql/servers/firewallRules[*].startIpAddress",
"equals": "0.0.0.0"
}
},
"equals": 0
}https://stackoverflow.com/questions/64362457
复制相似问题