Как исправить политику deployIfNotExists для Key Vault

Пытаясь создать политику DeployIfNotExists, которая будет автоматически устанавливать свойства "networkACLs" для всех хранилищ ключей, но после нескольких недель борьбы с этим я решил попробовать манипулировать более простым логическим свойством вместо сложного свойства объекта. Я выбрал свойство «enabledForDeployment». Политика правильно находит несовместимые хранилища ключей, но развертывание не работает.

Как только эта "простая" политика заработает, я вернусь и попытаюсь установить для свойства "networkACLs" следующее:

"networkAcls": {
    "defaultAction": "Deny",
    "bypass": "None",
    "ipRules": [
        {"value": "1.1.1.0/24"},
        {"value":"2.2.2.0/24"}
    ],
    "virtualNetworkRules": []
}

Код политики ниже ...

{
  "mode": "All",
  "policyRule": {
    "if": {
      "allof": [
        {
          "field": "type",
          "equals": "Microsoft.KeyVault/vaults"
        },
        {
          "not": {
            "field": "Microsoft.KeyVault/vaults/enabledForDeployment",
            "equals": true
          }
        }
      ]
    },
    "then": {
      "effect": "deployIfNotExists",
      "details": {
        "type": "Microsoft.KeyVault/vaults",
        "name": "[field('name')]",
        "existenceCondition": {
          "field": "Microsoft.KeyVault/vaults/enabledForDeployment",
          "equals": "true"
        },
        "roleDefinitionIds": [
          "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
        ],
        "deployment": {
          "location": "[field('location')]",
          "properties": {
            "mode": "incremental",
            "template": {
              "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
              "contentVersion": "1.0.0.0",
              "parameters": {
                "Name": {
                  "type": "string"
                },
                "location": {
                  "type": "string"
                }
              },
              "resources": [
                {
                  "type": "Microsoft.KeyVault/vaults",
                  "apiVersion": "2018-02-14",
                  "name": "[parameters('Name')]",
                  "location": "[parameters('location')]",
                  "properties": {
                    "enabledForDeployment": true
                  }
                }
              ],
              "outputs": {
                "policy": {
                  "type": "string",
                  "value": "done"
                }
              }
            },
            "parameters": {
              "location": {
                "value": "[field('location')]"
              },
              "Name": {
                "value": "[field('name')]"
              }
            }
          }
        }
      }
    }
  },
  "parameters": {}
}

В настоящее время я получаю сообщение «internalServerError». Любые идеи?


person new2AzurePolicy    schedule 06.11.2019    source источник


Ответы (2)


@ Кемли, ты прав. Мой шаблон ARM был неправильным. Не хватало нескольких обязательных полей (Sku, Access Policies и т. Д.). Ниже приведена последняя политика, которая обновляет NetworkACL, если установлена ​​сеть по умолчанию, разрешающая все.

{
  "properties": {
    "displayName": "Vzn Deploy Key Vault NetworkAcls defaultAction",
    "policyType": "Custom",
    "mode": "All",
    "description": "Removes the default allow all networks.  Manually sets 2 firewall rules",
    "parameters": {
      "effect": {
        "type": "String",
        "metadata": {
          "displayName": "Effect",
          "description": "Enable or disable the execution of the policy"
        },
        "allowedValues": [
          "deployIfNotExists",
          "disabled"
        ],
        "defaultValue": "deployIfNotExists"
      }
    },
    "policyRule": {
      "if": {
        "field": "type",
        "equals": "Microsoft.KeyVault/vaults"
      },
      "then": {
        "effect": "[parameters('effect')]",
        "details": {
          "type": "Microsoft.KeyVault/vaults",
          "roleDefinitionIds": [
            "/providers/Microsoft.Authorization/roleDefinitions/f25e0fa2-a7c8-4377-a976-54943a77a395"
          ],
          "existenceCondition": {
            "field": "Microsoft.KeyVault/vaults/networkAcls.defaultAction",
            "equals": "Deny"
          },
          "deployment": {
            "properties": {
              "mode": "incremental",
              "template": {
                "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
                "contentVersion": "1.0.0.0",
                "parameters": {
                  "keyvaultname": {
                    "type": "string"
                  },
                  "locationname": {
                    "type": "string"
                  },
                  "skuname": {
                    "type": "string"
                  },
                  "accessPoliciesname": {
                    "type": "array"
                  }
                },
                "resources": [
                  {
                    "name": "[parameters('keyvaultname')]",
                    "location": "[parameters('locationname')]",
                    "type": "Microsoft.KeyVault/vaults",
                    "apiVersion": "2018-02-14",
                    "properties": {
                      "tenantId": "be42d65b-eb64-4a64-8aa3-ae47eef3af3e",
                      "accessPolicies": "[parameters('accessPoliciesname')]",
                      "sku": {
                        "name": "[parameters('skuname')]",
                        "family": "A"
                      },
                      "networkAcls": {
                        "defaultAction": "Deny",
                        "bypass": "None",
                        "ipRules": [
                          {
                            "value": "1.2.3.0/27"
                          },
                          {
                            "value": "1.5.6.0/24"
                          }
                        ]
                      }
                    }
                  }
                ]
              },
              "parameters": {
                "keyvaultname": {
                  "value": "[field('name')]"
                },
                "locationname": {
                  "value": "[field('location')]"
                },
                "skuname": {
                  "value": "[field('Microsoft.KeyVault/vaults/sku.name')]"
                },
                "accessPoliciesname": {
                  "value": "[field('Microsoft.KeyVault/vaults/accessPolicies')]"
                }
              }
            }
          },
          "name": "[field('name')]"
        }
      }
    }
  }
}
person new2AzurePolicy    schedule 13.12.2019

Я бы рекомендовал проверить ваш шаблон ARM, чтобы убедиться, что он правильный. Иногда, когда вы используете функцию экспорта шаблона, шаблон ARM может не работать без тестирования. Если у вас есть проблема с шаблоном ARM, я бы направил им ваши вопросы

person Kemley    schedule 11.12.2019