Programmgesteuertes Erstellen von RichtlinienProgrammatically create policies

In diesem Artikel wird das programmgesteuerte Erstellen und Verwalten von Richtlinien Schritt für Schritt beschrieben.This article walks you through programmatically creating and managing policies. Mit Azure Policy-Definitionen werden verschiedene Regeln und Auswirkungen für Ihre Ressourcen erzwungen.Azure Policy definitions enforce different rules and effects over your resources. Durch die Erzwingung wird sichergestellt, dass die Ressourcen stets konform mit Ihren Unternehmensstandards und Vereinbarungen zum Servicelevel bleiben.Enforcement makes sure that resources stay compliant with your corporate standards and service level agreements.

Weitere Informationen zur Konformität finden Sie unter Abrufen von Konformitätsdaten.For information about compliance, see getting compliance data.

VoraussetzungenPrerequisites

Stellen Sie zunächst sicher, dass die folgenden Voraussetzungen erfüllt sind:Before you begin, make sure that the following prerequisites are met:

  1. Installieren Sie den ARMClient, falls Sie dies noch nicht durchgeführt haben.If you haven't already, install the ARMClient. Mit diesem Tool werden HTTP-Anforderungen an Azure Resource Manager-basierte APIs gesendet.It's a tool that sends HTTP requests to Azure Resource Manager-based APIs.

  2. Aktualisieren Sie Ihr Azure PowerShell-Modul auf die neueste Version.Update your Azure PowerShell module to the latest version. Ausführliche Informationen finden Sie unter Installieren des Azure PowerShell-Moduls.See Install Azure PowerShell module for detailed information. Weitere Informationen zur aktuellen Version finden Sie unter Azure PowerShell.For more information about the latest version, see Azure PowerShell.

  3. Registrieren Sie den Azure-Ressourcenanbieter „Policy Insights“ über Azure PowerShell, um zu prüfen, ob Ihr Abonnement mit dem Ressourcenanbieter funktioniert.Register the Azure Policy Insights resource provider using Azure PowerShell to validate that your subscription works with the resource provider. Um einen Ressourcenanbieter zu registrieren, benötigen Sie die Berechtigungen zum Ausführen des Vorgangs „Aktion registrieren“ für den Ressourcenanbieter.To register a resource provider, you must have permission to run the register action operation for the resource provider. Dieser Vorgang ist in den Rollen „Mitwirkender“ und „Besitzer“ enthalten.This operation is included in the Contributor and Owner roles. Führen Sie den folgenden Befehl aus, um den Ressourcenanbieter zu registrieren:Run the following command to register the resource provider:

    Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
    

    Weitere Informationen zum Registrieren und Anzeigen von Ressourcenanbietern finden Sie unter Ressourcenanbieter und -typen.For more information about registering and viewing resource providers, see Resource Providers and Types.

  4. Installieren Sie die Azure CLI, falls Sie dies noch nicht getan haben.If you haven't already, install Azure CLI. Sie finden die aktuelle Version unter Installieren der Azure CLI unter Windows.You can get the latest version at Install Azure CLI on Windows.

Erstellen und Zuweisen einer RichtliniendefinitionCreate and assign a policy definition

Im ersten Schritt zur besseren Sichtbarkeit Ihrer Ressourcen werden Richtlinien für die Ressourcen erstellt und zugewiesen.The first step toward better visibility of your resources is to create and assign policies over your resources. Im nächsten Schritt erfahren Sie, wie Sie eine Richtlinie programmgesteuert erstellen und zuweisen.The next step is to learn how to programmatically create and assign a policy. Mit der Beispielrichtlinie werden Speicherkonten überprüft, die für alle öffentlichen Netzwerke offen sind, indem PowerShell, Azure CLI und HTTP-Anforderungen verwendet werden.The example policy audits storage accounts that are open to all public networks using PowerShell, Azure CLI, and HTTP requests.

