Применение политики Azure к группе управления с помощью ARM

Цель: развернуть политику Azure в группе управления, чтобы, когда определенные теги отсутствуют в ресурсе, находящемся в ее компетенции, применять указанный тег из группы ресурсов.

Проблема: развертывание этого шаблона в группе управления приводит к появлению "функции шаблона" RESOURCEGROUP "в этом месте не ожидается.

Это довольно простая структура, похожая на:

<Management Group> - <Subscription 1> - <Resource Group 1> - <Resource A>
                                      - <Resource Group 2> - <Resource B>
                   - <Subscription 2> - <Resource Group 3> - <Resource C>
                                                           - <Resource D>

Существует довольно простой шаблон, использующий определение вложенной политики:

......
"resources": [
    {
      "type": "Microsoft.Authorization/policyDefinitions",
      "apiVersion": "2019-09-01",
      "name": ".",
      "properties": {
        "policyType": "Custom",
        "mode": "Indexed",
        "displayName": ".",
        "description": ".",
        "metadata": {
          "category": "Tags"
        },
        "policyRule": {
          "if": {
            "anyOf": [
              {
                "field": "tags['costCenter']",
                "exists": "false"
              },
              {
                "field": "tags['CostCenter']",
                "notin": "[parameters('allowedCostCenter')]"
              }
            ]
          },
          "then": {
            "effect": "modify",
            "details": {
              "roleDefinitionIds": [
                "/providers/Microsoft.Authorization/roleDefinitions/4a9ae827-6dc8-4573-8ac7-8239d42aa03f"
              ],
              "operations": [
                {
                  "operation": "add",
                  "field": "tags['CostCenter']",
                  "value": "[resourcegroup().tags['CostCenter']]"
                }
              ]
            }
          }
        }
      }
    }
  ]

Я понимаю, что вы не можете использовать resourcegroup () для элементов, которые не входят в группу ресурсов, но руководства, предлагаемые с использованием этого во вложенном шаблоне и для индексированных ресурсов, должны работать.

  • Я почти уверен, что конвейер верен, так как у меня уже есть несколько развертываемых политик аудита.
  • Поэкспериментировав на портале, похоже, что это возможно.
  • Читают прилично, но я не читал (или, по крайней мере, не понимал), что, кажется, помогает с этим.

Возможно ли то, чего я пытаюсь достичь? Если да, то видите ли, что я делаю не так?

Спасибо за вашу помощь!


person Al Mills    schedule 09.02.2021    source источник


Ответы (1)


Вам нужно добавить escape-символ, если вы хотите, чтобы функция resourcegroup () выполнялась как часть политики Azure, а не как шаблон ARM в области MG:

"value": "[[resourcegroup().tags['CostCenter']]"
person Kamil Wiecek    schedule 09.02.2021
comment
Гаххх! Спасибо. - person Al Mills; 10.02.2021