Struktur von Azure Policy-DefinitionenAzure Policy definition structure

Definitionen von Ressourcenrichtlinien werden von Azure Policy verwendet, um Konventionen für Ressourcen festzulegen.Resource policy definitions are used by Azure Policy to establish conventions for resources. Jede Definition beschreibt Ressourcenkonformität und welche Maßnahme ergriffen werden soll, wenn eine Ressource nicht konform ist.Each definition describes resource compliance and what effect to take when a resource is non-compliant. Durch Definieren von Konventionen können Sie Kosten beeinflussen und Ihre Ressourcen einfacher verwalten.By defining conventions, you can control costs and more easily manage your resources. Sie können beispielsweise angeben, dass nur bestimmte Typen virtueller Computer zulässig sind.For example, you can specify that only certain types of virtual machines are allowed. Oder Sie können festlegen, dass alle Ressourcen ein bestimmtes Tag aufweisen.Or, you can require that all resources have a particular tag. Richtlinien werden von allen untergeordneten Ressourcen geerbt.Policies are inherited by all child resources. Wenn eine Richtlinie auf eine Ressourcengruppe angewendet wird, gilt sie für alle Ressourcen in dieser Ressourcengruppe.If a policy is applied to a resource group, it's applicable to all the resources in that resource group.

Das Richtliniendefinitionsschema finden Sie hier: https://schema.management.azure.com/schemas/2019-06-01/policyDefinition.jsonThe policy definition schema is found here: https://schema.management.azure.com/schemas/2019-06-01/policyDefinition.json

Eine Richtliniendefinition wird mithilfe von JSON erstellt.You use JSON to create a policy definition. Die Richtliniendefinition enthält Elemente für Folgendes:The policy definition contains elements for:

  • Modusmode
  • parametersparameters
  • Anzeigenamedisplay name
  • descriptiondescription
  • Richtlinienregelpolicy rule
    • Logische Auswertunglogical evaluation
    • Wirkungeffect

Die folgende JSON-Datei zeigt beispielsweise eine Richtlinie, die einschränkt, wo Ressourcen bereitgestellt werden:For example, the following JSON shows a policy that limits where resources are deployed:

{
    "properties": {
        "mode": "all",
        "parameters": {
            "allowedLocations": {
                "type": "array",
                "metadata": {
                    "description": "The list of locations that can be specified when deploying resources",
                    "strongType": "location",
                    "displayName": "Allowed locations"
                },
                "defaultValue": [ "westus2" ]
            }
        },
        "displayName": "Allowed locations",
        "description": "This policy enables you to restrict the locations your organization can specify when deploying resources.",
        "policyRule": {
            "if": {
                "not": {
                    "field": "location",
                    "in": "[parameters('allowedLocations')]"
                }
            },
            "then": {
                "effect": "deny"
            }
        }
    }
}

Alle Azure Policy-Beispiele sind unter Azure Policy-Beispiele verfügbar.All Azure Policy samples are at Azure Policy samples.

ModeMode

Der Modus (mode) wird abhängig davon konfiguriert, ob die Richtlinie für eine Azure Resource Manager- oder eine Ressourcenanbieter-Eigenschaft gilt.Mode is configured depending on if the policy is targeting an Azure Resource Manager property or a Resource Provider property.

Ressourcen-Manager-ModiResource Manager modes

Der Modus (mode) bestimmt, welche Ressourcentypen für eine Richtlinie ausgewertet werden.The mode determines which resource types will be evaluated for a policy. Unterstützte Modi:The supported modes are:

  • all: Ressourcengruppen und alle Ressourcentypen werden ausgewertet.all: evaluate resource groups and all resource types
  • indexed: Nur Ressourcentypen, die Tags und Speicherort unterstützen, werden ausgewertet.indexed: only evaluate resource types that support tags and location

Es wird empfohlen, mode in den meisten Fällen auf all zu setzen.We recommend that you set mode to all in most cases. Alle über das Portal erstellten Richtliniendefinitionen verwenden für „mode“ die Option all.All policy definitions created through the portal use the all mode. Wenn Sie PowerShell oder die Azure CLI verwenden, können Sie den mode-Parameter manuell angeben.If you use PowerShell or Azure CLI, you can specify the mode parameter manually. Wenn die Richtliniendefinition keinen Wert für mode enthält, wird dieser in Azure PowerShell standardmäßig auf all und in der Azure CLI auf null festgelegt.If the policy definition doesn't include a mode value, it defaults to all in Azure PowerShell and to null in Azure CLI. Der Modus null entspricht dem Verwenden von indexed, um Abwärtskompatibilität zu unterstützen.A null mode is the same as using indexed to support backwards compatibility.

indexed sollte beim Erstellen von Richtlinien verwendet werden, die Tags oder Speicherorte erzwingen.indexed should be used when creating policies that enforce tags or locations. Dies ist nicht erforderlich, verhindert aber, dass Ressourcen, die keine Tags und Speicherorte unterstützen, bei der Konformitätsprüfung als nicht konform angezeigt werden.While not required, it prevents resources that don't support tags and locations from showing up as non-compliant in the compliance results. Die Ausnahme sind Ressourcengruppen.The exception is resource groups. Richtlinien zum Erzwingen von Speicherort oder Tags für eine Ressourcengruppe sollten mode auf all festlegen und speziell auf den Typ Microsoft.Resources/subscriptions/resourceGroups abzielen.Policies that enforce location or tags on a resource group should set mode to all and specifically target the Microsoft.Resources/subscriptions/resourceGroups type. Ein Beispiel finden Sie unter Ressourcengruppen-Tags erzwingen.For an example, see Enforce resource group tags. Eine Liste der Ressourcen, die Tags unterstützen, finden Sie unter Tagunterstützung für Azure-Ressourcen.For a list of resources that support tags, see Tag support for Azure resources.

