该auditIfNotExists
效果允许审核与与条件匹配的资源if
资源,但不具有条件中指定的details
then
属性。
AuditIfNotExists 评估
auditIfNotExists
在资源提供程序处理创建或更新资源请求并返回成功状态代码之后运行。 如果没有相关资源,或者由 ExistenceCondition
定义的资源不评估为 true,则会发生审核。 对于新资源和更新资源,Azure Policy 会将 Microsoft.Authorization/policies/audit/action
操作添加到活动日志,并将资源标记为不合规。 触发时,满足 if
条件的资源是标记为不符合的资源。
AuditIfNotExists 属性
AuditIfNotExists 效果的details
属性包含所有子属性,用以定义要匹配的相关资源。
-
type
(必需)- 指定要匹配的相关资源的类型。
- 如果
type
是if
条件资源下的一种类型,策略将在评估的资源范围内查询此类type
资源。 否则,策略查询在与被评估资源相同的资源组或订阅中,其具体位置取决于existenceScope
。
-
name
(可选)- 指定要匹配的资源的确切名称,并导致策略提取一个特定资源,而不是指定类型的所有资源。
- 当
if.field.type
和then.details.type
的条件值匹配时,name
变为必需,并且必须是[field('name')]
或[field('fullName')]
子资源。 但是,应当优先考虑 审核 效果。
注释
type
和 name
段可以组合在一起,以一般方式检索嵌套资源。
若要检索特定资源,可以使用 "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType"
和 "name": "parentResourceName/nestedResourceName"
。
为了检索一个嵌套资源集合,可以在名称的最后一个段替换为通配符 ?
。 例如,"type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType"
和 "name": "parentResourceName/?"
。 这可以与字段函数结合使用,以访问与评估的资源相关的资源,例如 "name": "[concat(field('name'), '/?')]"
。
-
resourceGroupName
(可选)- 允许关联的资源可以来自不同的资源组。
- 如果
type
资源位于条件资源下if
,则不适用。 - 默认值为
if
条件资源的资源组。
-
existenceScope
(可选)- 允许的值是 Subscription 和 ResourceGroup。
- 设置要匹配的相关资源获取范围。
- 如果
type
资源位于条件资源下if
,则不适用。 - 如果指定,将把 ResourceGroup 限制为
resourceGroupName
的资源组。resourceGroupName
如果未指定,将限制为if
条件资源的资源组,即默认行为。 - 对于 订阅,查询相关资源的整个订阅信息。 应在订阅级别或更高级别设置分配范围,以便进行适当评估。
- 默认值为 ResourceGroup。
-
evaluationDelay
(可选)- 指定何时应评估相关资源的存在。 延迟仅用于作为创建或更新资源请求的结果的评估。
- 允许的值为
AfterProvisioning
AfterProvisioningSuccess
AfterProvisioningFailure
0 到 360 分钟之间的 ISO 8601 持续时间。 -
AfterProvisioning 值检查策略规则
if
条件中评估的资源的预配结果。AfterProvisioning
预配完成后立即运行,无论结果如何。 确定 AfterProvisioning 评估延迟时,超过六小时的预配会被视为失败。 - 默认值为
PT10M
(10 分钟)。 - 指定长时间的评估延迟可能会导致资源记录的符合性状态在下次 评估触发器之前不会更新。
-
existenceCondition
(可选)- 如果未指定,则任何相关资源
type
都满足效果,并且不会触发审核。 - 对条件使用与策略规则
if
相同的语言,但评估是针对每个相关资源分别进行的。 - 如果任何匹配的相关资源计算结果为 true,则条件满足,并且不会触发审核。
- 可以使用 [field()] 检查条件中的
if
值的等效性。 - 例如,可用于验证父资源(条件
if
中)是否与匹配相关资源位于同一资源位置。
- 如果未指定,则任何相关资源
AuditIfNotExists 示例
示例:评估虚拟机以确定是否存在反恶意软件扩展,然后在缺少时进行审核。
{
"if": {
"field": "type",
"equals": "Microsoft.Compute/virtualMachines"
},
"then": {
"effect": "auditIfNotExists",
"details": {
"type": "Microsoft.Compute/virtualMachines/extensions",
"existenceCondition": {
"allOf": [
{
"field": "Microsoft.Compute/virtualMachines/extensions/publisher",
"equals": "Microsoft.Azure.Security"
},
{
"field": "Microsoft.Compute/virtualMachines/extensions/type",
"equals": "IaaSAntimalware"
}
]
}
}
}
}
后续步骤
- 在 Azure Policy 示例中查看示例。
- 查看 Azure Policy 定义结构。
- 了解如何以编程方式创建策略。
- 了解如何获取符合性数据。
- 了解如何修正不符合的资源。
- 请参阅 Azure 管理组。