Azure Проверка политики на пустое значение - PullRequest
0 голосов
/ 22 апреля 2020

Мне нужна политика Azure для тегирования. Я хочу, чтобы пользователь должен определить тег при создании группы ресурсов. Политика также должна проверить, что tagvaule не пуст.

Я попробовал следующее:

{
  "properties": {
    "displayName": "Require a tag Billto and a value that is not empty",
    "policyType": "Custom",
    "mode": "All",
    "description": "Enforces a required tag and its value on resource groups.",
    "metadata": {
      "category": "Tags",
    },
    "parameters": {
      "tagName": {
        "type": "String",
        "metadata": {
          "displayName": "Tag Name",
          "description": "Name of the tag, such as 'Billto'"
        }
      },
      "tagValue": {
        "type": "String",
        "metadata": {
          "displayName": "Tag Value",
          "description": "Value of the tag, such as 'Costcenter'"
        }
      }
    },
    "policyRule": {
      "if": {
        "allOf": [
          {
            "field": "type",
            "equals": "Microsoft.Resources/subscriptions/resourceGroups"
          },
          {
            "field": "[concat('tags[', parameters('tagName'), ']')]",
            "exists": "false"
          },
          {
            "value": "[concat('tags[', parameters('tagValue'), ']')]",
            "equals": ""
          }
        ]
      },
      "then": {
        "effect": "deny"
      }
    }
  }

Может кто-нибудь помочь мне и дать мне правильный код? Спасибо Томас

1 Ответ

0 голосов
/ 23 апреля 2020

В этом определении политики будут запрещены группы ресурсов, которые имеют пустое значение для данного тега или вообще не содержат тег:

{
  "properties": {
    "mode": "All",
    "parameters": {
      "tagName": {
        "type": "String",
        "metadata": {
          "displayName": "Tag Name",
          "description": "Name of the tag, such as 'Billto'"
        }
      }
    },
    "policyRule": {
      "if": {
        "allOf": [
          {
            "field": "type",
            "equals": "Microsoft.Resources/subscriptions/resourceGroups"
          },
          {
            "anyOf": [
              {
                "field": "[concat('tags[', parameters('tagName'), ']')]",
                "exists": false
              },
              {
                "field": "[concat('tags[', parameters('tagName'), ']')]",
                "equals": ""
              }
            ]
          }
        ]
      },
      "then": {
        "effect": "deny"
      }
    }
  }
}

Разбивка:

  1. parameters('tagName') разрешается до значения параметра tagName. В оставшейся части этого примера мы будем использовать Billto в качестве имени тега.
  2. "field": "[concat('tags[', parameters('tagName'), ']')]" разрешается в "field": "tags[Billto]"
  3. "field": "tags[Billto]", чтобы получить значение из тега Billto.
  4. Если у ресурса нет тега Billto, тег Billto не будет иметь значения, поэтому "exists" : false будет иметь значение true, а политика будет отклонена. Если значение тега Billto пусто, то "equals": "" будет истинным, и политика будет отклонена.
...