Ressourcenanbietermodi (Vorschau)Resource Provider modes (preview)

Die folgenden Ressourcenanbietermodi werden derzeit in der Vorschauphase unterstützt:The following Resource Provider modes are currently supported during preview:

  • Microsoft.ContainerService.Data zur Verwaltung der Zugangscontrollerregeln für Azure Kubernetes Service.Microsoft.ContainerService.Data for managing admission controller rules on Azure Kubernetes Service. Richtlinien, die diesen Ressourcenanbietermodus verwenden, müssen die Auswirkung EnforceRegoPolicy verwenden.Policies using this Resource Provider mode must use the EnforceRegoPolicy effect.
  • Microsoft.Kubernetes.Data zur Verwaltung selbstverwalteter Kubernetes-Cluster der AKS-Engine in Azure.Microsoft.Kubernetes.Data for managing self-managed AKS Engine Kubernetes clusters on Azure. Richtlinien, die diesen Ressourcenanbietermodus verwenden, müssen die Auswirkung EnforceOPAConstraint verwenden.Policies using this Resource Provider mode must use the EnforceOPAConstraint effect.
  • Microsoft.KeyVault.Data zur Verwaltung von Tresoren und Zertifikaten in Azure Key Vault.Microsoft.KeyVault.Data for managing vaults and certificates in Azure Key Vault.

Hinweis

Ressourcenanbietermodi unterstützen in der Vorschauphase nur integrierte Richtliniendefinitionen und keine Initiativen.Resource Provider modes only support built-in policy definitions and don't support initiatives while in preview.

ParameterParameters

Parameter vereinfachen Ihre Richtlinienverwaltung, indem sie die Anzahl von Richtliniendefinitionen reduzieren.Parameters help simplify your policy management by reducing the number of policy definitions. Es handelt sich dabei z.B. um Parameter wie die folgenden Felder auf einem Formular: name, address, city, state.Think of parameters like the fields on a form – name, address, city, state. Diese Parameter bleiben immer gleich, allerdings ändern sich ihre Werte auf Grundlage der Einträge des Einzelnen.These parameters always stay the same, however their values change based on the individual filling out the form. Parameter funktionieren beim Erstellen von Richtlinien genauso.Parameters work the same way when building policies. Sie können die Richtlinie für verschiedene Szenarios wiederverwenden, indem Sie Parameter in eine Richtliniendefinition einbeziehen und verschiedene Werte verwenden.By including parameters in a policy definition, you can reuse that policy for different scenarios by using different values.

Hinweis

Parameter können einer vorhandenen und zugewiesenen Definition hinzugefügt werden.Parameters may be added to an existing and assigned definition. Der neue Parameter muss die defaultValue-Eigenschaft enthalten.The new parameter must include the defaultValue property. Dadurch wird verhindert, dass vorhandene Zuweisungen der Richtlinie oder Initiative indirekt als ungültig erklärt werden.This prevents existing assignments of the policy or initiative from indirectly being made invalid.

ParametereigenschaftenParameter properties

Ein Parameter hat die folgenden Eigenschaften, die in der Richtliniendefinition verwendet werden:A parameter has the following properties that are used in the policy definition:

  • name: Der Name des Parameters.name: The name of your parameter. Wird in der Richtlinienregel von der Bereitstellungsfunktion parameters verwendet.Used by the parameters deployment function within the policy rule. Weitere Informationen finden Sie unter Verwenden eines Parameterwerts.For more information, see using a parameter value.
  • type: Bestimmt, ob der Parameter eine Zeichenfolge, ein Array, ein Objekt, ein boolescher Wert, eine ganze Zahl oder vom Typ float oder datetime ist.type: Determines if the parameter is a string, array, object, boolean, integer, float, or datetime.
  • metadata: Definiert untergeordnete Eigenschaften, die hauptsächlich vom Azure-Portal verwendet werden, um benutzerfreundliche Informationen anzuzeigen:metadata: Defines subproperties primarily used by the Azure portal to display user-friendly information:
    • description: Die Erläuterung des Zwecks des Parameters.description: The explanation of what the parameter is used for. Kann verwendet werden, um Beispiele zulässiger Werte bereitzustellen.Can be used to provide examples of acceptable values.
    • displayName: Der Anzeigename des Parameters im Portal.displayName: The friendly name shown in the portal for the parameter.
    • strongType: (Optional) Wird verwendet, wenn die Richtliniendefinition über das Portal zugewiesen wird.strongType: (Optional) Used when assigning the policy definition through the portal. Bietet eine kontextbezogene Liste.Provides a context aware list. Weitere Informationen finden Sie unter strongType.For more information, see strongType.
    • assignPermissions: (Optional) Legen Sie diesen Wert auf true fest, damit das Azure-Portal während der Richtlinienzuweisung Rollenzuweisungen erstellt.assignPermissions: (Optional) Set as true to have Azure portal create role assignments during policy assignment. Diese Eigenschaft ist hilfreich, wenn Sie Berechtigungen außerhalb des Zuweisungsbereichs zuweisen möchten.This property is useful in case you wish to assign permissions outside the assignment scope. Es gibt eine Rollenzuordnung pro Rollendefinition in der Richtlinie (oder pro Rollendefinition in allen Richtlinien der Initiative).There is one role assignment per role definition in the policy (or per role definition in all of the policies in the initiative). Der Parameterwert muss eine gültige Ressource oder ein gültiger Bereich sein.The parameter value must be a valid resource or scope.
  • defaultValue: (Optional) Legt den Wert des Parameters in einer Zuweisung fest, wenn kein Wert angegeben ist.defaultValue: (Optional) Sets the value of the parameter in an assignment if no value is given. Erforderlich, wenn eine vorhandene zugewiesene Richtliniendefinition aktualisiert wird.Required when updating an existing policy definition that is assigned.
  • allowedValues: (Optional) Stellt ein Array von Werten bereit, die der Parameter bei der Zuweisung akzeptiert.allowedValues: (Optional) Provides an array of values that the parameter accepts during assignment.

