Schnellstart: Erstellen einer Richtlinienzuweisung zum Identifizieren von nicht konformen Ressourcen mit einer Bicep-Datei

In diesem Schnellstart verwenden Sie eine Bicep-Datei, um eine Richtlinienzuweisung zu erstellen, mit der Sie die Konformität einer Ressource mit einer Azure-Richtlinie überprüfen. Die Richtlinie wird einer Ressourcengruppe zugewiesen und überwacht VMs, die keine verwalteten Datenträger verwenden. Nachdem Sie die Richtlinienzuweisung erstellt haben, identifizieren Sie VMs, die nicht konform sind.

Bicep ist eine domänenspezifische Sprache (Domain-Specific Language, DSL), die eine deklarative Syntax zur Bereitstellung von Azure-Ressourcen verwendet. Sie bietet eine präzise Syntax, zuverlässige Typsicherheit und Unterstützung für die Wiederverwendung von Code. Bicep bietet die beste Form der Erstellung für Ihre Infrastructure-as-Code-Lösungen in Azure.

Voraussetzungen

Überprüfen der Bicep-Datei

Die Bicep-Datei 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 Bicep-Datei als policy-assignment.bicep.

  1. Öffnen Sie Visual Studio Code und wählen Sie Datei>Neue Textdatei.
  2. Kopieren Sie die Bicep-Datei, und fügen Sie sie in Visual Studio Code ein.
  3. Wählen Sie Datei>Speichern aus, und verwenden Sie den Dateinamen policy-assignment.bicep.
param policyAssignmentName string = 'audit-vm-managed-disks'
param policyDefinitionID string = '/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d'
param policyDisplayName string = 'Audit VM managed disks'

resource assignment 'Microsoft.Authorization/policyAssignments@2023-04-01' = {
  name: policyAssignmentName
  scope: resourceGroup()
  properties: {
    policyDefinitionId: policyDefinitionID
    description: 'Policy assignment to resource group scope created with Bicep file'
    displayName: policyDisplayName
    nonComplianceMessages: [
      {
        message: 'Virtual machines should use managed disks'
      }
    ]
  }
}

output assignmentId string = assignment.id

Der in der Bicep-Datei definierte Ressourcentyp ist Microsoft.Authorization/policyAssignments.

Die Bicep-Datei 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 Bicep-Dateien:

Bereitstellen der Bicep-Datei

Sie können die Bicep-Datei 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.bicep'
}

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 Bicep-Datei 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/20/2024 18:55:45
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.