Definitionsstrukturparametrar för Azure Policy

Parametrar underlättar hanteringen av principer genom att minska antalet principdefinitioner. Tänk på parametrar som fälten i ett formulär: name, address, city, state. Dessa parametrar förblir alltid desamma, men deras värden ändras baserat på att individen fyller i formuläret. Parametrar fungerar på samma sätt när du skapar principer. Genom att inkludera parametrar i en principdefinition kan du återanvända principen för olika scenarier med hjälp av olika värden.

Lägga till eller ta bort parametrar

Parametrar kan läggas till i en befintlig och tilldelad definition. Den nya parametern måste innehålla egenskapen defaultValue . Den här egenskapen förhindrar att befintliga tilldelningar av principen eller initiativet indirekt blir ogiltiga.

Det går inte att ta bort parametrar från en principdefinition eftersom det kan finnas en tilldelning som anger parametervärdet och referensen skulle brytas. Vissa inbyggda principdefinitioner inaktuella parametrar med metadata "deprecated": true, vilket döljer parametern när definitionen tilldelas i Azure-portalen. Den här metoden stöds inte för anpassade principdefinitioner, men ett annat alternativ är att duplicera och skapa en ny anpassad principdefinition utan parametern.

Parameteregenskaper

En parameter använder följande egenskaper i en principdefinition:

  • name: Namnet på parametern. Används av distributionsfunktionen parameters i principregeln. Mer information finns i använda ett parametervärde.
  • type: Avgör om parametern är en string, array, object, boolean, integer, float, eller dateTime.
  • metadata: Definierar underegenskaper som främst används av Azure-portalen för att visa användarvänlig information:
    • description: Förklaringen av vad parametern används till. Kan användas för att ge exempel på godtagbara värden.
    • displayName: Det egna namnet som visas i portalen för parametern.
    • strongType: (Valfritt) Används när du tilldelar principdefinitionen via portalen. Innehåller en sammanhangsmedveten lista. Mer information finns i strongType.
    • assignPermissions: (Valfritt) Ange som sant så att Azure-portalen skapar rolltilldelningar under principtilldelningen. Den här egenskapen är användbar om du vill tilldela behörigheter utanför tilldelningsomfånget. Det finns en rolltilldelning per rolldefinition i principen (eller per rolldefinition i alla initiativprinciper). Parametervärdet måste vara en giltig resurs eller ett giltigt omfång.
    • deprecated: En boolesk flagga som anger om en parameter är inaktuell i en inbyggd definition.
  • defaultValue: (Valfritt) Anger värdet för parametern i en tilldelning om inget värde anges. Krävs vid uppdatering av en befintlig principdefinition som har tilldelats. För oject-type-parametrar måste värdet matcha lämpligt schema.
  • allowedValues: (Valfritt) Tillhandahåller en matris med värden som parametern accepterar under tilldelningen.
    • Skiftlägeskänslighet: Tillåtna värdejämförelser är skiftlägeskänsliga när du tilldelar en princip, vilket innebär att de valda parametervärdena i tilldelningen måste matcha höljet för värden i matrisen allowedValues i definitionen. Men när värden har valts för tilldelningen kan utvärderingen av strängjämförelser vara skiftlägesokänslig beroende på vilket villkor som används. Om parametern till exempel anger Dev som ett tillåtet taggvärde i en tilldelning, och det här värdet jämförs med en indatasträng med villkoret equals , utvärderar Azure Policy senare ett taggvärde dev för som en matchning även om det är gemener eftersom notEquals är skiftlägesokänsligt.
    • För parametrar av objekttyp måste värdena matcha lämpligt schema.
  • schema: (Valfritt) Ger validering av parameterindata under tilldelningen med hjälp av ett självdefinierat JSON-schema. Den här egenskapen stöds endast för objekttypsparametrar och följer implementeringen Json.NET Schema 2019-09. Du kan lära dig mer om att använda scheman på https://json-schema.org/ och testa utkastscheman på https://www.jsonschemavalidator.net/.

Exempelparametrar

Exempel 1

Du kan till exempel definiera en principdefinition för att begränsa de platser där resurser kan distribueras. En parameter för den principdefinitionen kan användas allowedLocations av varje tilldelning av principdefinitionen för att begränsa de godkända värdena. Användningen av strongType ger en förbättrad upplevelse när du slutför tilldelningen via portalen:

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

Ett exempel på indata för den här parametern av matristyp (utan strongType) vid tilldelningstiden kan vara ["westus", "eastus2"].

Exempel 2

I ett mer avancerat scenario kan du definiera en princip som kräver att Kubernetes-klusterpoddar använder angivna etiketter. En parameter för den principdefinitionen kan användas labelSelector av varje tilldelning av principdefinitionen för att ange Kubernetes-resurser i fråga baserat på etikettnycklar och -värden:

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

Ett exempel på indata för den här parametern av objekttyp vid tilldelningstidpunkt skulle vara i JSON-format, verifierat av det angivna schemat och kan vara:

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

Använda ett parametervärde

I principregeln refererar du till parametrar med följande parameters funktionssyntax:

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

Det här exemplet refererar till parametern allowedLocations som demonstrerades i parameteregenskaper.

strongType

I egenskapen metadata kan du använda strongType för att ange en flervalslista med alternativ i Azure-portalen. strongTypekan vara en resurstyp som stöds eller ett tillåtet värde. Om du vill avgöra om en resurstyp är giltig för strongTypeanvänder du Get-AzResourceProvider. Formatet för en resurstypstrongType är <Resource Provider>/<Resource Type>. Exempel: Microsoft.Network/virtualNetworks/subnets

Vissa resurstyper som inte returneras av Get-AzResourceProvider stöds. Dessa typer är:

  • Microsoft.RecoveryServices/vaults/backupPolicies

De icke-resurstyps tillåtna värdena för strongType är:

  • location
  • resourceTypes
  • storageSkus
  • vmSKUs
  • existingResourceGroups

Nästa steg