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ć zmodify
programem .
- Użyj programu
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 conflictEffect
elementu .
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ącyif
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 przypadkudeleteRetentionPolicy
, 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 zoperations
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.
- W przypadku nowych lub zaktualizowanych zasobów pierwszeństwo ma definicja zasad z odmową. Definicje zasad z inspekcją pomijają wszystkie
- Dostępne wartości: inspekcja, odmowa, wyłączone.
- Wartość domyślna to odmowa.
- Określa definicję zasad "wins", jeśli więcej niż jedna definicja zasad modyfikuje tę samą właściwość lub gdy
operations
(wymagane)- Tablica wszystkich operacji tagów, które mają zostać ukończone na odpowiednich zasobach.
- Właściwości:
operation
(wymagane)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)
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 operation
właściwości , field
i 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
- Zapoznaj się z przykładami w przykładach usługi Azure Policy.
- Przejrzyj temat Struktura definicji zasad Azure Policy.
- Dowiedz się, jak programowo tworzyć zasady.
- Dowiedz się, jak uzyskać dane zgodności.
- Dowiedz się, jak korygować niezgodne zasoby.
- Przejrzyj grupy zarządzania platformy Azure.