Programmgesteuertes Erstellen von Richtlinien

In diesem Artikel wird das programmgesteuerte Erstellen und Verwalten von Richtlinien Schritt für Schritt beschrieben. Mit Azure Policy-Definitionen werden verschiedene Regeln und Auswirkungen für Ihre Ressourcen erzwungen. Durch die Erzwingung wird sichergestellt, dass die Ressourcen stets konform mit Ihren Unternehmensstandards und Vereinbarungen zum Servicelevel bleiben.

Weitere Informationen zur Konformität finden Sie unter Abrufen von Konformitätsdaten.

Voraussetzungen

Stellen Sie zunächst sicher, dass die folgenden Voraussetzungen erfüllt sind:

  1. Installieren Sie den ARMClient, falls Sie dies noch nicht durchgeführt haben. Mit diesem Tool werden HTTP-Anforderungen an Azure Resource Manager-basierte APIs gesendet.

  2. Aktualisieren Sie Ihr Azure PowerShell-Modul auf die neueste Version. Ausführliche Informationen finden Sie unter Installieren des Azure PowerShell-Moduls. Weitere Informationen zur aktuellen Version finden Sie unter Azure PowerShell.

  3. Registrieren Sie den Azure-Ressourcenanbieter „Policy Insights“ über Azure PowerShell, um zu prüfen, ob Ihr Abonnement mit dem Ressourcenanbieter funktioniert. Um einen Ressourcenanbieter zu registrieren, benötigen Sie die Berechtigungen zum Ausführen des Vorgangs „Aktion registrieren“ für den Ressourcenanbieter. Dieser Vorgang ist in den Rollen „Mitwirkender“ und „Besitzer“ enthalten. Führen Sie den folgenden Befehl aus, um den Ressourcenanbieter zu registrieren:

    Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
    

    Weitere Informationen zum Registrieren und Anzeigen von Ressourcenanbietern finden Sie unter Ressourcenanbieter und -typen.

  4. Installieren Sie die Azure CLI, falls Sie dies noch nicht getan haben. Sie finden die aktuelle Version unter Installieren der Azure CLI unter Windows.

Erstellen und Zuweisen einer Richtliniendefinition

Im ersten Schritt zur besseren Sichtbarkeit Ihrer Ressourcen werden Richtlinien für die Ressourcen erstellt und zugewiesen. Im nächsten Schritt erfahren Sie, wie Sie eine Richtlinie programmgesteuert erstellen und zuweisen. Mit der Beispielrichtlinie werden Speicherkonten überprüft, die für alle öffentlichen Netzwerke offen sind, indem PowerShell, Azure CLI und HTTP-Anforderungen verwendet werden.

Erstellen und Zuweisen einer Richtliniendefinition mit PowerShell

  1. Verwenden Sie den folgenden JSON-Codeausschnitt, um eine JSON-Datei mit dem Namen „AuditStorageAccounts.json“ zu erstellen.

    {
      "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.

  2. Führen Sie den folgenden Befehl aus, um mit der Datei AuditStorageAccounts.json eine Richtliniendefinition zu erstellen.

    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. Weitere Informationen zu anderen Parametern, die Sie verwenden können, finden Sie unter New-AzPolicyDefinition.

    New-AzPolicyDefinition speichert die Richtliniendefinition standardmäßig im ausgewählten Abonnement des Sitzungskontexts bei Aufruf ohne Speicherortparameter. Um die Definition an einem anderen Speicherort zu speichern, verwenden Sie die folgenden Parameter:

    • SubscriptionId zum Speichern in einem anderen Abonnement. Dies erfordert einen GUID-Wert.
    • ManagementGroupName zum Speichern in einer Verwaltungsgruppe. Dies erfordert einen Zeichenfolgenwert.
  3. Nach dem Erstellen der Richtliniendefinition können Sie eine Richtlinienzuweisung erstellen. Führen Sie dazu die folgenden Befehle aus:

    $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.

    Der Parameter Scope für New-AzPolicyAssignment kann mit einer Verwaltungsgruppe, einem Abonnement, einer Ressourcengruppe oder einer einzelnen Ressource verwendet werden. Der Parameter verwendet einen vollständigen Ressourcenpfad, den die Eigenschaft ResourceId in Get-AzResourceGroup zurückgibt. Das Muster für Scope für die einzelnen Container ist unten aufgeführt. Ersetzen Sie {rName}, {rgName}, {subId} und {mgName} durch Ihre(n) Ressourcennamen, Ressourcengruppennamen, Abonnement-ID bzw. Namen der Verwaltungsgruppe. {rType} wird durch den Ressourcentyp der Ressource ersetzt, z. B. Microsoft.Compute/virtualMachines für eine VM.

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

Weitere Informationen zum Verwalten von Ressourcenrichtlinien unter Verwendung des Resource Manager-PowerShell-Moduls finden Sie unter Az.Resources.

Erstellen und Zuweisen einer Richtliniendefinition per ARMClient

Verwenden Sie das folgende Verfahren, um eine Richtliniendefinition zu erstellen.

  1. Kopieren Sie den folgenden JSON-Codeausschnitt, um eine JSON-Datei zu erstellen. Sie rufen die Datei im nächsten Schritt auf.

    "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:

    # For defining a policy in a subscription
    armclient PUT "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyDefinitions/AuditStorageAccounts?api-version=2021-09-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=2021-09-01" @<path to policy definition JSON file>
    

    Ersetzen Sie {subscriptionId} durch die ID Ihres Abonnements oder {managementGroupId} durch die ID Ihrer Verwaltungsgruppe.

    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).

