Schnellstart: Erstellen einer Richtlinienzuweisung zum Identifizieren von nicht konformen Ressourcen mit einer ARM-Vorlage

In diesem Schnellstart verwenden Sie eine Azure Resource Manager-Vorlage (ARM-Vorlage), um eine Richtlinienzuweisung zu erstellen, die die Übereinstimmung der Ressource mit einer Azure-Richtlinie überprüft. Die Richtlinie wird einer Ressourcengruppe zugewiesen und überwacht VMs, die keine verwalteten Datenträger verwenden. Nachdem Sie die Richtlinienzuweisung erstellt haben, ermitteln Sie nicht konforme VMs.

Eine Azure Resource Manager-Vorlage ist eine JSON (JavaScript Object Notation)-Datei, welche die Infrastruktur und die Konfiguration für Ihr Projekt definiert. Die Vorlage verwendet eine deklarative Syntax. Sie beschreiben Ihre geplante Bereitstellung, ohne die Abfolge der Programmierbefehle zum Erstellen der Bereitstellung zu schreiben.

Wenn Ihre Umgebung die Voraussetzungen erfüllt und Sie mit der Verwendung von ARM-Vorlagen vertraut sind, klicken Sie auf die Schaltfläche In Azure bereitstellen. Die Vorlage wird im Azure-Portal geöffnet.

Screenshot der Schaltfläche „Bereitstellen in Azure“ zum Zuweisen einer Richtlinie mit einer Azure Resource Manager-Vorlage.

Beim Zuweisen einer integrierten Richtlinien- oder Initiativendefinition ist der Verweis auf eine Version optional. Richtlinienzuweisungen von integrierten Definitionen sind standardmäßig auf die neueste Version festgelegt und erben automatisch Nebenversionsänderungen, sofern nicht anders angegeben.

Voraussetzungen

  • Sollten Sie kein Azure-Konto haben, erstellen Sie zunächst ein kostenloses Konto.
  • Azure PowerShell oder Azure CLI.
  • Visual Studio Code und die Azure Resource Manager (ARM)-Tools.
  • Microsoft.PolicyInsights muss in Ihrem Azure-Abonnement registriert sein. Um einen Ressourcenanbieter zu registrieren, benötigen Sie die Berechtigung zum Registrieren von Ressourcenanbietern. Diese Berechtigung ist in den Rollen „Mitwirkender“ und „Besitzer“ enthalten.
  • Eine Ressourcengruppe mit mindestens einer VM, die keine verwalteten Datenträger verwendet.

Überprüfen der Vorlage

Die ARM-Vorlage erstellt eine Richtlinienzuweisung für einen Ressourcengruppenbereich und weist die integrierte Richtliniendefinition Virtuelle Computer überwachen, die keine verwalteten Datenträger verwenden zu.

Erstellen Sie die folgende ARM-Vorlage als policy-assignment.json.

  1. Öffnen Sie Visual Studio Code und wählen Sie Datei>Neue Textdatei.
  2. Kopieren Sie die ARM-Vorlage, und fügen Sie sie in Visual Studio Code ein.
  3. Wählen Sie Datei>Speichern aus, und verwenden Sie den Dateinamen policy-assignment.json.
{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "policyAssignmentName": {
      "type": "string",
      "defaultValue": "audit-vm-managed-disks",
      "metadata": {
        "description": "Policy assignment name used in assignment's resource ID"
      }
    },
    "policyDefinitionID": {
      "type": "string",
      "defaultValue": "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d",
      "metadata": {
        "description": "Policy definition ID"
      }
    },
    "policyDisplayName": {
      "type": "string",
      "defaultValue": "Audit VM managed disks",
      "metadata": {
        "description": "Display name for Azure portal"
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Authorization/policyAssignments",
      "apiVersion": "2023-04-01",
      "name": "[parameters('policyAssignmentName')]",
      "properties": {
        "policyDefinitionId": "[parameters('policyDefinitionID')]",
        "description": "Policy assignment to resource group scope created with ARM template",
        "displayName": "[parameters('policyDisplayName')]",
        "nonComplianceMessages": [
          {
            "message": "Virtual machines should use managed disks"
          }
        ]
      }
    }
  ],
  "outputs": {
    "assignmentId": {
      "type": "string",
      "value": "[resourceId('Microsoft.Authorization/policyAssignments', parameters('policyAssignmentName'))]"
    }
  }
}

Der in der ARM-Vorlage definierte Ressourcentyp ist Microsoft.Authorization/policyAssignments.

Die Vorlage verwendet drei Parameter, um die Richtlinienzuweisung bereitzustellen:

  • policyAssignmentName erstellt eine Richtlinienzuweisung namens audit-vm-managed-disks.
  • policyDefinitionID verwendet die ID der integrierten Richtliniendefinition. Die Befehle zum Abrufen der ID finden Sie im Abschnitt zum Bereitstellen der Vorlage.
  • policyDisplayName erstellt einen Anzeigenamen, der im Azure-Portal sichtbar ist.

Weitere Informationen zu ARM-Vorlagendateien:

Bereitstellen der ARM-Vorlage

Sie können die ARM-Vorlage mit Azure PowerShell oder der Azure CLI bereitstellen.

Stellen Sie in einer Visual Studio Code-Terminalsitzung eine Verbindung mit Azure her. Wenn Sie über mehrere Abonnements verfügen, führen Sie die Befehle aus, um den Kontext für Ihr Abonnement festzulegen. Ersetzen Sie <subscriptionID> durch Ihre Azure-Abonnement-ID.

Connect-AzAccount

# Run these commands if you have multiple subscriptions
Get-AzSubScription
Set-AzContext -Subscription <subscriptionID>

