Как добавить многозначные допустимые переменные в тег - PullRequest
0 голосов
/ 07 октября 2019

Я не могу найти способ назначить многозначные принятые переменные для одного тега.

Скажем, у нас есть "Тег среды"

Я хочу, чтобы единственными допустимыми переменными было "Производство", Testing, Pending "

Однако я смог назначить только одну переменную для каждого тега.

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

У меня есть тег "Environment"

Я создал тег Environment в подпрограмме, поэтому он появляется в раскрывающемся меню.

Я пытался создать многозначные переменные в разделе переменных, однако я могу создать только одну.

Я могу заставить его работать с одной переменной, например с производственной, но если я назначу более одной переменнойв текстовом поле он просто добавляет его как одно значение, я пробовал разделение с ("',; :) Кажется, ничего не работает.

{
  "properties": {
    "displayName": "Require tag and its value",
    "policyType": "BuiltIn",
    "mode": "Indexed",
    "description": "Enforces a required tag and its value. Does not apply to resource groups.",
    "metadata": {
      "category": "Tags"
    },
    "parameters": {
      "tagName": {
        "type": "String",
        "metadata": {
          "displayName": "Tag Name",
          "description": "Name of the tag, such as 'environment'"
        }
      },
      "tagValue": {
        "type": "String",
        "metadata": {
          "displayName": "Tag Value",
          "description": "Value of the tag, such as 'production'"
        }
      }
    },
    "policyRule": {
      "if": {
        "not": {
          "field": "[concat('tags[', parameters('tagName'), ']')]",
          "equals": "[parameters('tagValue')]"
        }
      },
      "then": {
        "effect": "deny"
      }
    }
  },
  "id": "/providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
  "type": "Microsoft.Authorization/policyDefinitions",
  "name": "1e30110a-5ceb-460c-a204-c1c3969c6d62"
}

При вводе TAG и переменной

"parameters": {
  "tagName": {
    "type": "String",
    "metadata": {
      "displayName": "Tag Name",
      "description": "Name of the tag, such as 'environment'"
    }



  "tagValue": {
    "type": "String",
    "metadata": {
      "displayName": "Tag Value",
      "description": "Value of the tag, such as 'production'"
    }

Я хотел бы знать, возможно ли добавить вторичное значение тега "Tagvalue1,2,3 и т. Д."

  "tagValue": {
    "type": "String",
    "metadata": {
      "displayName": "Tag Value",
      "description": "Value of the tag, such as 'production'"
    }

  "tagValue1": {
    "type": "String",
    "metadata": {
      "displayName": "Tag Value",
      "description": "Value of the tag, such as 'Testing'"
    }
  "tagValue2": {
    "type": "String",
    "metadata": {
      "displayName": "Tag Value",
      "description": "Value of the tag, such as 'Pending'"
    }

Все остальные переменные для этого тега должны быть отклонены. Однако яне может заставить его работать.

Ответы [ 4 ]

0 голосов
/ 24 октября 2019

Существует решение для ограничения значений в основах, называемое " allowValues ​​": https://docs.microsoft.com/pl-pl/azure/governance/policy/concepts/definition-structure

https://docs.microsoft.com/pl-pl/azure/governance/policy/concepts/definition-structure#parameter-properties

"parameters": {
    "allowedLocations": {
        "type": "array",
        "metadata": {
            "description": "The list of allowed locations for resources.",
            "displayName": "Allowed locations",
            "strongType": "location"
        },
        "defaultValue": [ "westus2" ],
        "allowedValues": [
            "eastus2",
            "westus2",
            "westus"
        ]
    }
}
0 голосов
/ 07 октября 2019

Я думаю, вам нужно использовать свойство in. из примеров:

"parameters": {
    "allowedLocations": {
        "type": "array",
        "metadata": {
            "description": "The list of allowed locations for resources.",
            "displayName": "Allowed locations",
            "strongType": "location"
        },
        "defaultValue": [ "westus2" ],
        "allowedValues": [
            "eastus2",
            "westus2",
            "westus"
        ]
    }
}

и затем вы можете ссылаться на него:

{
    "field": "location",
    "in": "[parameters('allowedLocations')]"
}
0 голосов
/ 23 октября 2019
{
  "mode": "All",
  "policyRule": {
    "if": {
      "allOf": [
        {
          "field": "type",
          "equals": "Microsoft.Compute/virtualMachines"
        },
        {
          "anyOf": [
            {
              "field": "tags[Environment]",
              "notEquals": "Production"
            },
            {
              "field": "tags[Environment]",
              "notEquals": "Testing"
            },
            {
              "field": "tags[Environment]",
              "notEquals": "Pending"
            }
          ]
        }
      ]
    },
    "then": {
      "effect": "deny"
    }
  },
  "parameters": {}
}

Я получил это далеко благодаря вашей удивительной помощи, однако при проверке новых виртуальных машин я получаю следующую ошибку, несмотря на то, какое значение я набираю: Ожидание, Тестирование или Производство

{
  "code": "InvalidTemplateDeployment",
  "message": "The template deployment failed because of policy violation. Please see details for more information.",
  "details": [
    {
      "code": "RequestDisallowedByPolicy",
      "target": "tester123",
      "message": "Resource 'tester123' was disallowed by policy. Policy identifiers: '[{\"policyAssignment\":{\"name\":\"Enforce tag Environment\",\"id\":\"/subscriptions/f3434458-6c34-41bf-b159-04eff84fb1b8/providers/Microsoft.Authorization/policyAssignments/363b1c045401446eafdd29bf\"},\"policyDefinition\":{\"name\":\"Enforce tag Environment\",\"id\":\"/subscriptions/f3434458-6c34-41bf-b159-04eff84fb1b8/providers/Microsoft.Authorization/policyDefinitions/7be665bc-57a5-451d-b159-6cabcfd1042a\"}}]'.",
      "additionalInfo": [
        {
          "type": "PolicyViolation",
          "info": {
            "policyDefinitionDisplayName": "Enforce tag Environment",
            "evaluationDetails": {
              "evaluatedExpressions": [
                {
                  "result": "True",
                  "expressionKind": "Field",
                  "expression": "type",
                  "path": "type",
                  "expressionValue": "Microsoft.Compute/virtualMachines",
                  "targetValue": "Microsoft.Compute/virtualMachines",
                  "operator": "Equals"
                },
                {
                  "result": "True",
                  "expressionKind": "Field",
                  "expression": "tags[Environment]",
                  "path": "tags[Environment]",
                  "expressionValue": "Testing",
                  "targetValue": "Production",
                  "operator": "NotEquals"
                }
              ]
            },
            "policyDefinitionId": "/subscriptions/f3434458-6c34-41bf-b159-04eff84fb1b8/providers/Microsoft.Authorization/policyDefinitions/7be665bc-57a5-451d-b159-6cabcfd1042a",
            "policyDefinitionName": "7be665bc-57a5-451d-b159-6cabcfd1042a",
            "policyDefinitionEffect": "deny",
            "policyAssignmentId": "/subscriptions/f3434458-6c34-41bf-b159-04eff84fb1b8/providers/Microsoft.Authorization/policyAssignments/363b1c045401446eafdd29bf",
            "policyAssignmentName": "363b1c045401446eafdd29bf",
            "policyAssignmentDisplayName": "Enforce tag Environment",
            "policyAssignmentScope": "/subscriptions/f3434458-6c34-41bf-b159-04eff84fb1b8",
            "policyAssignmentParameters": {}
          }
        }
      ]
    }
  ]
}

itПо крайней мере, мне кажется, что я потерпел неудачу из-за неправильного целевого значения. Однако я предполагаю, что подойдет любой из 3 вариантов, определенных в определении политики? По крайней мере, я понял, как нацелить это только на наши виртуальные машины, или, по крайней мере, я думаю, что сделал.

0 голосов
/ 07 октября 2019

Вы можете взять пример с сайта документации Azure: https://docs.microsoft.com/en-us/azure/governance/policy/samples/enforce-tag-on-resource-groups

Если вам не нужны какие-либо параметры для политики:

{
   "properties": {
      "displayName": "Enforce tag Environment and its value on resource groups",
      "description": "Enforces a required tag and its value on resource groups.",
      "mode": "All",
      "parameters": {
      },
      "policyRule": {
         "if": {
            "allOf": [
               {
                  "field": "type",
                  "equals": "Microsoft.Resources/subscriptions/resourceGroups"
               },
               {
                "anyOf": [
                  {
                   "field": "tags[Environment]",
                   "notEquals": "Production"
                  },
                  {
                   "field": "tags[Environment]",
                   "notEquals": "Testing"
                  },
                  {
                    "field": "tags[Environment]",
                    "notEquals": "Pending"
                   }
                 ]
               }
            ]
         },
         "then": {
            "effect": "deny"
         }
      }
   }
}

с параметрами:

{
   "properties": {
      "displayName": "Enforce tag and its value on resource groups",
      "description": "Enforces a required tag and its value on resource groups.",
      "mode": "All",
      "parameters": {
         "tagName": {
            "type": "String",
            "metadata": {
               "description": "Name of the tag, such as costCenter"
            }
         },
         "tagValue1": {
            "type": "String",
            "metadata": {
               "description": "Value of the tag, such as production"
            }
         },
         "tagValue2": {
            "type": "String",
            "metadata": {
               "description": "Value of the tag, such as testing"
            }
         },
         "tagValue3": {
            "type": "String",
            "metadata": {
               "description": "Value of the tag, such as pending"
            }
         }
      },
      "policyRule": {
         "if": {
            "allOf": [
               {
                  "field": "type",
                  "equals": "Microsoft.Resources/subscriptions/resourceGroups"
               },
               {
                 "anyOf" : [
                 {
                   "field": "[concat('tags[',parameters('tagName'), ']')]",
                   "notEquals": "[parameters('tagValue1')]"
                 },
                 {
                   "field": "[concat('tags[',parameters('tagName'), ']')]",
                   "notEquals": "[parameters('tagValue2')]"
                 },
                 {
                   "field": "[concat('tags[',parameters('tagName'), ']')]",
                   "notEquals": "[parameters('tagValue3')]"
                 }
               ]
              }
            ]
         },
         "then": {
            "effect": "deny"
         }
      }
   }
}

Если вы создаете политику из портала Azure, вам не нужно копировать displayName и description внутри properties:

enter image description here

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