Beispielsweise können Sie eine Richtliniendefinition verwenden, um die Speicherorte einzuschränken, an denen Ressourcen bereitgestellt werden können.As an example, you could define a policy definition to limit the locations where resources can be deployed. Ein Parameter für diese Richtliniendefinition kann allowedLocations heißen.A parameter for that policy definition could be allowedLocations. Dieser Parameter kann bei jeder Zuweisung der Richtliniendefinition verwendet werden, um die akzeptierten Werte zu begrenzen.This parameter would be used by each assignment of the policy definition to limit the accepted values. Die Verwendung von strongType bietet erweiterte Möglichkeiten, wenn die Zuweisung über das Portal erfolgt:The use of strongType provides an enhanced experience when completing the assignment through the 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"
        ]
    }
}

Verwenden eines ParameterwertsUsing a parameter value

In der Richtlinienregel wird die folgende Syntax der Funktion parameters verwendet, um auf Parameter zu verweisen:In the policy rule, you reference parameters with the following parameters function syntax:

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

In diesem Beispiel wird auf den Parameter allowedLocations verwiesen, der unter Parametereigenschaften vorgestellt wurde.This sample references the allowedLocations parameter that was demonstrated in parameter properties.

strongTypestrongType

Innerhalb der metadata-Eigenschaft können Sie mit strongType im Azure-Portal eine Liste der Optionen mit Mehrfachauswahl angeben.Within the metadata property, you can use strongType to provide a multi-select list of options within the Azure portal. Derzeit zulässige Werte für strongType sind:Allowed values for strongType currently include:

  • location
  • resourceTypes
  • storageSkus
  • vmSKUs
  • existingResourceGroups
  • omsWorkspace
  • Microsoft.EventHub/Namespaces/EventHubs
  • Microsoft.EventHub/Namespaces/EventHubs/AuthorizationRules
  • Microsoft.EventHub/Namespaces/AuthorizationRules
  • Microsoft.RecoveryServices/vaults
  • Microsoft.RecoveryServices/vaults/backupPolicies

DefinitionsspeicherortDefinition location

Beim Erstellen einer Initiative oder Richtlinie muss der Speicherort der Definition angegeben werden.While creating an initiative or policy, it's necessary to specify the definition location. Dieser Speicherort muss eine Verwaltungsgruppe oder ein Abonnement sein.The definition location must be a management group or a subscription. Er bestimmt den Bereich, dem die Initiative oder Richtlinie zugewiesen werden kann.This location determines the scope to which the initiative or policy can be assigned. Ressourcen müssen direkte Mitglieder oder untergeordnete Elemente innerhalb der Hierarchie des Definitionsspeicherorts für die Zuweisung sein.Resources must be direct members of or children within the hierarchy of the definition location to target for assignment.

Für den Definitionsspeicherort gilt Folgendes:If the definition location is a:

  • Abonnement: Die Richtlinie kann nur Ressourcen innerhalb dieses Abonnements zugewiesen werden.Subscription - Only resources within that subscription can be assigned the policy.
  • Verwaltungsgruppe: Die Richtlinie kann nur Ressourcen innerhalb untergeordneter Verwaltungsgruppen und untergeordneter Abonnements zugewiesen werden.Management group - Only resources within child management groups and child subscriptions can be assigned the policy. Wenn Sie diese Richtliniendefinition mehreren Abonnements zuordnen möchten, muss der Speicherort eine Verwaltungsgruppe sein, die diese Abonnements enthält.If you plan to apply the policy definition to several subscriptions, the location must be a management group that contains those subscriptions.

Anzeigename und BeschreibungDisplay name and description

Sie verwenden displayName und description, um die Richtliniendefinition zu bestimmen und den Kontext für ihre Verwendung anzugeben.You use displayName and description to identify the policy definition and provide context for when it's used. displayName hat eine maximale Länge von 128 Zeichen, und description hat eine maximale Länge von 512 Zeichen.displayName has a maximum length of 128 characters and description a maximum length of 512 characters.

RichtlinienregelPolicy rule

