Azure Policy 定义 auditIfNotExists 效果

auditIfNotExists效果允许审核与与条件匹配的资源if资源,但不具有条件中指定的detailsthen属性。

AuditIfNotExists 评估

auditIfNotExists 在资源提供程序处理创建或更新资源请求并返回成功状态代码之后运行。 如果没有相关资源,或者由 ExistenceCondition 定义的资源不评估为 true,则会发生审核。 对于新资源和更新资源,Azure Policy 会将 Microsoft.Authorization/policies/audit/action 操作添加到活动日志,并将资源标记为不合规。 触发时,满足 if 条件的资源是标记为不符合的资源。

AuditIfNotExists 属性

AuditIfNotExists 效果的details属性包含所有子属性,用以定义要匹配的相关资源。

  • type(必需)
    • 指定要匹配的相关资源的类型。
    • 如果typeif条件资源下的一种类型,策略将在评估的资源范围内查询此类type资源。 否则,策略查询在与被评估资源相同的资源组或订阅中,其具体位置取决于existenceScope
  • name(可选)
    • 指定要匹配的资源的确切名称,并导致策略提取一个特定资源,而不是指定类型的所有资源。
    • if.field.typethen.details.type的条件值匹配时,name变为必需,并且必须是[field('name')][field('fullName')]子资源。 但是,应当优先考虑 审核 效果。

注释

typename 段可以组合在一起,以一般方式检索嵌套资源。

若要检索特定资源,可以使用 "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType""name": "parentResourceName/nestedResourceName"

为了检索一个嵌套资源集合,可以在名称的最后一个段替换为通配符 ?。 例如,"type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType""name": "parentResourceName/?"。 这可以与字段函数结合使用,以访问与评估的资源相关的资源,例如 "name": "[concat(field('name'), '/?')]"

  • resourceGroupName(可选)
    • 允许关联的资源可以来自不同的资源组。
    • 如果 type 资源位于条件资源下 if ,则不适用。
    • 默认值为 if 条件资源的资源组。
  • existenceScope(可选)
    • 允许的值是 SubscriptionResourceGroup
    • 设置要匹配的相关资源获取范围。
    • 如果 type 资源位于条件资源下 if ,则不适用。
    • 如果指定,将把 ResourceGroup 限制为 resourceGroupName 的资源组。 resourceGroupName如果未指定,将限制为if条件资源的资源组,即默认行为。
    • 对于 订阅,查询相关资源的整个订阅信息。 应在订阅级别或更高级别设置分配范围,以便进行适当评估。
    • 默认值为 ResourceGroup
  • evaluationDelay(可选)
    • 指定何时应评估相关资源的存在。 延迟仅用于作为创建或更新资源请求的结果的评估。
    • 允许的值为 AfterProvisioningAfterProvisioningSuccessAfterProvisioningFailure0 到 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"
          }
        ]
      }
    }
  }
}

后续步骤