Modyfikowanie efektu definicji usługi Azure Policy

Efekt jest używany do dodawania modify , aktualizowania lub usuwania właściwości lub tagów w subskrypcji lub zasobie podczas tworzenia lub aktualizowania. Typowym przykładem jest aktualizowanie tagów zasobów, takich jak costCenter. Istniejące niezgodne zasoby można skorygować za pomocą zadania korygowania. Pojedyncza reguła Modyfikuj może mieć dowolną liczbę operacji. Przypisania zasad z ustawionym efektem jako Modyfikuj wymagają tożsamości zarządzanej do korygowania.

Efekt modify obsługuje następujące operacje:

  • Dodawanie, zastępowanie lub usuwanie tagów zasobów. W przypadku tagów zasady Modyfikowanie powinny mieć ustawiony indexed tryb, chyba że zasób docelowy jest grupą zasobów.
  • Dodaj lub zastąp wartość typu tożsamości zarządzanej (identity.type) maszyn wirtualnych i zestawów skalowania maszyn wirtualnych. Można modyfikować identity.type tylko dla maszyn wirtualnych lub zestawów skalowania maszyn wirtualnych.
  • Dodaj lub zastąp wartości niektórych aliasów.
    • Użyj programu Get-AzPolicyAlias | Select-Object -ExpandProperty 'Aliases' | Where-Object { $_.DefaultMetadata.Attributes -eq 'Modifiable' } Azure PowerShell w wersji 4.6.0 lub nowszej, aby uzyskać listę aliasów, których można używać z modifyprogramem .

Ważne

Jeśli zarządzasz tagami, zaleca się użycie opcji Modyfikuj zamiast dołączania jako Modyfikuj zapewnia więcej typów operacji i możliwość korygowania istniejących zasobów. Jednak funkcja Append jest zalecana, jeśli nie możesz utworzyć tożsamości zarządzanej lub opcja Modyfikuj nie obsługuje jeszcze aliasu dla właściwości zasobu.

Modyfikowanie oceny

Zmodyfikuj ocenę przed przetworzeniem żądania przez dostawcę zasobów podczas tworzenia lub aktualizowania zasobu. Operacje modify są stosowane do zawartości żądania po if spełnieniu warunku reguły zasad. Każda modify operacja może określać warunek, który określa, kiedy jest stosowany. Operacje z ocenami warunków fałszywych są pomijane.

Po określeniu aliasu więcej kontroli jest wykonywanych, aby upewnić się, że modify operacja nie zmienia zawartości żądania w sposób, który powoduje odrzucenie go przez dostawcę zasobów:

  • Właściwość mapowania aliasu na jest oznaczona jako Modyfikowalna w wersji interfejsu API żądania.
  • Typ tokenu modify w operacji jest zgodny z oczekiwanym typem tokenu dla właściwości w wersji interfejsu API żądania.

Jeśli którykolwiek z tych testów zakończy się niepowodzeniem, ocena zasad powróci do określonego conflictEffectelementu .

Ważne

Zaleca się modyfikowanie definicji zawierających aliasy, które używają efektu konfliktu inspekcji, aby uniknąć niepowodzeń żądań przy użyciu wersji interfejsu API, w których właściwość mapowana nie jest "modyfikowalna". Jeśli ten sam alias działa inaczej między wersjami interfejsu API, operacje modyfikowania warunkowego mogą służyć do określenia operacji używanej dla każdej wersji interfejsu modify API.

Gdy definicja zasad używająca modify efektu jest uruchamiana w ramach cyklu oceny, nie wprowadza zmian w już istniejących zasobach. Zamiast tego oznacza każdy zasób spełniający if warunek jako niezgodny.

Modyfikowanie właściwości