Die Richtlinienregel besteht aus If- und Then-Blöcken.The policy rule consists of If and Then blocks. Im If-Block definieren Sie mindestens eine Bedingung, die angibt, wann die Richtlinie erzwungen wird.In the If block, you define one or more conditions that specify when the policy is enforced. Auf diese Bedingungen können logische Operatoren angewendet werden, um das Szenario für eine Richtlinie präzise zu definieren.You can apply logical operators to these conditions to precisely define the scenario for a policy.

Im Then-Block definieren Sie die Wirkung, die eintritt, wenn die If-Bedingungen erfüllt sind.In the Then block, you define the effect that happens when the If conditions are fulfilled.

{
    "if": {
        <condition> | <logical operator>
    },
    "then": {
        "effect": "deny | audit | append | auditIfNotExists | deployIfNotExists | disabled"
    }
}

Logische OperatorenLogical operators

Folgende logische Operatoren werden unterstützt:Supported logical operators are:

  • "not": {condition or operator}
  • "allOf": [{condition or operator},{condition or operator}]
  • "anyOf": [{condition or operator},{condition or operator}]

Die not-Syntax kehrt das Ergebnis der Bedingung um.The not syntax inverts the result of the condition. Die allOf-Syntax gleicht der logischen And-Operation und erfordert, dass alle Bedingungen erfüllt sind.The allOf syntax (similar to the logical And operation) requires all conditions to be true. Die anyOf-Syntax gleicht der logischen Or-Operation und erfordert, dass mindestens eine Bedingung erfüllt ist.The anyOf syntax (similar to the logical Or operation) requires one or more conditions to be true.

Logische Operatoren können geschachtelt werden.You can nest logical operators. Das folgende Beispiel zeigt eine not-Operation, die in einer allOf-Operation geschachtelt ist.The following example shows a not operation that is nested within an allOf operation.

"if": {
    "allOf": [{
            "not": {
                "field": "tags",
                "containsKey": "application"
            }
        },
        {
            "field": "type",
            "equals": "Microsoft.Storage/storageAccounts"
        }
    ]
},

BedingungenConditions

Eine Bedingung prüft, ob ein Feld oder der Accessor Wert bestimmte Kriterien erfüllt.A condition evaluates whether a field or the value accessor meets certain criteria. Folgende Bedingungen werden unterstützt:The supported conditions are:

  • "equals": "stringValue"
  • "notEquals": "stringValue"
  • "like": "stringValue"
  • "notLike": "stringValue"
  • "match": "stringValue"
  • "matchInsensitively": "stringValue"
  • "notMatch": "stringValue"
  • "notMatchInsensitively": "stringValue"
  • "contains": "stringValue"
  • "notContains": "stringValue"
  • "in": ["stringValue1","stringValue2"]
  • "notIn": ["stringValue1","stringValue2"]
  • "containsKey": "keyName"
  • "notContainsKey": "keyName"
  • "less": "value"
  • "lessOrEquals": "value"
  • "greater": "value"
  • "greaterOrEquals": "value"
  • "exists": "bool"

Bei Verwendung der Bedingungen like und notLike können Sie im Wert den Platzhalter * angeben.When using the like and notLike conditions, you provide a wildcard * in the value. Der Wert darf maximal einen Platzhalter des Typs * enthalten.The value shouldn't have more than one wildcard *.

Geben Sie bei Verwendung der Bedingungen match und notMatch für eine Ziffer #, für einen Buchstaben ?, für irgendein Zeichen . und für ein Zeichen das gewünschte Zeichen ein.When using the match and notMatch conditions, provide # to match a digit, ? for a letter, . to match any character, and any other character to match that actual character. Bei match und notMatch muss die Groß-/Kleinschreibung beachtet werden.match and notMatch are case-sensitive. Als Alternativen, bei denen die Groß-/Kleinschreibung nicht beachtet werden muss, stehen matchInsensitively und notMatchInsensitively zur Verfügung.Case-insensitive alternatives are available in matchInsensitively and notMatchInsensitively. Beispiele finden Sie unter Zulassen mehrerer Namensmuster.For examples, see Allow several name patterns.

FelderFields

Bedingungen werden mithilfe von Feldern gebildet.Conditions are formed by using fields. Ein Feld stimmt mit Eigenschaften in der Anforderungsnutzlast einer Ressource überein und beschreibt den Zustand der Ressource.A field matches properties in the resource request payload and describes the state of the resource.

