Structuurparameters voor Azure Policy-definities

Parameters helpen uw beleidsbeheer te vereenvoudigen door het aantal beleidsdefinities te verminderen. U kunt parameters zien zoals de velden in een formulier: name, address, , citystate. Deze parameters blijven altijd hetzelfde, maar hun waarden veranderen op basis van het afzonderlijke invullen van het formulier. Parameters werken op dezelfde manier bij het bouwen van een beleid. Door parameters in een beleidsdefinitie op te slaan, kunt u dat beleid opnieuw gebruiken voor verschillende scenario's met verschillende waarden.

Parameters toevoegen of verwijderen

Parameters kunnen worden toegevoegd aan een bestaande en toegewezen definitie. De nieuwe parameter moet de defaultValue eigenschap bevatten. Deze eigenschap voorkomt dat bestaande toewijzingen van het beleid of initiatief indirect ongeldig worden gemaakt.

Parameters kunnen niet worden verwijderd uit een beleidsdefinitie omdat er mogelijk een toewijzing is waarmee de parameterwaarde wordt ingesteld en die verwijzing wordt verbroken. Sommige ingebouwde beleidsdefinities verwijderen parameters met behulp van metagegevens "deprecated": true, waardoor de parameter wordt verborgen bij het toewijzen van de definitie in Azure Portal. Hoewel deze methode niet wordt ondersteund voor aangepaste beleidsdefinities, is een andere optie het dupliceren en maken van een nieuwe aangepaste beleidsdefinitie zonder de parameter.

Parametereigenschappen

Een parameter gebruikt de volgende eigenschappen in een beleidsdefinitie:

  • name: De naam van de parameter. Wordt gebruikt door de parameters implementatiefunctie binnen de beleidsregel. Zie voor meer informatie het gebruik van een parameterwaarde.
  • type: bepaalt of de parameter een string, , array, objectboolean, integer, , , of dateTimefloat.
  • metadata: Definieert subproperties die voornamelijk worden gebruikt door Azure Portal om gebruiksvriendelijke informatie weer te geven:
    • description: De uitleg van waarvoor de parameter wordt gebruikt. Kan worden gebruikt om voorbeelden van acceptabele waarden te bieden.
    • displayName: De beschrijvende naam die wordt weergegeven in de portal voor de parameter.
    • strongType: (Optioneel) Wordt gebruikt bij het toewijzen van de beleidsdefinitie via de portal. Biedt een contextbewuste lijst. Zie strongType voor meer informatie.
    • assignPermissions: (Optioneel) Stel deze optie in als waar om Azure Portal roltoewijzingen te laten maken tijdens beleidstoewijzing. Deze eigenschap is handig als u machtigingen wilt toewijzen buiten het toewijzingsbereik. Er is één roltoewijzing per roldefinitie in het beleid (of per roldefinitie in alle beleidsregels van het initiatief). De parameterwaarde moet een geldige resource of een geldig bereik zijn.
    • deprecated: Een booleaanse vlag om aan te geven of een parameter is afgeschaft in een ingebouwde definitie.
  • defaultValue: (Optioneel) Stelt de waarde van de parameter in een toewijzing in als er geen waarde wordt opgegeven. Vereist bij het bijwerken van een bestaande beleidsdefinitie die is toegewezen. Voor parameters van het type oject moet de waarde overeenkomen met het juiste schema.
  • allowedValues: (Optioneel) Biedt een matrix met waarden die de parameter accepteert tijdens de toewijzing.
    • Hoofdlettergevoeligheid: toegestane waardevergelijkingen zijn hoofdlettergevoelig bij het toewijzen van een beleid, wat betekent dat de geselecteerde parameterwaarden in de toewijzing moeten overeenkomen met het hoofdlettergebruik van waarden in de allowedValues matrix in de definitie. Zodra de waarden voor de toewijzing zijn geselecteerd, kan de evaluatie van tekenreeksvergelijkingen echter niet hoofdlettergevoelig zijn, afhankelijk van de gebruikte voorwaarde . Als de parameter bijvoorbeeld opgeeft Dev als een toegestane tagwaarde in een toewijzing en deze waarde wordt vergeleken met een invoertekenreeks met behulp van de equals voorwaarde, evalueert Azure Policy later een tagwaarde van dev als een overeenkomst, ook al is deze kleine letters omdat notEquals deze niet hoofdlettergevoelig is.
    • Voor objecttypeparameters moeten de waarden overeenkomen met het juiste schema.
  • schema: (Optioneel) Biedt validatie van parameterinvoer tijdens de toewijzing met behulp van een zelfgedefinieerde JSON-schema. Deze eigenschap wordt alleen ondersteund voor objecttypeparameters en volgt de Json.NET Schema 2019-09-implementatie. U vindt meer informatie over het gebruik van schema's op https://json-schema.org/ en het testen van conceptschema's op https://www.jsonschemavalidator.net/.

Voorbeeldparameters

Voorbeeld 1

U kunt bijvoorbeeld een beleidsdefinitie definiëren om de locaties te beperken waar resources kunnen worden geïmplementeerd. Een parameter voor die beleidsdefinitie kan worden allowedLocations gebruikt door elke toewijzing van de beleidsdefinitie om de geaccepteerde waarden te beperken. Het gebruik van biedt een verbeterde ervaring bij het voltooien van strongType de toewijzing via de 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"
    ]
  }
}

Een voorbeeldinvoer voor deze parameter van het matrixtype (zonder strongType) tijdens de toewijzing kan zijn ["westus", "eastus2"].

Voorbeeld 2

In een geavanceerder scenario kunt u een beleid definiëren waarvoor Kubernetes-clusterpods opgegeven labels moeten gebruiken. Een parameter voor die beleidsdefinitie kan worden labelSelector gebruikt door elke toewijzing van de beleidsdefinitie om Kubernetes-resources in kwestie op te geven op basis van labelsleutels en -waarden:

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

Een voorbeeldinvoer voor deze objecttypeparameter tijdens de toewijzingstijd heeft de JSON-indeling, gevalideerd door het opgegeven schema en kan het volgende zijn:

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

Een parameterwaarde gebruiken

In de beleidsregel verwijst u naar parameters met de volgende parameters functiesyntaxis:

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

Dit voorbeeld verwijst naar de allowedLocations parameter die is gedemonstreerd in parametereigenschappen.

strongType

Binnen de metadata eigenschap kunt strongType u een lijst met opties met meerdere selecties opgeven in Azure Portal. strongType kan een ondersteund resourcetype of een toegestane waarde zijn. Gebruik Get-AzResourceProvider om te bepalen of een resourcetype geldig is voorstrongType. De indeling voor een resourcetypestrongType is <Resource Provider>/<Resource Type>. Bijvoorbeeld: Microsoft.Network/virtualNetworks/subnets.

Sommige resourcetypen die niet worden geretourneerd door Get-AzResourceProvider , worden ondersteund. Deze typen zijn:

  • Microsoft.RecoveryServices/vaults/backupPolicies

De toegestane waarden strongType voor het niet-resourcetype zijn:

  • location
  • resourceTypes
  • storageSkus
  • vmSKUs
  • existingResourceGroups

Volgende stappen