Struktur von Azure Policy-Definitionsparameter

Parameter vereinfachen Ihre Richtlinienverwaltung, indem sie die Anzahl von Richtliniendefinitionen reduzieren. Diese Parameter verhalten sich wie Felder in einem Formular: name, address, city, state. Diese Parameter bleiben immer gleich, allerdings ändern sich ihre Werte auf Grundlage der Einträge des Einzelnen. Parameter funktionieren beim Erstellen von Richtlinien genauso. Sie können die Richtlinie für verschiedene Szenarios wiederverwenden, indem Sie Parameter in eine Richtliniendefinition einbeziehen und verschiedene Werte verwenden.

Hinzufügen oder Entfernen von Parametern

Parameter können einer vorhandenen und zugewiesenen Definition hinzugefügt werden. Der neue Parameter muss die defaultValue-Eigenschaft enthalten. Diese Eigenschaft verhindert, dass vorhandene Zuweisungen der Richtlinie oder Initiative indirekt als ungültig erklärt werden.

Parameter können nicht aus einer Richtliniendefinition entfernt werden, da möglicherweise eine Zuweisung vorhanden ist, die den Parameterwert festlegt, und dieser Verweis dann nicht mehr funktionieren würde. Einige integrierte Richtliniendefinitionen weisen veraltete Parameter auf, welche die Metadaten "deprecated": true verwenden, wodurch der Parameter beim Zuweisen der Definition im Azure-Portal ausgeblendet wird. Benutzerdefinierte Richtliniendefinitionen werden für diese Methode zwar nicht unterstützt, eine andere Option besteht jedoch darin, eine neue benutzerdefinierte Richtliniendefinition ohne den Parameter zu duplizieren und zu erstellen.

Parametereigenschaften

Ein Parameter verwendet die folgenden Eigenschaften in einer Richtliniendefinition:

  • name: Der Name des Parameters. Wird in der Richtlinienregel von der Bereitstellungsfunktion parameters verwendet. Weitere Informationen finden Sie unter Verwenden eines Parameterwerts.
  • type: Bestimmt, ob der Parameter ein string, array, object, boolean, integer, floatoder dateTime ist.
  • metadata: Definiert untergeordnete Eigenschaften, die hauptsächlich vom Azure-Portal verwendet werden, um benutzerfreundliche Informationen anzuzeigen:
    • description: Die Erläuterung des Zwecks des Parameters. Kann verwendet werden, um Beispiele zulässiger Werte bereitzustellen.
    • displayName: Der Anzeigename des Parameters im Portal.
    • strongType: (Optional) Wird verwendet, wenn die Richtliniendefinition über das Portal zugewiesen wird. Bietet eine kontextbezogene Liste. Weitere Informationen finden Sie unter strongType.
    • assignPermissions: (Optional) Legen Sie diesen Wert auf true fest, damit das Azure-Portal während der Richtlinienzuweisung Rollenzuweisungen erstellt. Diese Eigenschaft ist hilfreich, wenn Sie Berechtigungen außerhalb des Zuweisungsbereichs zuweisen möchten. Es gibt eine Rollenzuweisung pro Rollendefinition in der Richtlinie (oder pro Rollendefinition in allen Richtlinien der Initiative). Der Parameterwert muss eine gültige Ressource oder ein gültiger Bereich sein.
    • deprecated: Ein boolesches Flag, das angibt, ob ein Parameter in einer integrierten Definition veraltet ist.
  • defaultValue: (Optional) Legt den Wert des Parameters in einer Zuweisung fest, wenn kein Wert angegeben ist. Erforderlich, wenn eine vorhandene zugewiesene Richtliniendefinition aktualisiert wird. Für Objekttypparameter muss der Wert dem jeweiligen Schema entsprechen.
  • allowedValues: (Optional) Stellt ein Array von Werten bereit, die der Parameter bei der Zuweisung akzeptiert.
    • Groß-/Kleinschreibung: Bei der Zuweisung einer Richtlinie wird bei erlaubten Wertvergleichen zwischen Groß- und Kleinschreibung unterschieden. Dies bedeutet, dass die ausgewählten Parameterwerte in der Zuweisung mit der Groß-/Kleinschreibung von Werten im allowedValues-Array in der Definition übereinstimmen müssen. Sobald für die Zuweisung jedoch Werte ausgewählt wurden, kann die Auswertung von Zeichenfolgenvergleichen abhängig von der verwendeten Bedingung möglicherweise nicht zwischen Groß-/Kleinschreibung unterscheiden. Wenn der Parameter z. B. Dev als zulässigen Tagwert in einer Zuweisung angibt und dieser Wert unter Verwendung der equals-Bedingung mit einer Eingabezeichenfolge verglichen wird, würde Azure Policy später einen Tagwert von dev als Übereinstimmung auswerten, obwohl er kleingeschrieben ist, da notEquals die Groß-/Kleinschreibung nicht beachtet.
    • Für Objekttypparameter müssen die Werte dem jeweiligen Schema entsprechen.
  • schema: (Optional) Stellt die Überprüfung von Parametereingaben während der Zuordnung mithilfe eines selbst definierten JSON-Schemas bereit. Diese Eigenschaft wird nur für Objekttypparameter unterstützt und folgt der 2019-09-Implementierung des Json.NET-Schemas. Weitere Informationen zur Verwendung von Schemas finden Sie unter https://json-schema.org/. Das Testen von Schemas ist unter https://www.jsonschemavalidator.net/ möglich.