Erstellen und Zuweisen einer Richtliniendefinition mit PowerShellCreate and assign a policy definition with PowerShell

  1. Verwenden Sie den folgenden JSON-Codeausschnitt, um eine JSON-Datei mit dem Namen „AuditStorageAccounts.json“ zu erstellen.Use the following JSON snippet to create a JSON file with the name AuditStorageAccounts.json.

    {
        "if": {
            "allOf": [{
                    "field": "type",
                    "equals": "Microsoft.Storage/storageAccounts"
                },
                {
                    "field": "Microsoft.Storage/storageAccounts/networkAcls.defaultAction",
                    "equals": "Allow"
                }
            ]
        },
        "then": {
            "effect": "audit"
        }
    }
    

    Weitere Informationen zum Erstellen einer Richtliniendefinition finden Sie unter Struktur von Azure Policy-Definitionen.For more information about authoring a policy definition, see Azure Policy Definition Structure.

  2. Führen Sie den folgenden Befehl aus, um mit der Datei „AuditStorageAccounts.json“ eine Richtliniendefinition zu erstellen.Run the following command to create a policy definition using the AuditStorageAccounts.json file.

    New-AzPolicyDefinition -Name 'AuditStorageAccounts' -DisplayName 'Audit Storage Accounts Open to Public Networks' -Policy 'AuditStorageAccounts.json'
    

    Mit dem Befehl wird die Richtliniendefinition Audit Storage Accounts Open to Public Networks erstellt.The command creates a policy definition named Audit Storage Accounts Open to Public Networks. Weitere Informationen zu anderen Parametern, die Sie verwenden können, finden Sie unter New-AzPolicyDefinition.For more information about other parameters that you can use, see New-AzPolicyDefinition.

    New-AzPolicyDefinition speichert die Richtliniendefinition standardmäßig im ausgewählten Abonnement des Sitzungskontexts bei Aufruf ohne Speicherortparameter.When called without location parameters, New-AzPolicyDefinition defaults to saving the policy definition in the selected subscription of the sessions context. Um die Definition an einem anderen Speicherort zu speichern, verwenden Sie die folgenden Parameter:To save the definition to a different location, use the following parameters:

    • SubscriptionId zum Speichern in einem anderen Abonnement.SubscriptionId - Save to a different subscription. Dies erfordert einen GUID-Wert.Requires a GUID value.
    • ManagementGroupName zum Speichern in einer Verwaltungsgruppe.ManagementGroupName - Save to a management group. Dies erfordert einen Zeichenfolgenwert.Requires a string value.
  3. Nach dem Erstellen der Richtliniendefinition können Sie eine Richtlinienzuweisung erstellen. Führen Sie dazu die folgenden Befehle aus:After you create your policy definition, you can create a policy assignment by running the following commands:

    $rg = Get-AzResourceGroup -Name 'ContosoRG'
    $Policy = Get-AzPolicyDefinition -Name 'AuditStorageAccounts'
    New-AzPolicyAssignment -Name 'AuditStorageAccounts' -PolicyDefinition $Policy -Scope $rg.ResourceId
    

    Ersetzen Sie ContosoRG durch den Namen Ihrer gewünschten Ressourcengruppe.Replace ContosoRG with the name of your intended resource group.

    Der Parameter Scope für New-AzPolicyAssignment kann mit einer Verwaltungsgruppe, einem Abonnement, einer Ressourcengruppe oder einer einzelnen Ressource verwendet werden.The Scope parameter on New-AzPolicyAssignment works with management group, subscription, resource group, or a single resource. Der Parameter verwendet einen vollständigen Ressourcenpfad, den die Eigenschaft ResourceId in Get-AzResourceGroup zurückgibt.The parameter uses a full resource path, which the ResourceId property on Get-AzResourceGroup returns. Das Muster für Scope sieht für jeden Container wie folgt aus.The pattern for Scope for each container is as follows. Ersetzen Sie {rName}, {rgName}, {subId} und {mgName} durch Ihre(n) Ressourcennamen, Ressourcengruppennamen, Abonnement-ID bzw. Namen der Verwaltungsgruppe.Replace {rName}, {rgName}, {subId}, and {mgName} with your resource name, resource group name, subscription ID, and management group name, respectively. {rType} wird durch den Ressourcentyp der Ressource ersetzt, z. B. Microsoft.Compute/virtualMachines für eine VM.{rType} would be replaced with the resource type of the resource, such as Microsoft.Compute/virtualMachines for a VM.

    • Ressource: /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}Resource - /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • Ressourcengruppe: /subscriptions/{subId}/resourceGroups/{rgName}Resource group - /subscriptions/{subId}/resourceGroups/{rgName}
    • Abonnement: /subscriptions/{subId}/Subscription - /subscriptions/{subId}/
    • Verwaltungsgruppe: /providers/Microsoft.Management/managementGroups/{mgName}Management group - /providers/Microsoft.Management/managementGroups/{mgName}

Weitere Informationen zum Verwalten von Ressourcenrichtlinien unter Verwendung des Azure Resource Manager-PowerShell-Moduls finden Sie unter Az.Resources.For more information about managing resource policies using the Azure Resource Manager PowerShell module, see Az.Resources.

Erstellen und Zuweisen einer Richtliniendefinition per ARMClientCreate and assign a policy definition using ARMClient