Folgende Felder werden unterstützt:The following fields are supported:

  • name
  • fullName
    • Gibt den vollständigen Namen der Ressource zurück.Returns the full name of the resource. Der vollständige Name einer Ressource setzt sich zusammen aus dem Namen der Ressource und den vorangestellten Namen übergeordneter Ressourcen, sofern vorhanden (Beispiel: meinServer/meineDatenbank).The full name of a resource is the resource name prepended by any parent resource names (for example "myServer/myDatabase").
  • kind
  • type
  • location
  • identity.type
  • tags
  • tags['<tagName>']
    • Diese Klammersyntax unterstützt Tagnamen, die Satzzeichen wie Bindestriche, Punkte oder Leerzeichen enthalten.This bracket syntax supports tag names that have punctuation such as a hyphen, period, or space.
    • Wobei <tagName> der Name des Tags ist, auf das die Bedingung geprüft wird.Where <tagName> is the name of the tag to validate the condition for.
    • Beispiele: tags['Acct.CostCenter'], wobei Acct.CostCenter der Name des Tags ist.Examples: tags['Acct.CostCenter'] where Acct.CostCenter is the name of the tag.
  • tags['''<tagName>''']
    • Diese Klammersyntax unterstützt Tagnamen, die Apostrophe enthalten, und verwendet doppelte Apostrophe als Escapezeichen.This bracket syntax supports tag names that have apostrophes in it by escaping with double apostrophes.
    • Wobei '<tagName>' der Name des Tags ist, auf das die Bedingung geprüft wird.Where '<tagName>' is the name of the tag to validate the condition for.
    • Beispiel: tags['''My.Apostrophe.Tag'''], wobei 'My.Apostrophe.Tag' der Name des Tags ist.Example: tags['''My.Apostrophe.Tag'''] where 'My.Apostrophe.Tag' is the name of the tag.
  • Eigenschaftenaliase – Eine Liste finden Sie unter Aliase.property aliases - for a list, see Aliases.

Hinweis

tags.<tagName>, tags[tagName] und tags[tag.with.dots] werden weiterhin als Möglichkeiten zum Deklarieren eines Felds für Tags akzeptiert.tags.<tagName>, tags[tagName], and tags[tag.with.dots] are still acceptable ways of declaring a tags field. Die oben aufgeführten Ausdrücke werden jedoch bevorzugt.However, the preferred expressions are those listed above.

Verwenden von Tags mit ParameternUse tags with parameters

Ein Parameterwert kann an ein Tagfeld übergeben werden.A parameter value can be passed to a tag field. Das Übergeben eines Parameters an ein Tagfeld erhöht die Flexibilität der Richtliniendefinition während der Richtlinienzuweisung.Passing a parameter to a tag field increases the flexibility of the policy definition during policy assignment.

Im folgenden Beispiel wird mit concat eine Tagfeldsuche nach dem Tag erstellt, das als Namen den Wert des TagName-Parameters aufweist.In the following example, concat is used to create a tags field lookup for the tag named the value of the tagName parameter. Wenn dieses Tag nicht vorhanden ist, wird die Auswirkung modify verwendet, um mithilfe der Nachschlagefunktion resourcegroup() das Tag mit dem Wert dieses benannten Tags hinzuzufügen, das für die übergeordnete Ressourcengruppe der überwachten Ressourcen festgelegt ist.If that tag doesn't exist, the modify effect is used to add the tag using the value of the same named tag set on the audited resources parent resource group by using the resourcegroup() lookup function.

{
    "if": {
        "field": "[concat('tags[', parameters('tagName'), ']')]",
        "exists": "false"
    },
    "then": {
        "effect": "modify",
        "details": {
            "operations": [{
                "operation": "add",
                "field": "[concat('tags[', parameters('tagName'), ']')]",
                "value": "[resourcegroup().tags[parameters('tagName')]]"
            }],
            "roleDefinitionIds": [
                "/providers/microsoft.authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
            ]
        }
    }
}

WertValue

Bedingungen können auch mithilfe von Wert gebildet werden.Conditions can also be formed using value. Wert gleicht die Bedingungen mit Parametern, unterstützten Vorlagenfunktionen oder Literalen ab.value checks conditions against parameters, supported template functions, or literals. Wert wird mit beliebigen unterstützten Bedingungen verknüpft.value is paired with any supported condition.

Warnung

Wenn eine Vorlagenfunktion einen Fehler ergibt, schlägt die Richtlinienauswertung fehl.If the result of a template function is an error, policy evaluation fails. Eine fehlerhafte Auswertung ist ein implizites Deny (Verweigern).A failed evaluation is an implicit deny. Weitere Informationen finden Sie unter Vermeiden von Vorlagenfehlern.For more information, see avoiding template failures.

Beispiele von WertenValue examples