Beispielparameter

Beispiel 1

Beispielsweise können Sie eine Richtliniendefinition verwenden, um die Speicherorte einzuschränken, an denen Ressourcen bereitgestellt werden können. Ein Parameter für diese Richtliniendefinition kann allowedLocations sein und von jeder Zuordnung der Richtliniendefinition verwendet werden, um die akzeptierten Werte einzuschränken. Die Verwendung von strongType bietet erweiterte Möglichkeiten, wenn die Zuweisung über das Portal erfolgt:

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

Eine Beispieleingabe für diesen Arraytypparameter (ohne strongType) zur Zuordnungszeit kann ["westus", "eastus2"] sein.

Beispiel 2

In einem erweiterten Szenario können Sie eine Richtlinie definieren, die festlegt, dass Pods in Kubernetes-Clustern angegebene Bezeichnungen verwenden müssen. Ein Parameter für diese Richtliniendefinition könnte labelSelector sein und wird von jeder Zuweisung der Richtliniendefinition verwendet, um die jeweiligen Kubernetes-Ressourcen basierend auf Bezeichnungsschlüsseln und -werten anzugeben:

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

Eine Beispieleingabe für diesen Objekttypparameter zum Zuweisungszeitpunkt weist das JSON-Format auf, wird durch das angegebene Schema überprüft, und kann wie folgt aussehen:

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

Verwenden eines Parameterwerts

In der Richtlinienregel wird die folgende Syntax der Funktion parameters verwendet, um auf Parameter zu verweisen:

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

In diesem Beispiel wird auf den Parameter allowedLocations verwiesen, der unter Parametereigenschaften vorgestellt wurde.

strongType

Innerhalb der metadata-Eigenschaft können Sie mit strongType im Azure-Portal eine Liste der Optionen mit Mehrfachauswahl angeben. strongType kann ein unterstützter Ressourcentyp oder ein zulässiger Wert sein. Verwenden Sie Get-AzResourceProvider, um festzustellen, ob ein Ressourcentyp für strongType zulässig ist. Das Format für einen RessourcentypstrongType lautet <Resource Provider>/<Resource Type>. Beispiel: Microsoft.Network/virtualNetworks/subnets.

Einige Ressourcentypen, die nicht von Get-AzResourceProvider zurückgegeben werden, werden unterstützt. Diese Typen lauten wie folgt:

  • Microsoft.RecoveryServices/vaults/backupPolicies

Die zulässigen Werte, die nicht Ressourcentyp sind, für strongType sind:

  • location
  • resourceTypes
  • storageSkus
  • vmSKUs
  • existingResourceGroups

Nächste Schritte