Verwenden Sie das folgende Verfahren, um eine Richtliniendefinition zu erstellen.Use the following procedure to create a policy definition.

  1. Kopieren Sie den folgenden JSON-Codeausschnitt, um eine JSON-Datei zu erstellen.Copy the following JSON snippet to create a JSON file. Sie rufen die Datei im nächsten Schritt auf.You'll call the file in the next step.

    "properties": {
        "displayName": "Audit Storage Accounts Open to Public Networks",
        "policyType": "Custom",
        "mode": "Indexed",
        "description": "This policy ensures that storage accounts with exposure to Public Networks are audited.",
        "parameters": {},
        "policyRule": {
            "if": {
                "allOf": [{
                        "field": "type",
                        "equals": "Microsoft.Storage/storageAccounts"
                    },
                    {
                        "field": "Microsoft.Storage/storageAccounts/networkAcls.defaultAction",
                        "equals": "Allow"
                    }
                ]
            },
            "then": {
                "effect": "audit"
            }
        }
    }
    
  2. Erstellen Sie die Richtliniendefinition mithilfe eines der folgenden Aufrufe:Create the policy definition using one of the following calls:

    # For defining a policy in a subscription
    armclient PUT "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyDefinitions/AuditStorageAccounts?api-version=2016-12-01" @<path to policy definition JSON file>
    
    # For defining a policy in a management group
    armclient PUT "/providers/Microsoft.Management/managementgroups/{managementGroupId}/providers/Microsoft.Authorization/policyDefinitions/AuditStorageAccounts?api-version=2016-12-01" @<path to policy definition JSON file>
    

    Ersetzen Sie „{subscriptionId}“ durch die ID Ihres Abonnements oder „{managementGroupId}“ durch die ID Ihrer Verwaltungsgruppe.Replace the preceding {subscriptionId} with the ID of your subscription or {managementGroupId} with the ID of your management group.

    Weitere Informationen zur Struktur der Abfrage finden Sie unter Policy Definitions – Create Or Update (Richtliniendefinitionen: Erstellen oder Aktualisieren) sowie unter Policy Definitions – Create Or Update At Management Group (Richtliniendefinitionen: Erstellen oder Aktualisieren in einer Verwaltungsgruppe).For more information about the structure of the query, see Azure Policy Definitions – Create or Update and Policy Definitions – Create or Update At Management Group

Verwenden Sie das folgende Verfahren, um eine Richtlinienzuweisung zu erstellen und die Richtliniendefinition auf Ressourcengruppenebene zuzuweisen.Use the following procedure to create a policy assignment and assign the policy definition at the resource group level.

  1. Kopieren Sie den folgenden JSON-Codeausschnitt, um eine Datei mit einer JSON-Richtlinienzuweisung zu erstellen.Copy the following JSON snippet to create a JSON policy assignment file. Ersetzen Sie die in <> gesetzten Angaben durch Ihre eigenen Werte.Replace example information in <> symbols with your own values.

    {
        "properties": {
            "description": "This policy assignment makes sure that storage accounts with exposure to Public Networks are audited.",
            "displayName": "Audit Storage Accounts Open to Public Networks Assignment",
            "parameters": {},
            "policyDefinitionId": "/subscriptions/<subscriptionId>/providers/Microsoft.Authorization/policyDefinitions/Audit Storage Accounts Open to Public Networks",
            "scope": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>"
        }
    }
    
  2. Erstellen Sie die Richtlinienzuweisung, indem Sie den folgenden Aufruf verwenden:Create the policy assignment using the following call:

    armclient PUT "/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.Authorization/policyAssignments/Audit Storage Accounts Open to Public Networks?api-version=2017-06-01-preview" @<path to Assignment JSON file>
    

    Ersetzen Sie die in <> gesetzten Angaben durch Ihre eigenen Werte.Replace example information in <> symbols with your own values.

    Weitere Informationen zur Durchführung von HTTP-Aufrufen für die REST-API finden Sie unter Azure-REST-API-Ressourcen.For more information about making HTTP calls to the REST API, see Azure REST API Resources.

Erstellen und Zuweisen einer Richtliniendefinition mit der Azure-BefehlszeilenschnittstelleCreate and assign a policy definition with Azure CLI

