Udostępnij za pośrednictwem


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. Istniejące niezgodne zasoby można również skorygować za pomocą zadania korygowania. Przypisania zasad z ustawionym efektem jako Modyfikuj wymagają tożsamości zarządzanej do korygowania. Typowym przykładem użycia modify efektu jest aktualizowanie tagów dla zasobów, takich jak "costCenter".

Istnieją pewne niuanse dotyczące zachowania modyfikacji właściwości zasobu. Dowiedz się więcej o scenariuszach pomijania modyfikacji.

modify Pojedyncza reguła może mieć dowolną liczbę operacji. Obsługiwane operacje to:

  • Dodawanie, zastępowanie lub usuwanie tagów zasobów. Można usuwać tylko tagi. 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.

Po określeniu aliasu wykonywana jest więcej kontroli, 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.

Pominięte modyfikacje

W niektórych przypadkach operacje modyfikowania są pomijane podczas oceny:

  • Istniejące zasoby: jeśli definicja zasad korzystająca z modify efektu jest uruchamiana w ramach cyklu oceny, nie wprowadza zmian w zasobach, które już istnieją. Zamiast tego oznacza każdy zasób spełniający if warunek jako niezgodny, dzięki czemu można je skorygować za pomocą zadania korygowania.
  • Nie dotyczy: jeśli warunek operacji w operations tablicy jest obliczany na wartość false, ta konkretna operacja jest pomijana.
  • Nie można modyfikować właściwości: jeśli alias określony dla operacji nie można modyfikować w wersji interfejsu API żądania, ocena używa efektu konfliktu. Jeśli efekt konfliktu zostanie ustawiony na odmowę, żądanie zostanie zablokowane. Jeśli efekt konfliktu został ustawiony na inspekcję, żądanie jest dozwolone, ale modify operacja jest pomijana.
  • Właściwość nie istnieje: jeśli właściwość nie istnieje w ładunku zasobu żądania, modyfikacja może zostać pominięta. W niektórych przypadkach właściwości modyfikowalne są zagnieżdżone w innych właściwościach i mają alias taki jak Microsoft.Storage/storageAccounts/blobServices/deleteRetentionPolicy.enabled. Jeśli właściwość "nadrzędna", w tym przypadku deleteRetentionPolicy, nie jest obecna w żądaniu, modyfikacja jest pomijana, ponieważ zakłada się, że ta właściwość zostanie pominięta celowo. W praktycznym przykładzie przejdź do sekcji Przykład właściwości, która nie istnieje.
  • Operacja tożsamości bez maszyny wirtualnej lub zestawu skalowania maszyn wirtualnych: jeśli operacja modyfikowania próbuje dodać lub zamienić identity.type pole na zasób inny niż maszyna wirtualna lub zestaw skalowania maszyn wirtualnych, ocena zasad jest całkowicie pomijana, więc modyfikacja nie jest wykonywana. W takim przypadku zasób jest uznawany za nie dotyczy zasad.

Przykład właściwości, która nie istnieje

Modyfikacja właściwości zasobu zależy od żądania interfejsu API i zaktualizowanego ładunku zasobu. Ładunek może zależeć od używanego klienta, takiego jak witryna Azure Portal, i innych czynników, takich jak dostawca zasobów.

Załóżmy, że stosujesz zasady modyfikujące tagi na maszynie wirtualnej. Za każdym razem, gdy maszyna wirtualna jest aktualizowana, na przykład podczas zmiany rozmiaru lub dysku, tagi są odpowiednio aktualizowane niezależnie od zawartości ładunku maszyny wirtualnej. Dzieje się tak, ponieważ tagi są niezależne od właściwości maszyny wirtualnej.

Jeśli jednak zastosujesz zasady modyfikujące właściwości na maszynie wirtualnej, modyfikacja zależy od ładunku zasobu. Jeśli spróbujesz zmodyfikować właściwości, które nie są uwzględnione w ładunku aktualizacji, modyfikacja nie zostanie podjęta. Na przykład może się to zdarzyć podczas stosowania poprawek assessmentMode właściwości maszyny wirtualnej (aliasu Microsoft.Compute/virtualMachines/osProfile.windowsConfiguration.patchSettings.assessmentMode). Właściwość jest "zagnieżdżona", więc jeśli jej właściwości nadrzędne nie są uwzględnione w żądaniu, zakłada się, że pominięcie jest zamierzone, a modyfikacja zostanie pominięta. Aby wprowadzić modyfikację, ładunek zasobu powinien zawierać ten kontekst.

Modyfikowanie właściwości

Właściwość details modify 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, Addi Remove.
        • Addzachowuje się podobnie do efektu dołączania.
        • Remove jest obsługiwana tylko w przypadku tagów zasobów.
      • 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 zdefiniowany tag z zasobu. Obsługiwane tylko w przypadku tagów.

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