Dieses Beispiel einer Richtlinienregel verwendet Wert, um das Ergebnis der resourceGroup()-Funktion und der zurückgegebenen name-Eigenschaft mit der like-Bedingung *netrg zu vergleichen.This policy rule example uses value to compare the result of the resourceGroup() function and the returned name property to a like condition of *netrg. Die Regel verweigert Ressourcen, die nicht den Typ Microsoft.Network/* haben, in Ressourcengruppen, deren Name mit *netrg endet.The rule denies any resource not of the Microsoft.Network/* type in any resource group whose name ends in *netrg.

{
    "if": {
        "allOf": [{
                "value": "[resourceGroup().name]",
                "like": "*netrg"
            },
            {
                "field": "type",
                "notLike": "Microsoft.Network/*"
            }
        ]
    },
    "then": {
        "effect": "deny"
    }
}

Diese Beispiel einer Regelrichtlinie verwendet Wert, um zu überprüfen, ob das Ergebnis mehrerer geschachtelter Funktionen gleich true ist.This policy rule example uses value to check if the result of multiple nested functions equals true. Die Regel verweigert alle Ressourcen, die nicht mindestens drei Tags haben.The rule denies any resource that doesn't have at least three tags.

{
    "mode": "indexed",
    "policyRule": {
        "if": {
            "value": "[less(length(field('tags')), 3)]",
            "equals": true
        },
        "then": {
            "effect": "deny"
        }
    }
}

Vermeiden von VorlagenfehlernAvoiding template failures

Wenn Sie Vorlagenfunktionen als Wert verwenden, sind viele komplexe und verschachtelte Funktionen möglich.The use of template functions in value allows for many complex nested functions. Wenn eine Vorlagenfunktion einen Fehler ergibt, schlägt die Richtlinienauswertung fehl.If the result of a template function is an error, policy evaluation fails. Eine fehlerhafte Auswertung ist ein implizites Deny (Verweigern).A failed evaluation is an implicit deny. Beispiel für einen Wert, bei dem in bestimmten Szenarios ein Fehler auftritt:An example of a value that fails in certain scenarios:

{
    "policyRule": {
        "if": {
            "value": "[substring(field('name'), 0, 3)]",
            "equals": "abc"
        },
        "then": {
            "effect": "audit"
        }
    }
}

Bei der oben als Beispiel verwendeten Richtlinienregel wird substring() zum Vergleichen der ersten drei Zeichen des Namens mit abc verwendet.The example policy rule above uses substring() to compare the first three characters of name to abc. Wenn der Name kürzer als drei Zeichen ist, ergibt die substring()-Funktion einen Fehler.If name is shorter than three characters, the substring() function results in an error. Dieser Fehler löst bei der Richtlinie den Deny-Effekt aus.This error causes the policy to become a deny effect.

Verwenden Sie stattdessen die if()-Funktion, um zu überprüfen, ob die ersten drei Zeichen des Namens gleich abc sind, ohne dass ein Name, der kürzer als drei Zeichen ist, einen Fehler verursachen kann:Instead, use the if() function to check if the first three characters of name equal abc without allowing a name shorter than three characters to cause an error:

{
    "policyRule": {
        "if": {
            "value": "[if(greaterOrEquals(length(field('name')), 3), substring(field('name'), 0, 3), 'not starting with abc')]",
            "equals": "abc"
        },
        "then": {
            "effect": "audit"
        }
    }
}

Mit der überarbeiteten Richtlinienregel überprüft if() die Länge des Namens, bevor es versucht, einen substring() für einen Wert mit weniger als drei Zeichen abzurufen.With the revised policy rule, if() checks the length of name before trying to get a substring() on a value with fewer than three characters. Wenn der Name zu kurz ist, wird der Wert, der „nicht mit abc beginnt“, zurückgegeben und mit abc verglichen.If name is too short, the value "not starting with abc" is returned instead and compared to abc. Eine Ressource mit einem Kurznamen, der nicht mit abc beginnt, erzeugt zwar immer noch einen Fehler bei der Richtlinienregel, verursacht aber bei der Auswertung keinen Fehler mehr.A resource with a short name that doesn't begin with abc still fails the policy rule, but no longer causes an error during evaluation.

WirkungEffect

Azure Policy unterstützt die folgenden Auswirkungstypen:Azure Policy supports the following types of effect:

  • Append fügt der Anforderung verschiedene definierte Felder hinzu.Append: adds the defined set of fields to the request
  • Audit generiert eine Warnung im Überwachungsprotokoll, führt jedoch nicht zu einem Fehler bei der Anforderung.Audit: generates a warning event in activity log but doesn't fail the request
  • AuditIfNotExists generiert eine Warnung im Aktivitätsprotokoll, wenn keine verwandte Ressource vorhanden ist.AuditIfNotExists: generates a warning event in activity log if a related resource doesn't exist
  • Deny generiert ein Ereignis im Aktivitätsprotokoll und führt zu einem Fehler bei der Anforderung.Deny: generates an event in the activity log and fails the request
  • DeployIfNotExists stellt eine verwandte Ressource bereit, falls noch keine vorhanden ist.DeployIfNotExists: deploys a related resource if it doesn't already exist
  • Deaktiviert wertet Ressourcen nicht auf Konformität mit der Richtlinienregel aus.Disabled: doesn't evaluate resources for compliance to the policy rule
  • EnforceOPAConstraint (Vorschau) konfiguriert den Open Policy Agent-Zugangscontroller mit Gatekeeper v3 für selbstverwaltete Kubernetes-Cluster in Azure (Vorschau).EnforceOPAConstraint (preview): configures the Open Policy Agent admissions controller with Gatekeeper v3 for self-managed Kubernetes clusters on Azure (preview)
  • EnforceRegoPolicy (Vorschau) konfiguriert den Open Policy Agent-Zugangscontroller mit Gatekeeper v2 in Azure Kubernetes Service.EnforceRegoPolicy (preview): configures the Open Policy Agent admissions controller with Gatekeeper v2 in Azure Kubernetes Service
  • Modify fügt die definierten Tags zu einer Ressource hinzu, aktualisiert sie oder entfernt sie aus einer Ressource.Modify: adds, updates, or removes the defined tags from a resource

Ausführliche Informationen zu den einzelnen Auswirkungen, der Reihenfolge der Auswertung, den Eigenschaften und Beispielen finden Sie unter Grundlegendes zu Azure Policy-Auswirkungen.For complete details on each effect, order of evaluation, properties, and examples, see Understanding Azure Policy Effects.

RichtlinienfunktionenPolicy functions

Alle Resource Manager-Vorlagenfunktionen stehen innerhalb einer Richtlinienregel zur Verfügung, mit Ausnahme der folgenden Funktionen und benutzerdefinierten Funktionen:All Resource Manager template functions are available to use within a policy rule, except the following functions and user-defined functions:

  • copyIndex()copyIndex()
  • deployment()deployment()
  • list*list*
  • newGuid()newGuid()
  • pickZones()pickZones()
  • providers()providers()
  • reference()reference()
  • resourceId()resourceId()
  • variables()variables()

Die folgenden Funktionen stehen zur Verwendung in einer Richtlinienregel zur Verfügung, unterscheiden sich jedoch von der Verwendung in einer Azure Resource Manager-Vorlage:The following functions are available to use in a policy rule, but differ from use in an Azure Resource Manager template:

  • addDays(dateTime, numberOfDaysToAdd)addDays(dateTime, numberOfDaysToAdd)
    • dateTime: [Erforderlich] string – Zeichenfolge im Universal ISO 8601 DateTime-Format 'jjjj-MM-ttTHH:mm:ss.fffffffZ'dateTime: [Required] string - String in the Universal ISO 8601 DateTime format 'yyyy-MM-ddTHH:mm:ss.fffffffZ'
    • numberOfDaysToAdd: [Erforderlich] integer – Anzahl der hinzuzufügenden TagenumberOfDaysToAdd: [Required] integer - Number of days to add
  • utcNow() – Im Gegensatz zu einer Resource Manager-Vorlage kann dies auch außerhalb von „defaultValue“ verwendet werden.utcNow() - Unlike a Resource Manager template, this can be used outside defaultValue.
    • Gibt eine Zeichenfolge zurück, die auf das aktuelle Datum und die aktuelle Uhrzeit im Universal ISO 8601 DateTime-Format 'jjjj-MM-ttTHH:mm:ss.fffffffZ' festgelegt ist.Returns a string that is set to the current date and time in Universal ISO 8601 DateTime format 'yyyy-MM-ddTHH:mm:ss.fffffffZ'

Darüber hinaus ist die field Funktion für Richtlinienregeln verfügbar.Additionally, the field function is available to policy rules. field ist in erster Linie für die Verwendung mit AuditIfNotExists und DeployIfNotExists zum Verweisen auf Felder in der Ressource bestimmt, die ausgewertet werden.field is primarily used with AuditIfNotExists and DeployIfNotExists to reference fields on the resource that are being evaluated. Ein Beispiel hierfür finden Sie im Beispiel für DeployIfNotExists.An example of this use can be seen in the DeployIfNotExists example.

Beispiel für RichtlinienfunktionPolicy function example

Dieses Richtlinienregelbeispiel verwendet die Ressourcenfunktion resourceGroup, um die Eigenschaft name zu erhalten, kombiniert mit dem Array concat und der Objektfunktion, um eine like-Bedingung zu erstellen, die für den Ressourcennamen erzwingt, mit dem Ressourcengruppennamen zu beginnen.This policy rule example uses the resourceGroup resource function to get the name property, combined with the concat array and object function to build a like condition that enforces the resource name to start with the resource group name.

{
    "if": {
        "not": {
            "field": "name",
            "like": "[concat(resourceGroup().name,'*')]"
        }
    },
    "then": {
        "effect": "deny"
    }
}

AliaseAliases

Eigenschaftenaliase dienen zum Zugreifen auf bestimmte Eigenschaften für einen Ressourcentyp.You use property aliases to access specific properties for a resource type. Mithilfe von Aliasen können Sie beschränken, welche Werte oder Bedingungen für eine Eigenschaft einer Ressourcen zulässig sind.Aliases enable you to restrict what values or conditions are allowed for a property on a resource. Jeder Alias wird Pfaden in verschiedenen API-Versionen für einen bestimmten Ressourcentyp zugeordnet.Each alias maps to paths in different API versions for a given resource type. Bei der Richtlinienauswertung ruft das Richtlinienmodul den Eigenschaftenpfad für diese API-Version ab.During policy evaluation, the policy engine gets the property path for that API version.

Die Liste der Aliase wächst ständig.The list of aliases is always growing. Um zu ermitteln, welche Aliase derzeit von Azure Policy unterstützt werden, verwenden Sie eine der folgenden Methoden:To find what aliases are currently supported by Azure Policy, use one of the following methods:

  • Azure PowerShellAzure PowerShell

    # Login first with Connect-AzAccount if not using Cloud Shell
    
    # Use Get-AzPolicyAlias to list available providers
    Get-AzPolicyAlias -ListAvailable
    
    # Use Get-AzPolicyAlias to list aliases for a Namespace (such as Azure Compute -- Microsoft.Compute)
    (Get-AzPolicyAlias -NamespaceMatch 'compute').Aliases
    
  • Azure-BefehlszeilenschnittstelleAzure CLI

    # Login first with az login if not using Cloud Shell
    
    # List namespaces
    az provider list --query [*].namespace
    
    # Get Azure Policy aliases for a specific Namespace (such as Azure Compute -- Microsoft.Compute)
    az provider show --namespace Microsoft.Compute --expand "resourceTypes/aliases" --query "resourceTypes[].aliases[].name"
    
  • REST-API/ARM-ClientREST API / ARMClient

    GET https://management.azure.com/providers/?api-version=2017-08-01&$expand=resourceTypes/aliases
    

Grundlegendes zum [*]-AliasUnderstanding the [*] alias

Einige der verfügbaren Aliase weisen eine Version auf, die als „normaler“ Name angezeigt wird, an andere wird [*] angefügt.Several of the aliases that are available have a version that appears as a 'normal' name and another that has [*] attached to it. Beispiel:For example:

  • Microsoft.Storage/storageAccounts/networkAcls.ipRules
  • Microsoft.Storage/storageAccounts/networkAcls.ipRules[*]

Bei einem „normalen“ Alias wird das Feld als einzelner Wert dargestellt.The 'normal' alias represents the field as a single value. Dieses Feld ist für genaue Vergleichs-/Übereinstimmungsszenarios bestimmt, wenn der gesamte Wertesatz exakt der Definition entsprechen muss (nicht mehr und nicht weniger).This field is for exact match comparison scenarios when the entire set of values must be exactly as defined, no more and no less.

Beim einem Alias mit Stern [*] ist ein Vergleich mit dem Wert jedes einzelnen Elements im Array und mit bestimmten Eigenschaften der einzelnen Elemente möglich.The [*] alias makes it possible to compare against the value of each element in the array and specific properties of each element. Dieser Ansatz ermöglicht das Vergleichen von Elementeigenschaften bei Szenarios wie „if none of“, „if any of“ oder „if all of“.This approach makes it possible to compare element properties for 'if none of', 'if any of', or 'if all of' scenarios. Mit IpRules [*] würden Sie beispielsweise überprüfen, ob jede action auf Deny eingestellt ist, aber nicht darüber nachdenken, wie viele Regeln vorhanden sind oder welchen Wert die IP-Adresse hat.Using ipRules[*], an example would be validating that every action is Deny, but not worrying about how many rules exist or what the IP value is. Diese Beispielregel überprüft alle Übereinstimmungen von IpRules[*].Wert mit 10.0.4.1 und wendet den Effektttyp nur dann an, wenn nicht mindestens eine Übereinstimmung gefunden wird:This sample rule checks for any matches of ipRules[*].value to 10.0.4.1 and applies the effectType only if it doesn't find at least one match:

"policyRule": {
    "if": {
        "allOf": [
            {
                "field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules",
                "exists": "true"
            },
            {
                "field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].value",
                "notEquals": "10.0.4.1"
            }
        ]
    },
    "then": {
        "effect": "[parameters('effectType')]"
    }
}

Weitere Informationen finden Sie unter Auswerten eines Alias mit Stern [*].For more information, see evaluating the [*] alias.

InitiativenInitiatives

Mithilfe von Initiativen können Sie mehrere verwandte Richtliniendefinitionen gruppieren, um Zuweisungen und das Verwalten zu vereinfachen, indem Sie mit einer Gruppe als einzelnes Element arbeiten.Initiatives enable you to group several related policy definitions to simplify assignments and management because you work with a group as a single item. Beispielsweise können Sie zusammengehörige Richtliniendefinitionen zum Markieren in einer einzelnen Initiative gruppieren.For example, you can group related tagging policy definitions into a single initiative. Anstatt jede Richtlinie einzeln zuzuweisen, wenden Sie die Initiative an.Rather than assigning each policy individually, you apply the initiative.

Im folgenden Beispiel wird veranschaulicht, wie eine Initiative zur Behandlung der Tags costCenter und productName erstellt werden kann.The following example illustrates how to create an initiative for handling two tags: costCenter and productName. Es werden zwei integrierte Richtlinien verwendet, um den Standardtagwert anzuwenden.It uses two built-in policies to apply the default tag value.

{
    "properties": {
        "displayName": "Billing Tags Policy",
        "policyType": "Custom",
        "description": "Specify cost Center tag and product name tag",
        "parameters": {
            "costCenterValue": {
                "type": "String",
                "metadata": {
                    "description": "required value for Cost Center tag"
                }
            },
            "productNameValue": {
                "type": "String",
                "metadata": {
                    "description": "required value for product Name tag"
                }
            }
        },
        "policyDefinitions": [{
                "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
                "parameters": {
                    "tagName": {
                        "value": "costCenter"
                    },
                    "tagValue": {
                        "value": "[parameters('costCenterValue')]"
                    }
                }
            },
            {
                "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/2a0e14a6-b0a6-4fab-991a-187a4f81c498",
                "parameters": {
                    "tagName": {
                        "value": "costCenter"
                    },
                    "tagValue": {
                        "value": "[parameters('costCenterValue')]"
                    }
                }
            },
            {
                "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
                "parameters": {
                    "tagName": {
                        "value": "productName"
                    },
                    "tagValue": {
                        "value": "[parameters('productNameValue')]"
                    }
                }
            },
            {
                "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/2a0e14a6-b0a6-4fab-991a-187a4f81c498",
                "parameters": {
                    "tagName": {
                        "value": "productName"
                    },
                    "tagValue": {
                        "value": "[parameters('productNameValue')]"
                    }
                }
            }
        ]
    },
    "id": "/subscriptions/<subscription-id>/providers/Microsoft.Authorization/policySetDefinitions/billingTagsPolicy",
    "type": "Microsoft.Authorization/policySetDefinitions",
    "name": "billingTagsPolicy"
}

Nächste SchritteNext steps