Verwenden Sie das folgende Verfahren, um eine Richtliniendefinition zu erstellen:To create a policy definition, use the following procedure:

  1. Kopieren Sie den folgenden JSON-Codeausschnitt, um eine Datei mit einer JSON-Richtlinienzuweisung zu erstellen.Copy the following JSON snippet to create a JSON policy assignment file.

    {
        "if": {
            "allOf": [{
                    "field": "type",
                    "equals": "Microsoft.Storage/storageAccounts"
                },
                {
                    "field": "Microsoft.Storage/storageAccounts/networkAcls.defaultAction",
                    "equals": "Allow"
                }
            ]
        },
        "then": {
            "effect": "audit"
        }
    }
    

    Weitere Informationen zum Erstellen einer Richtliniendefinition finden Sie unter Struktur von Azure Policy-Definitionen.For more information about authoring a policy definition, see Azure Policy Definition Structure.

  2. Führen Sie den folgenden Befehl aus, um eine Richtliniendefinition zu erstellen:Run the following command to create a policy definition:

    az policy definition create --name 'audit-storage-accounts-open-to-public-networks' --display-name 'Audit Storage Accounts Open to Public Networks' --description 'This policy ensures that storage accounts with exposures to public networks are audited.' --rules '<path to json file>' --mode All
    

    Mit dem Befehl wird die Richtliniendefinition Audit Storage Accounts Open to Public Networks erstellt.The command creates a policy definition named Audit Storage Accounts Open to Public Networks. Weitere Informationen zu anderen Parametern, die Sie verwenden können, finden Sie unter az policy definition create.For more information about other parameters that you can use, see az policy definition create.

    az policy definition creation speichert die Richtliniendefinition standardmäßig im ausgewählten Abonnement des Sitzungskontexts bei Aufruf ohne Speicherortparameter.When called without location parameters, az policy definition creation defaults to saving the policy definition in the selected subscription of the sessions context. Um die Definition an einem anderen Speicherort zu speichern, verwenden Sie die folgenden Parameter:To save the definition to a different location, use the following parameters:

    • --subscription zum Speichern in einem anderen Abonnement.--subscription - Save to a different subscription. Dieser Parameter erfordert einen GUID-Wert für die Abonnement-ID oder einen Zeichenfolgenwert für den Namen des Abonnements.Requires a GUID value for the subscription ID or a string value for the subscription name.
    • --management-group zum Speichern in einer Verwaltungsgruppe.--management-group - Save to a management group. Dies erfordert einen Zeichenfolgenwert.Requires a string value.
  3. Verwenden Sie den folgenden Befehl, um eine Richtlinienzuweisung zu erstellen.Use the following command to create a policy assignment. Ersetzen Sie die in <> gesetzten Angaben durch Ihre eigenen Werte.Replace example information in <> symbols with your own values.

    az policy assignment create --name '<name>' --scope '<scope>' --policy '<policy definition ID>'
    

    Die Parameter --scope für az policy assignment create kann mit einer Verwaltungsgruppe, einem Abonnement, einer Ressourcengruppe oder einer einzelnen Ressource verwendet werden.The --scope parameter on az policy assignment create works with management group, subscription, resource group, or a single resource. Der Parameter verwendet einen vollständigen Ressourcenpfad.The parameter uses a full resource path. Das Muster für --scope für die einzelnen Container ist unten aufgeführt.The pattern for --scope for each container is as follows. Ersetzen Sie {rName}, {rgName}, {subId} und {mgName} durch Ihre(n) Ressourcennamen, Ressourcengruppennamen, Abonnement-ID bzw. Namen der Verwaltungsgruppe.Replace {rName}, {rgName}, {subId}, and {mgName} with your resource name, resource group name, subscription ID, and management group name, respectively. {rType} wird durch den Ressourcentyp der Ressource ersetzt, z. B. Microsoft.Compute/virtualMachines für eine VM.{rType} would be replaced with the resource type of the resource, such as Microsoft.Compute/virtualMachines for a VM.

    • Ressource: /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}Resource - /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • Ressourcengruppe: /subscriptions/{subID}/resourceGroups/{rgName}Resource group - /subscriptions/{subID}/resourceGroups/{rgName}
    • Abonnement: /subscriptions/{subID}Subscription - /subscriptions/{subID}
    • Verwaltungsgruppe: /providers/Microsoft.Management/managementGroups/{mgName}Management group - /providers/Microsoft.Management/managementGroups/{mgName}

Sie können die ID der Azure Policy-Definition abrufen, indem Sie PowerShell mit dem folgenden Befehl verwenden:You can get the Azure Policy Definition ID by using PowerShell with the following command:

az policy definition show --name 'Audit Storage Accounts with Open Public Networks'

Die ID für die Richtliniendefinition, die Sie erstellt haben, sollte in etwa wie im folgenden Beispiel aussehen:The policy definition ID for the policy definition that you created should resemble the following example:

"/subscription/<subscriptionId>/providers/Microsoft.Authorization/policyDefinitions/Audit Storage Accounts Open to Public Networks"

Weitere Informationen zum Verwalten von Ressourcenrichtlinien mit der Azure-Befehlszeilenschnittstelle finden Sie unter Azure CLI-Ressourcenrichtlinien.For more information about how you can manage resource policies with Azure CLI, see Azure CLI Resource Policies.

Nächste SchritteNext steps

Weitere Informationen zu den in diesem Artikel verwendeten Befehlen und Abfragen finden Sie in den folgenden Artikeln.Review the following articles for more information about the commands and queries in this article.