Partilhar via


Parâmetros da estrutura de definição da Política do Azure

Os parâmetros ajudam a simplificar a gestão das políticas ao reduzirem o número de definições de política. Pense em parâmetros como os campos em um formulário: name, address, city, state. Esses parâmetros permanecem sempre os mesmos, mas seus valores mudam com base no preenchimento individual do formulário. Os parâmetros funcionam da mesma forma quando cria políticas. Ao incluir parâmetros numa definição de política, pode reutilizar essa política em diferentes cenários com outros valores.

Adicionando ou removendo parâmetros

Os parâmetros podem ser adicionados a uma definição existente e atribuída. O novo parâmetro deve incluir a defaultValue propriedade. Essa propriedade impede que atribuições existentes da política ou iniciativa sejam indiretamente invalidadas.

Os parâmetros não podem ser removidos de uma definição de política porque pode haver uma atribuição que define o valor do parâmetro e essa referência seria quebrada. Algumas definições de política internas depreciam parâmetros usando metadados "deprecated": true, que ocultam o parâmetro ao atribuir a definição no portal do Azure. Embora esse método não seja suportado para definições de política personalizadas, outra opção é duplicar e criar uma nova definição de política personalizada sem o parâmetro.

Propriedades do parâmetro

Um parâmetro usa as seguintes propriedades em uma definição de política:

  • name: O nome do seu parâmetro. Usado pela função de parameters implantação dentro da regra de política. Para obter mais informações, consulte o uso de um valor de parâmetro.
  • type: Determina se o parâmetro é um string, , , objectboolean, integer, float, ou dateTimearray.
  • metadata: Define subpropriedades usadas principalmente pelo portal do Azure para exibir informações amigáveis:
    • description: A explicação para que o parâmetro é usado. Pode ser usado para fornecer exemplos de valores aceitáveis.
    • displayName: O nome amigável mostrado no portal para o parâmetro.
    • strongType: (Opcional) Usado ao atribuir a definição de política através do portal. Fornece uma lista sensível ao contexto. Para obter mais informações, consulte strongType.
    • assignPermissions: (Opcional) Defina como true para que o portal do Azure crie atribuições de função durante a atribuição de políticas. Essa propriedade é útil caso você deseje atribuir permissões fora do escopo da atribuição. Há uma atribuição de função por definição de função na política (ou por definição de função em todas as políticas da iniciativa). O valor do parâmetro deve ser um recurso ou escopo válido.
    • deprecated: Um sinalizador booleano para indicar se um parâmetro foi preterido em uma definição interna.
  • defaultValue: (Opcional) Define o valor do parâmetro em uma atribuição se nenhum valor for dado. Necessário ao atualizar uma definição de política existente que é atribuída. Para parâmetros do tipo oject, o valor deve corresponder ao esquema apropriado.
  • allowedValues: (Opcional) Fornece uma matriz de valores que o parâmetro aceita durante a atribuição.
    • Diferenciação de maiúsculas e minúsculas: as comparações de valores permitidas diferenciam maiúsculas de minúsculas ao atribuir uma política, o que significa que os valores de parâmetro selecionados na atribuição devem corresponder ao invólucro de valores na allowedValues matriz na definição. No entanto, uma vez que os valores são selecionados para a atribuição, a avaliação das comparações de cadeia de caracteres pode não diferenciar maiúsculas de minúsculas, dependendo da condição usada. Por exemplo, se o parâmetro especificar Dev como um valor de marca permitido em uma atribuição e esse valor for comparado a uma cadeia de caracteres de entrada usando a condição, a Política do Azure avaliará posteriormente um valor de marca como uma correspondência, mesmo que seja minúsculo porque notEquals não diferencia maiúsculas equals de dev minúsculas.
    • Para parâmetros de tipo de objeto, os valores devem corresponder ao esquema apropriado.
  • schema: (Opcional) Fornece validação de entradas de parâmetros durante a atribuição usando um esquema JSON autodefinido. Esta propriedade só é suportada para parâmetros de tipo objeto e segue a implementação do esquema Json.NET 2019-09. Você pode saber mais sobre como usar esquemas em https://json-schema.org/ e testar esquemas de rascunho em https://www.jsonschemavalidator.net/.

Parâmetros da amostra

Exemplo 1

Como exemplo, você pode definir uma definição de política para limitar os locais onde os recursos podem ser implantados. Um parâmetro para essa definição de política pode ser allowedLocations usado por cada atribuição da definição de política para limitar os valores aceitos. O uso de strongType fornece uma experiência aprimorada ao concluir a tarefa através do portal:

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

Uma entrada de exemplo para esse parâmetro do tipo matriz (sem strongType) no momento da atribuição pode ser ["westus", "eastus2"].

Exemplo 2

Em um cenário mais avançado, você pode definir uma política que exija que os pods de cluster do Kubernetes usem rótulos especificados. Um parâmetro para essa definição de política pode ser labelSelector usado por cada atribuição da definição de política para especificar os recursos do Kubernetes em questão com base em chaves e valores de rótulo:

"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
    }
  },
}

Uma entrada de exemplo para esse parâmetro de tipo de objeto no momento da atribuição estaria no formato JSON, validado pelo esquema especificado e poderia ser:

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

Usando um valor de parâmetro

Na regra de política, você faz referência a parâmetros com a seguinte parameters sintaxe de função:

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

Esta amostra faz referência ao parâmetro que foi demonstrado nas propriedades dos allowedLocations parâmetros.

strongType

Dentro da metadata propriedade, você pode usar strongType para fornecer uma lista de opções de seleção múltipla no portal do Azure. strongTypepode ser um tipo de recurso suportado ou um valor permitido. Para determinar se um tipo de recurso é válido para strongType, use Get-AzResourceProvider. O formato de um tipo strongType de recurso é <Resource Provider>/<Resource Type>. Por exemplo, Microsoft.Network/virtualNetworks/subnets.

Alguns tipos de recursos não retornados por Get-AzResourceProvider são suportados. Esses tipos são:

  • Microsoft.RecoveryServices/vaults/backupPolicies

Os valores não permitidos do tipo de recurso são strongType :

  • location
  • resourceTypes
  • storageSkus
  • vmSKUs
  • existingResourceGroups

Próximos passos