Verwenden Sie das folgende Verfahren, um eine Richtlinienzuweisung zu erstellen und die Richtliniendefinition auf Ressourcengruppenebene zuzuweisen.

  1. Kopieren Sie den folgenden JSON-Codeausschnitt, um eine Datei mit einer JSON-Richtlinienzuweisung zu erstellen. Ersetzen Sie die in <> gesetzten Angaben durch Ihre eigenen Werte.

    {
      "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:

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

    Ersetzen Sie die in <> gesetzten Angaben durch Ihre eigenen Werte.

    Weitere Informationen zur Durchführung von HTTP-Aufrufen für die REST-API finden Sie unter Azure-REST-API-Ressourcen.

Erstellen und Zuweisen einer Richtliniendefinition mit der Azure-Befehlszeilenschnittstelle

Verwenden Sie das folgende Verfahren, um eine Richtliniendefinition zu erstellen:

  1. Kopieren Sie den folgenden JSON-Codeausschnitt, um eine Datei mit einer JSON-Richtlinienzuweisung zu erstellen.

    {
      "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.

  2. Führen Sie den folgenden Befehl aus, um eine Richtliniendefinition zu erstellen:

    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. Weitere Informationen zu anderen Parametern, die Sie verwenden können, finden Sie unter az policy definition create.

    az policy definition creation speichert die Richtliniendefinition standardmäßig im ausgewählten Abonnement des Sitzungskontexts bei Aufruf ohne Speicherortparameter. Um die Definition an einem anderen Speicherort zu speichern, verwenden Sie die folgenden Parameter:

    • subscription zum Speichern in einem anderen Abonnement. Dieser Parameter erfordert einen GUID-Wert für die Abonnement-ID oder einen Zeichenfolgenwert für den Namen des Abonnements.
    • management-group zum Speichern in einer Verwaltungsgruppe. Dies erfordert einen Zeichenfolgenwert.
  3. Verwenden Sie den folgenden Befehl, um eine Richtlinienzuweisung zu erstellen. Ersetzen Sie die in spitze Klammern < > gesetzten Angaben durch Ihre eigenen Werte.

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

    Der Parameter scope für az policy assignment create kann mit einer Verwaltungsgruppe, einem Abonnement, einer Ressourcengruppe oder einer einzelnen Ressource verwendet werden. Der Parameter verwendet einen vollständigen Ressourcenpfad. Das Muster für scope für die einzelnen Container ist unten aufgeführt. Ersetzen Sie {rName}, {rgName}, {subId} und {mgName} durch Ihre(n) Ressourcennamen, Ressourcengruppennamen, Abonnement-ID bzw. Namen der Verwaltungsgruppe. {rType} wird durch den Ressourcentyp der Ressource ersetzt, z. B. Microsoft.Compute/virtualMachines für eine VM.

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

Sie können die ID der Azure Policy-Definition abrufen, indem Sie PowerShell mit dem folgenden Befehl verwenden:

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:

"/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.

Nächste Schritte

Weitere Informationen zu den in diesem Artikel verwendeten Befehlen und Abfragen finden Sie in den folgenden Artikeln.