Właściwość detailsmodify efektu ma wszystkie właściwości podrzędne, które definiują uprawnienia wymagane do korygowania oraz operations używane do dodawania, aktualizowania lub usuwania wartości tagów.

  • roleDefinitionIds (wymagane)
    • Ta właściwość musi zawierać tablicę ciągów pasujących do identyfikatora roli kontroli dostępu opartej na rolach dostępnego dla subskrypcji. Aby uzyskać więcej informacji, zobacz Korygowanie — konfigurowanie definicji zasad.
    • Zdefiniowana rola musi zawierać wszystkie operacje przyznane roli Współautor .
  • conflictEffect (opcjonalnie)
    • Określa definicję zasad "wins", jeśli więcej niż jedna definicja zasad modyfikuje tę samą właściwość lub gdy modify operacja nie działa na określonym aliasie.
      • W przypadku nowych lub zaktualizowanych zasobów pierwszeństwo ma definicja zasad z odmową. Definicje zasad z inspekcją pomijają wszystkie operations. Jeśli co najmniej jedna definicja zasad ma wpływ na odmowę, żądanie zostanie odrzucone jako konflikt. Jeśli wszystkie definicje zasad mają inspekcję, żadne z operations definicji zasad powodujących konflikt nie są przetwarzane.
      • W przypadku istniejących zasobów, jeśli więcej niż jedna definicja zasad ma efekt odmowy, stan zgodności to Konflikt. Jeśli co najmniej jedna definicja zasad ma efekt odmowy, każde przypisanie zwraca stan zgodności Niezgodne.
    • Dostępne wartości: inspekcja, odmowa, wyłączone.
    • Wartość domyślna to odmowa.
  • operations (wymagane)
    • Tablica wszystkich operacji tagów, które mają zostać ukończone na odpowiednich zasobach.
    • Właściwości:
      • operation (wymagane)
        • Definiuje akcję do wykonania dla pasującego zasobu. Opcje to: addOrReplace, Add, Remove. Funkcja Add zachowuje się podobnie do efektu dołączania.
      • field (wymagane)
        • Tag do dodawania, zastępowania lub usuwania. Nazwy tagów muszą być zgodne z tą samą konwencją nazewnictwa dla innych pól.
      • value (opcjonalnie)
        • Wartość, na która ma być ustawiony tag.
        • Ta właściwość jest wymagana, jeśli operation jest addOrReplace lub Add.
      • condition (opcjonalnie)
        • Ciąg zawierający wyrażenie języka usługi Azure Policy z funkcjami zasad, które oblicza wartość true lub false.
        • Nie obsługuje następujących funkcji zasad: field(), resourceGroup(), subscription().

Modyfikowanie operacji

Tablica operations właściwości umożliwia zmianę kilku tagów na różne sposoby z jednej definicji zasad. Każda operacja składa się z operationwłaściwości , fieldi value . Określa operation , jakie zadanie korygowania wykonuje w tagach, field określa, który tag jest zmieniany, i value definiuje nowe ustawienie dla tego tagu. W poniższym przykładzie wprowadzono następujące zmiany tagu:

  • environment Ustawia tag na "Test", nawet jeśli już istnieje z inną wartością.
  • Usuwa tag TempResource.
  • Dept Ustawia tag na parametr zasad DeptName skonfigurowany w przypisaniu zasad.
"details": {
  ...
  "operations": [
    {
      "operation": "addOrReplace",
      "field": "tags['environment']",
      "value": "Test"
    },
    {
      "operation": "Remove",
      "field": "tags['TempResource']",
    },
    {
      "operation": "addOrReplace",
      "field": "tags['Dept']",
      "value": "[parameters('DeptName')]"
    }
  ]
}

Właściwość operation ma następujące opcje:

Działanie opis
addOrReplace Dodaje zdefiniowaną właściwość lub tag i wartość do zasobu, nawet jeśli właściwość lub tag już istnieje z inną wartością.
add Dodaje zdefiniowaną właściwość lub tag i wartość do zasobu.
remove Usuwa zdefiniowaną właściwość lub tag z zasobu.

Modyfikowanie przykładów

Przykład 1: Dodaj environment tag i zastąp istniejące environment tagi ciągiem "Test":

"then": {
  "effect": "modify",
  "details": {
    "roleDefinitionIds": [
      "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
    ],
    "operations": [
      {
        "operation": "addOrReplace",
        "field": "tags['environment']",
        "value": "Test"
      }
    ]
  }
}

Przykład 2: Usuń env tag i dodaj environment tag lub zastąp istniejące environment tagi wartością sparametryzowaną:

"then": {
  "effect": "modify",
  "details": {
    "roleDefinitionIds": [
      "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
    ],
    "conflictEffect": "deny",
    "operations": [
      {
        "operation": "Remove",
        "field": "tags['env']"
      },
      {
        "operation": "addOrReplace",
        "field": "tags['environment']",
        "value": "[parameters('tagValue')]"
      }
    ]
  }
}

Przykład 3: Upewnij się, że konto magazynu nie zezwala na publiczny dostęp do obiektu blob, modify operacja jest stosowana tylko podczas oceniania żądań przy użyciu wersji interfejsu API nowszej lub równej 2019-04-01:

"then": {
  "effect": "modify",
  "details": {
    "roleDefinitionIds": [
      "/providers/microsoft.authorization/roleDefinitions/17d1049b-9a84-46fb-8f53-869881c3d3ab"
    ],
    "conflictEffect": "audit",
    "operations": [
      {
        "condition": "[greaterOrEquals(requestContext().apiVersion, '2019-04-01')]",
        "operation": "addOrReplace",
        "field": "Microsoft.Storage/storageAccounts/allowBlobPublicAccess",
        "value": false
      }
    ]
  }
}

Następne kroki