Sie können überprüfen, ob Microsoft.PolicyInsights registriert ist. Wenn dies nicht der Fall ist, können Sie einen Befehl ausführen, um den Ressourcenanbieter zu registrieren.

Get-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights' |
   Select-Object -Property ResourceTypes, RegistrationState

Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'

Weitere Informationen finden Sie unter Get-AzResourceProvider und Register-AzResourceProvider.

Die folgenden Befehle zeigen den Wert des policyDefinitionID-Parameters an:

(Get-AzPolicyDefinition |
  Where-Object { $_.Properties.DisplayName -eq 'Audit VMs that do not use managed disks' }).ResourceId

Die folgenden Befehle stellen die Richtliniendefinition in Ihrer Ressourcengruppe bereit. Ersetzen Sie <resourceGroupName> durch den Namen Ihrer Ressourcengruppe:

$rg = Get-AzResourceGroup -Name '<resourceGroupName>'

$deployparms = @{
Name = 'PolicyDeployment'
ResourceGroupName = $rg.ResourceGroupName
TemplateFile = 'policy-assignment.json'
}

New-AzResourceGroupDeployment @deployparms

Die $rg-Variable speichert Eigenschaften für die Ressourcengruppe. Die $deployparms-Variable verwendet Splatting, um Parameterwerte zu erstellen und die Lesbarkeit zu verbessern. Der Befehl New-AzResourceGroupDeployment verwendet die Parameterwerte, die in der $deployparms-Variablen definiert sind.

  • Name ist der Bereitstellungsname, der in der Ausgabe und in Azure für die Bereitstellungen der Ressourcengruppe angezeigt wird.
  • ResourceGroupName verwendet die $rg.ResourceGroupName-Eigenschaft, um den Namen Ihrer Ressourcengruppe abzurufen, der die Richtlinie zugewiesen ist.
  • TemplateFile gibt den Namen und Speicherort der ARM-Vorlage auf Ihrem lokalen Computer an.

Sie können die Bereitstellung der Richtlinienzuweisung mit dem folgenden Befehl überprüfen:

Der Befehl verwendet die $rg.ResourceId-Eigenschaft, um die ID der Ressourcengruppe abzurufen.

Get-AzPolicyAssignment -Name 'audit-vm-managed-disks' -Scope $rg.ResourceId
Name               : audit-vm-managed-disks
ResourceId         : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks
ResourceName       : audit-vm-managed-disks
ResourceGroupName  : {resourceGroupName}
ResourceType       : Microsoft.Authorization/policyAssignments
SubscriptionId     : {subscriptionId}
PolicyAssignmentId : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks
Properties         : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.Policy.PsPolicyAssignmentProperties

Weitere Informationen finden Sie unter Get-AzPolicyAssignment.

Identifizieren nicht konformer Ressourcen

Nachdem die Richtlinienzuweisung bereitgestellt wurde, werden VMs, die in der Ressourcengruppe bereitgestellt werden, auf die Einhaltung der Richtlinie für verwaltete Datenträger überwacht.

Es dauert einige Minuten, bis der Konformitätszustand für eine neue Richtlinienzuweisung aktiv wird und Ergebnisse zum Status der Richtlinie bereitstellt.

$complianceparms = @{
ResourceGroupName = $rg.ResourceGroupName
PolicyAssignmentName = 'audit-vm-managed-disks'
Filter = 'IsCompliant eq false'
}

Get-AzPolicyState @complianceparms

Die $complianceparms-Variable erstellt Parameterwerte, die im Befehl Get-AzPolicyState verwendet werden.

  • ResourceGroupName ruft den Ressourcengruppennamen aus der $rg.ResourceGroupName-Eigenschaft ab.
  • PolicyAssignmentName gibt den Namen an, der beim Erstellen der Richtlinienzuweisung verwendet wird.
  • Filter verwendet einen Ausdruck, um Ressourcen zu finden, die nicht mit der Richtlinienzuweisung kompatibel sind.

Ihre Ergebnisse ähneln dem folgenden Beispiel, und ComplianceState zeigt NonCompliant:

Timestamp                : 2/26/2024 19:02:56
ResourceId               : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.compute/virtualmachines/{vmId}
PolicyAssignmentId       : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.authorization/policyassignments/audit-vm-managed-disks
PolicyDefinitionId       : /providers/microsoft.authorization/policydefinitions/06a78e20-9358-41c9-923c-fb736d382a4d
IsCompliant              : False
SubscriptionId           : {subscriptionId}
ResourceType             : Microsoft.Compute/virtualMachines
ResourceLocation         : {location}
ResourceGroup            : {resourceGroupName}
ResourceTags             : tbd
PolicyAssignmentName     : audit-vm-managed-disks
PolicyAssignmentOwner    : tbd
PolicyAssignmentScope    : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}
PolicyDefinitionName     : 06a78e20-9358-41c9-923c-fb736d382a4d
PolicyDefinitionAction   : audit
PolicyDefinitionCategory : tbd
ManagementGroupIds       : {managementGroupId}
ComplianceState          : NonCompliant
AdditionalProperties     : {[complianceReasonCode, ]}

Weitere Informationen finden Sie unter Get-AzPolicyState.

Bereinigen von Ressourcen

Remove-AzPolicyAssignment -Name 'audit-vm-managed-disks' -Scope $rg.ResourceId

Abmeldung von Ihrer Azure PowerShell-Sitzung:

Disconnect-AzAccount

Nächste Schritte

In diesem Schnellstart haben Sie eine Richtliniendefinition zum Identifizieren nicht kompatibler Ressourcen in Ihrer Azure-Umgebung zugewiesen.

Fahren Sie mit dem Tutorial fort, um mehr über das Zuweisen von Richtlinien zu lernen, die überprüfen, ob Ressourcen konform sind.