Пользовательская политика с использованием шаблона ARM

#azure #azure-resource-manager

#azure #azure-resource-manager

Вопрос:

Я пытаюсь создать политику для назначения нескольких тегов. При назначении этой политики проверка завершается с ошибкой, если не назначены теги или неправильные теги, определенные в политике. Однако он не проверяет условие allof в шаблоне, что означает, что если я назначу какой-либо один тег, он проверяет и создает ресурс. В идеале он должен проверять наличие всех восьми упомянутых тегов. С этим шаблоном политики мне не ясно, как добавить дополнительные теги принудительного применения в одном шаблоне ARM. Ниже приведен шаблон

   "mode": "Indexed",
  "policyRule": {
    "if": {
      "allOf": [
        {
          "field": "[concat('tags[', parameters('tagName1'), ']')]",
          "exists": "false"
        },
        {
          "field": "[concat('tags[', parameters('tagName2'), ']')]",
          "exists": "false"
        },
        {
          "field": "[concat('tags[', parameters('tagName3'), ']')]",
          "exists": "false"
        },
        {
          "field": "[concat('tags[', parameters('tagName4'), ']')]",
          "exists": "false"
        },
        {
          "field": "[concat('tags[', parameters('tagName5'), ']')]",
          "exists": "false"
        },
        {
          "field": "[concat('tags[', parameters('tagName6'), ']')]",
          "exists": "false"
        },
        {
          "field": "[concat('tags[', parameters('tagName7'), ']')]",
          "exists": "false"
        },
        {
          "field": "[concat('tags[', parameters('tagName8'), ']')]",
          "exists": "false"
        }
      ]
    },
    "then": {
      "effect": "deny"
    }
  },
  "parameters": {
    "tagName1": {
      "type": "String",
      "metadata": {
        "displayName": "Tag name1",
        "description": "Name of the tag to enforce"
      }
    },
    "tagName2": {
      "type": "String",
      "metadata": {
        "displayName": "Tag name2",
        "description": "Name of the tag to enforce"
      }
    },
    "tagName3": {
      "type": "String",
      "metadata": {
        "displayName": "Tag name3",
        "description": "Name of the tag to enforce"
      }
    },
    "tagName4": {
      "type": "String",
      "metadata": {
        "displayName": "Tag name4",
        "description": "Name of the tag to enforce"
      }
    },
    "tagName5": {
      "type": "String",
      "metadata": {
        "displayName": "Tag name5",
        "description": "Name of the tag to enforce"
      }
    },
    "tagName6": {
      "type": "String",
      "metadata": {
        "displayName": "Tag name6",
        "description": "Name of the tag to enforce"
      }
    },
    "tagName7": {
      "type": "String",
      "metadata": {
        "displayName": "Tag name7",
        "description": "Name of the tag to enforce"
      }
    },
    "tagName8": {
      "type": "String",
      "metadata": {
        "displayName": "Tag name8",
        "description": "Name of the tag to enforce"
      }
    }
  }
}```

Regards,
Sajith
 

Ответ №1:

Пользовательское определение политики позволяет клиентам определять свои собственные правила для ресурсов в ваших подписках Azure. Это часть инструментария управления и управления Azure, встроенного в Azure.

Если вам не ясно с шаблоном политики о том, как добавлять и применять дополнительные теги в рамках одного шаблона ARM, то на самом деле это довольно просто. Вам нужно добавить дополнительные теги в качестве правил и параметров.

Шаблон ARM, приведенный ниже, поможет вам достичь желаемого результата.

 { 
"mode": "all", 
"policyRule": {
  "if": { 
    "allOf": [ 
      { 
        "field": "type", 
        "equals": "Microsoft.Resources/subscriptions/resourceGroups" 
      }, 
      { 
        "not": { 
          "field": "[concat('tags[',parameters('tagName1'), ']')]", 
          "exists": "true" 
         } 
      }, 
      { 
        "not": { 
          "field": "[concat('tags[',parameters('tagName2'), ']')]", 
          "exists": "true" 
         } 
      },
      { 
        "not": { 
          "field": "[concat('tags[',parameters('tagName3'), ']')]", 
          "exists": "true" 
         } 
      }
     ] 
    }, 
    "then": { 
      "effect": "deny" 
     } 
  },
"parameters": {
    "tagName1": {
      "type": "String",
      "metadata": {
        "displayName": "Tag name1",
        "description": "Name of the tag to enforce"
      }
    },
    "tagName2": {
      "type": "String",
      "metadata": {
        "displayName": "Tag name2",
        "description": "Name of the tag to enforce"
      }
    },
    "tagName3": {
      "type": "String",
      "metadata": {
        "displayName": "Tag name3",
        "description": "Name of the tag to enforce"
      }
    }
  ...
  ...
 

В следующий раз, когда кто-то развернет группу ресурсов без требуемых тегов в подписке, эта политика, назначенная ей, завершится ошибкой.

Я бы посоветовал прочитать этот шаблон политики Azure: помечает документ Microsoft и требует много тегов для групп ресурсов через документ политики Azure для получения дополнительной информации.