Compartir a través de

Azure Policy 定义 auditIfNotExists 效果

auditIfNotExists 效果会对匹配 if 条件的资源相关的资源启用审核,但没有在 then 条件的 details 中指定属性

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/?"。 这可以与 field 函数结合使用,来访问与所评估的资源相关的资源,例如 "name": "[concat(field('name'), '/?')]"。”

  • resourceGroupName(可选)
    • 允许相关资源的匹配来自不同的资源组。
    • typeif 条件资源下的一个资源,则不适用。
    • 默认值是 if 条件资源的资源组。
  • existenceScope(可选)
    • 允许的值为 Subscription 和 ResourceGroup。
    • 设置从中获取相关资源以在其中进行匹配的范围。
    • typeif 条件资源下的一个资源,则不适用。
    • 对于 ResourceGroup,将限制为 resourceGroupName 中的资源组(如果指定)。 如果未指定 resourceGroupName,则将默认限制为 if 条件资源的资源组。
    • 对于 Subscription,则查询全部订阅以获取相关资源。 应在订阅或更高级别设置分配范围,以便进行正确评估。
    • 默认值是 ResourceGroup。
  • evaluationDelay(可选)
    • 指定何时应该评估相关资源的存在性。 延迟仅用于作为创建或更新资源请求的结果的评估。
    • 允许的值为 AfterProvisioningAfterProvisioningSuccessAfterProvisioningFailure 或 ISO 8601 持续时间(介于 0 到 360 分钟之间)。
    • 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"
          }
        ]
      }
    }
  }
}

后续步骤