【问题标题】:ExistenceCondition in Azure Policy?Azure Policy 中的存在条件?
【发布时间】:2019-09-22 15:33:21
【问题描述】:

我目前正在尝试了解 Azure 政策。我想我已经了解了别名,但是我无法理解在哪里可以找到 ExistenceCondition 等于字段的正确值

  1. 它与我们应用的 PolicyRule 有何不同?
  2. 我应该保持 ExistanceCondition 与 PolicyRule 几乎相同吗?

我应用的策略规则:

    "if":{
            "allOf":[
               {
                  "field":"type",
                  "equals":"Microsoft.Insights/metricalerts"
               },
               {
                  "field":"Microsoft.Insights/metricalerts/enabled",
                  "equals":"true"
               },
               {
                  "field":"Microsoft.Insights/metricalerts/actions[*]",
                  "less":"1"
               }
            ]
         }

【问题讨论】:

  • 使用ExistenceCondition 的一个场景是检查PolicyRule 指定的资源以外的资源。
  • 例如,对于所有A类资源,检查是否存在引用A的B类资源。此时PolicyRule指定A资源,ExistenceCondition指定B资源。
  • 你找到答案了吗?
  • @ccshih 如果我们忽略 'ExistenceCondition' 会怎样?文档说它不会触发部署。那么它应该是强制性的吧?

标签: azure azure-policy


【解决方案1】:

ExistenceCondition 在控制方向上与policyRule 相反。 在策略规则中,仅当条件为真时才继续。在ExistenceCondition 中,仅当条件为假时才继续。在下面policyRule 的示例中,您只过滤 storageAccount 然后继续。仅当条件为 false (deleteRetentionPolicy.enabled ==false) 时才会发生部署,因此它会继续进行部署。所以一旦部署完成,它将是 deleteRetentionPolicy.enabled ==true

    "policyRule": {
        "if": {
            "allOf": [
                {
                    "field": "type",
                    "equals": "Microsoft.Storage/storageAccounts"
                },
                {
                    "field": "kind",
                    "in": [
                        "Storage",
                        "StorageV2",
                        "BlobStorage",
                        "BlockBlobStorage"
                    ]
                }
            ]
        },
        "then": {
            "effect": "DeployIfNotExists",
            "details": {
                "type": "Microsoft.Storage/storageAccounts/blobServices",
                "existenceCondition": {
                    "field": "Microsoft.Storage/storageAccounts/blobServices/default.deleteRetentionPolicy.enabled",
                    "equals": true
                },

【讨论】:

    【解决方案2】:

    看这个例子:

    https://docs.microsoft.com/en-us/azure/governance/policy/samples/pattern-effect-details#sample-2-explanation

    "details": {
        "type": "Microsoft.Compute/virtualMachines/extensions",
        "existenceCondition": {
            "allOf": [{
                    "field": "Microsoft.Compute/virtualMachines/extensions/publisher",
                    "equals": "[parameters('publisher')]"
                },
                {
                    "field": "Microsoft.Compute/virtualMachines/extensions/type",
                    "equals": "[parameters('type')]"
                }
            ]
        }
    }
    

    existenceCondition 使用策略语言元素,例如逻辑 运算符,以确定是否存在匹配的相关资源。在这个 例如,针对每个别名检查的值定义在 参数。

    【讨论】:

    • 既然已经有了策略规则,为什么还需要它?
    • 如果我们忽略它会发生什么,它是一个可选字段。
    • “确定是否存在匹配的相关资源”如果存在,那么呢?如果不是那怎么办?
    【解决方案3】:

    ExistenceCondition 仅适用于具有 AuditIfNotExists 和 DeployIfNotExists 效果的策略。

    在 AuditIfNotExists 的情况下

    "如果任何匹配的相关资源评估为真,则效果为 满意,不会触发审核。”

    在 DeployIfNotExists 的情况下

    "如果任何匹配的相关资源评估为真,则效果为 满意,不会触发部署。”

    与 ExistenceCondition 不匹配的现有资源将被标记为非投诉。被 PolicyRule 过滤掉的资源不会被标记为未投诉。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多