Parametry struktury definicji usługi Azure Policy

Parametry ułatwiają zarządzanie zasadami przez zredukowanie liczby definicji zasad. Pomyśl o parametrach, takich jak pola w formularzu: name, , addresscity, state. Te parametry zawsze pozostają takie same, ale ich wartości zmieniają się na podstawie poszczególnych wypełniania formularza. Parametry działają w taki sam sposób, kiedy tworzysz zasady. Uwzględniając parametry w definicji zasad, można ponownie użyć tych samych zasad w różnych scenariuszach, stosując inne wartości.

Dodawanie lub usuwanie parametrów

Parametry można dodać do istniejącej i przypisanej definicji. Nowy parametr musi zawierać defaultValue właściwość . Ta właściwość uniemożliwia pośrednie nieprawidłowe przypisanie istniejących przypisań zasad lub inicjatywy.

Nie można usunąć parametrów z definicji zasad, ponieważ może istnieć przypisanie, które ustawia wartość parametru, a odwołanie zostanie przerwane. Niektóre wbudowane definicje zasad przestarzałe parametry przy użyciu metadanych "deprecated": true, które ukrywa parametr podczas przypisywania definicji w witrynie Azure Portal. Chociaż ta metoda nie jest obsługiwana w przypadku niestandardowych definicji zasad, inną opcją jest zduplikowanie i utworzenie nowej niestandardowej definicji zasad bez parametru .

Właściwości parametru

Parametr używa następujących właściwości w definicji zasad:

  • name: nazwa parametru. Używane przez parameters funkcję wdrażania w regule zasad. Aby uzyskać więcej informacji, zobacz używanie wartości parametru.
  • type: określa, czy parametr ma stringwartość , , array, objectboolean, integer, floatlub dateTime.
  • metadata: Definiuje właściwości podrzędne używane głównie przez witrynę Azure Portal do wyświetlania przyjaznych dla użytkownika informacji:
    • description: wyjaśnienie, dla którego parametru jest używany. Może służyć do podawania przykładów dopuszczalnych wartości.
    • displayName: przyjazna nazwa wyświetlana w portalu dla parametru .
    • strongType: (Opcjonalnie) Używane podczas przypisywania definicji zasad za pośrednictwem portalu. Udostępnia listę z rozpoznawaniem kontekstu. Aby uzyskać więcej informacji, zobacz strongType.
    • assignPermissions: (Opcjonalnie) Ustaw wartość true , aby witryna Azure Portal utworzyła przypisania ról podczas przypisywania zasad. Ta właściwość jest przydatna w przypadku, gdy chcesz przypisać uprawnienia poza zakresem przypisania. W zasadach istnieje jedno przypisanie roli na definicję roli (lub definicję roli we wszystkich zasadach inicjatywy). Wartość parametru musi być prawidłowym zasobem lub zakresem.
    • deprecated: flaga logiczna wskazująca, czy parametr jest przestarzały w wbudowanej definicji.
  • defaultValue: (Opcjonalnie) Ustawia wartość parametru w przypisaniu, jeśli żadna wartość nie jest podana. Wymagane podczas aktualizowania przypisanej istniejącej definicji zasad. W przypadku parametrów typu oject wartość musi być zgodna z odpowiednim schematem.
  • allowedValues: (Opcjonalnie) Udostępnia tablicę wartości akceptowanych przez parametr podczas przypisywania.
    • Ważność wielkości liter: dozwolone porównania wartości są uwzględniane w przypadku przypisywania zasad, co oznacza, że wybrane wartości parametrów w przypisaniu muszą być zgodne z wielkością liter w allowedValues tablicy w definicji. Jednak po wybraniu wartości dla przypisania ocena porównań ciągów może być bez uwzględniania wielkości liter w zależności od użytego warunku . Jeśli na przykład parametr określa Dev jako dozwoloną wartość tagu w przypisaniu, a ta wartość jest porównywana z ciągiem wejściowym przy użyciu equals warunku, usługa Azure Policy później oceni wartość dev tagu jako dopasowanie, mimo że jest to małe litery, ponieważ notEquals jest bez uwzględniania wielkości liter.
    • W przypadku parametrów typu obiektu wartości muszą być zgodne z odpowiednim schematem.
  • schema: (Opcjonalnie) Zapewnia walidację danych wejściowych parametrów podczas przypisywania przy użyciu schematu JSON zdefiniowanego samodzielnie. Ta właściwość jest obsługiwana tylko dla parametrów typu obiektu i jest zgodna z implementacją schematu Json.NET 2019-09. Aby dowiedzieć się więcej na temat używania schematów, zobacz https://json-schema.org/ i przetestuj schematy robocze pod adresem https://www.jsonschemavalidator.net/.

Przykładowe parametry

Przykład 1

Na przykład można zdefiniować definicję zasad, aby ograniczyć lokalizacje, w których można wdrożyć zasoby. Parametr dla tej definicji zasad może być allowedLocations używany przez każde przypisanie definicji zasad w celu ograniczenia akceptowanych wartości. Korzystanie z strongType funkcji zapewnia ulepszone środowisko podczas kończenia przypisywania za pośrednictwem portalu:

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

Przykładowe dane wejściowe dla tego parametru typu tablicy (bez strongType) w czasie przypisania mogą mieć wartość ["westus", "eastus2"].

Przykład 2

W bardziej zaawansowanym scenariuszu można zdefiniować zasady, które wymagają zasobników klastra Kubernetes do używania określonych etykiet. Parametr dla tej definicji zasad może być labelSelector używany przez każde przypisanie definicji zasad w celu określenia zasobów Kubernetes, których dotyczy pytanie na podstawie kluczy etykiet i wartości:

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

Przykładowe dane wejściowe dla tego parametru typu obiektu w czasie przypisania będą w formacie JSON, zweryfikowane przez określony schemat i mogą być następujące:

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

Używanie wartości parametru

W regule zasad odwołujesz się do parametrów z następującą parameters składnią funkcji:

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

Ten przykład odwołuje się do parametru allowedLocations pokazanego we właściwościach parametru.

strongType

W ramach metadata właściwości można strongType podać listę opcji wielokrotnego wyboru w witrynie Azure Portal. strongType może być obsługiwanym typem zasobu lub dozwoloną wartością. Aby określić, czy typ zasobu jest prawidłowy dla strongTypeelementu , użyj polecenia Get-AzResourceProvider. Format typustrongType zasobu to <Resource Provider>/<Resource Type>. Na przykład Microsoft.Network/virtualNetworks/subnets.

Obsługiwane są niektóre typy zasobów, które nie są zwracane przez Get-AzResourceProvider program . Są to następujące typy:

  • Microsoft.RecoveryServices/vaults/backupPolicies

Niedozwolone wartości strongType typu zasobu to:

  • location
  • resourceTypes
  • storageSkus
  • vmSKUs
  • existingResourceGroups

Następne kroki