Поделиться через


параметры структуры определения политики Azure

Параметры помогают упростить управление политиками за счет сокращения числа определений политик. Думайте о параметрах, таких как поля в форме: name, address, , citystate. Эти параметры всегда остаются неизменными, но их значения изменяются на основе отдельного заполнения формы. Точно так же параметры работают при создании политик. Добавив параметры в определение политики, вы сможете повторно использовать ее в различных сценариях, указывая разные значения.

Добавление или удаление параметров

Параметры могут быть добавлены в существующее и назначенное определение. Новый параметр должен включать defaultValue свойство. Это свойство предотвращает косвенную недействительность существующих назначений политики или инициативы.

Параметры не могут быть удалены из определения политики, так как может быть назначение, которое задает значение параметра, и эта ссылка будет нарушена. Некоторые встроенные определения политики помечают как устаревшие параметры с помощью метаданных "deprecated": true, которые скрывают параметр при назначении определения в портале Azure. Хотя этот метод не поддерживается для определений настраиваемых политик, другой вариант — дублировать и создавать новое определение настраиваемой политики без параметра.

Свойства параметра

Параметр использует следующие свойства в определении политики:

  • name: имя параметра. Используется функцией развертывания parameters в правиле политики. Дополнительные сведения см. в разделе об использовании значения параметра.
  • type: определяет, является ли параметр string, array, object, boolean, integer, float или dateTime.
  • metadata: Определяет вложенные свойства, которые в основном используются порталом Azure для отображения удобной для пользователя информации.
    • description: объяснение того, для чего используется параметр. Можно использовать для примеров допустимых значений.
    • displayName: дружелюбное имя, отображаемое на портале для параметра.
    • strongType: (Необязательно) Используется при назначении определения политики через портал. Предоставляет список с учетом контекста. См. дополнительные сведения в strongType.
    • assignPermissions: (Необязательно) Установите значение true, чтобы портал Azure создавал назначения ролей во время назначения политики. Это свойство полезно, если вы хотите назначить разрешения за пределами области назначения. Существует одно назначение ролей для определения роли в политике (или определение роли во всех политиках инициативы). Значение параметра должно быть допустимым ресурсом или областью.
    • deprecated: логический флаг, указывающий, является ли параметр устаревшим в встроенном определении.
  • defaultValue: (необязательно) задает значение параметра в назначении, если значение не задано. Это свойство необходимо при обновлении существующего назначенного определения политики. Для параметров типа объекта значение должно соответствовать соответствующей схеме.
  • allowedValues: (необязательно) Предоставляет массив значений, которые параметр принимает во время назначения.
    • Чувствительность к регистру: Допустимые сравнения значений чувствительны к регистру при назначении политики, что означает, что выбранные значения параметров в назначении должны соответствовать регистру значений в массиве allowedValues определения. Однако после выбора значений для назначения оценка сравнений строк может быть нечувствительной к регистру в зависимости от используемого условия . Например, если параметр указывает Dev в качестве допустимого значения тега в назначении, и это значение сравнивается с входной строкой с помощью equals условия, то Политика Azure позже будет оценивать значение тега dev как совпадение, даже если оно в строчных буквах, поскольку notEquals нечувствителен к регистру.
    • Для параметров типа объекта значения должны соответствовать соответствующей схеме.
  • schema: (необязательно) обеспечивает проверку входных данных параметров во время назначения с использованием самоопределяющейся схемы JSON. Это свойство поддерживается только для параметров объектного типа и соответствует реализации Json.NET Schema 2019-09. Вы можете просмотреть дополнительные сведения об использовании схем на сайте https://json-schema.org/ и протестировать черновые версии схем на сайте https://www.jsonschemavalidator.net/.

Примеры параметров

Пример 1

Например, можно создать определение политики, чтобы ограничить расположения, в которых могут развертываться ресурсы. Параметр для этого определения политики может быть allowedLocations и использоваться каждым назначением определения политики для ограничения принимаемых значений. Использование strongType обеспечивает улучшенный опыт при выполнении задания на портале:

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

Пример входных данных для этого параметра типа массива (без strongType) во время назначения может быть ["westus", "eastus2"].

Пример 2

В более сложном сценарии можно определить политику, которая требует, чтобы модули pod кластера Kubernetes использовали указанные метки. Параметр для этой политики labelSelector можно использовать в каждом случае назначения определения политики, чтобы указать соответствующие ресурсы Kubernetes на основе ключей и значений меток.

"parameters": {
  "labelSelector": {
    "type": "Object",
    "metadata": {
      "displayName": "Kubernetes label selector",
      "description": "Label query to select Kubernetes resources for policy evaluation. An empty label selector matches all Kubernetes resources."
    },
    "defaultValue": {},
    "schema": {
      "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all resources.",
      "type": "object",
      "properties": {
        "matchLabels": {
          "description": "matchLabels is a map of {key,value} pairs.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "minProperties": 1
        },
        "matchExpressions": {
          "description": "matchExpressions is a list of values, a key, and an operator.",
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "key": {
                "description": "key is the label key that the selector applies to.",
                "type": "string"
              },
              "operator": {
                "description": "operator represents a key's relationship to a set of values.",
                "type": "string",
                "enum": [
                  "In",
                  "NotIn",
                  "Exists",
                  "DoesNotExist"
                ]
              },
              "values": {
                "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty.",
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "key",
              "operator"
            ],
            "additionalProperties": false
          },
          "minItems": 1
        }
      },
      "additionalProperties": false
    }
  },
}

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

{
  "matchLabels": {
    "poolID": "abc123",
    "nodeGroup": "Group1",
    "region": "southcentralus"
  },
  "matchExpressions": [
    {
      "key": "name",
      "operator": "In",
      "values": [
        "payroll",
        "web"
      ]
    },
    {
      "key": "environment",
      "operator": "NotIn",
      "values": [
        "dev"
      ]
    }
  ]
}

Использование значения параметра

В правиле политики вы ссылаетесь на параметры с использованием следующего синтаксиса функции parameters.

{
  "field": "location",
  "in": "[parameters('allowedLocations')]"
}

Этот пример ссылается на allowedLocations параметр, который был показан в свойствах параметров.

strongType

В свойстве metadata можно использовать strongType для предоставления многократного выбора списка опций в портале Azure. strongType может быть поддерживаемым типом ресурса или допустимым значением. Чтобы определить, является ли тип ресурса допустимым для strongType, используйте Get-AzResourceProvider. Формат для типа ресурсаstrongType<Resource Provider>/<Resource Type>. Например, Microsoft.Network/virtualNetworks/subnets.

Некоторые типы ресурсов, не возвращаемые Get-AzResourceProvider, поддерживаются. Эти типы перечислены ниже.

  • Microsoft.RecoveryServices/vaults/backupPolicies

Допустимые значения, не относящиеся к типу ресурса, для strongType:

  • location
  • resourceTypes
  • storageSkus
  • vmSKUs
  • existingResourceGroups

Следующие шаги