Schnellstart: Erstellen einer Richtlinienzuweisung zum Identifizieren nicht konformer Ressourcen mithilfe von Terraform

Zum Verständnis der Konformität in Azure müssen Sie zunächst wissen, wie Sie den Status Ihrer Ressourcen ermitteln. Diese Schnellstartanleitung führt Sie schrittweise durch die Erstellung einer Richtlinienzuweisung zur Identifizierung von virtuellen Computern, die keine verwalteten Datenträger verwenden.

Am Ende dieses Prozesses können Sie erfolgreich virtuelle Computer identifizieren, die keine verwalteten Datenträger verwenden. Sie sind mit der Richtlinienzuweisung nicht konform.

Voraussetzungen

  • Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
  • In Ihrer Umgebung muss mindestens Version 0.12.0 von Terraform konfiguriert sein. Anweisungen finden Sie unter Konfigurieren von Terraform mit Azure Cloud Shell.
  • Für diesen Schnellstart muss mindestens Version 2.13.0 der Azure CLI ausgeführt werden. Führen Sie az --version aus, um die Version zu finden. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure CLI.

Erstellen der Terraform-Konfiguration, -Variablen und -Ausgabedatei

In dieser Schnellstartanleitung erstellen Sie eine Richtlinienzuweisung und weisen die Definition Virtuelle Computer überwachen, die keine verwalteten Datenträger verwenden (06a78e20-9358-41c9-923c-fb736d382a4d) zu. Mit dieser Richtliniendefinition werden Ressourcen identifiziert, die die in der Richtliniendefinition festgelegten Bedingungen nicht erfüllen.

Konfigurieren Sie zunächst die Konfiguration, die Variable und die Ausgabedateien in Terraform. Für die Terraform-Ressourcen für Azure Policy wird der Azure-Anbieter genutzt.

  1. Erstellen Sie einen neuen Ordner mit dem Namen policy-assignment, und navigieren Sie zu diesem Verzeichnis.

  2. Erstellen Sie main.tf mit dem folgenden Code:

    provider "azurerm" {
      features {}
    }
    
    terraform { 
     required_providers { 
         azurerm = { 
             source = "hashicorp/azurerm"
             version = ">= 2.96.0" 
         } 
     } 
    }
    
    resource "azurerm_resource_policy_assignment" "auditvms" { 
     name = "audit-vm-manageddisks" 
     resource_id = var.cust_scope 
     policy_definition_id = "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d" 
     description = "Shows all virtual machines not using managed disks" 
     display_name = "Audit VMs without managed disks assignment" 
    }
    
  3. Erstellen Sie variables.tf mit dem folgenden Code:

    variable "cust_scope" {
        default = "{scope}"
    }
    

    Ein Bereich bestimmt, für welche Ressourcen oder Ressourcengruppe die Richtlinienzuweisung erzwungen wird. Ein solcher Bereich kann eine Verwaltungsgruppe oder auch nur eine einzelne Ressource sein. Ersetzen Sie {scope} unbedingt durch eins der folgenden Muster:

    • Abonnement: /subscriptions/{subscriptionId}
    • Ressourcengruppe: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
    • Ressource: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]
  4. Erstellen Sie output.tf mit dem folgenden Code:

    output "assignment_id" {
        value = azurerm_resource_policy_assignment.auditvms.id
    }
    

Initialisieren von Terraform und Erstellen eines Plans

Initialisieren Sie anschließend Terraform, um die erforderlichen Anbieter herunterzuladen, und erstellen Sie dann einen Plan.

  1. Führen Sie den Befehl terraform init aus. Mit diesem Befehl werden die Azure-Module heruntergeladen, die zum Erstellen der Azure-Ressourcen in der Terraform-Konfiguration erforderlich sind.

    terraform init
    

    Screenshot of running the terraform init command that shows downloading the azurerm module and a success message.

  2. Authentifizieren Sie sich mit der Azure CLI für Terraform. Weitere Informationen finden Sie unter Azure-Anbieter: Authentifizieren mithilfe der Azure CLI.

    az login
    
  3. Erstellen Sie den Ausführungsplan mit dem Befehl terraform plan und dem Parameter out.

    terraform plan -out assignment.tfplan
    

    Screenshot of running the terraform plan command and out parameter to show the Azure resource that would be created.

    Hinweis

    Weitere Informationen zum Beibehalten von Ausführungsplänen und zur Sicherheit finden Sie unter Terraform-Plan: Sicherheitswarnung.

Anwenden des Terraform-Ausführungsplans

Wenden Sie zum Schluss den Ausführungsplan an.

Führen Sie den Befehl terraform apply aus, und geben Sie das bereits erstellte Element assignment.tfplan an.

terraform apply assignment.tfplan

Screenshot of running the terraform apply command and the resulting resource creation.

Die Richtlinienzuweisung wird mit der Meldung „Apply complete! Resources: 1 added, 0 changed, 0 destroyed.“ (Anwendung abgeschlossen: Ressourcen: 1 hinzugefügt, 0 geändert, 0 zerstört) erstellt. Da Sie die Datei outputs.tf definiert haben, wird außerdem assignment_id zurückgegeben.

Identifizieren nicht konformer Ressourcen

Wenn Sie die nicht konformen Ressourcen unter dieser neuen Zuweisung anzeigen möchten, verwenden Sie die von terraform apply zurückgegebene Zuweisungs-ID (assignment_id). Führen Sie damit den folgenden Befehl aus, um die Ressourcen-IDs der nicht konformen Ressourcen abzurufen, die in einer JSON-Datei ausgegeben werden:

armclient post "/subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$filter=IsCompliant eq false and PolicyAssignmentId eq '<policyAssignmentID>'&$apply=groupby((ResourceId))" > <json file to direct the output with the resource IDs into>

Ihre Ergebnisse sollten in etwa wie im folgenden Beispiel aussehen:

{
    "@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest",
    "@odata.count": 3,
    "value": [{
            "@odata.id": null,
            "@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
            "ResourceId": "/subscriptions/<subscriptionId>/resourcegroups/<rgname>/providers/microsoft.compute/virtualmachines/<virtualmachineId>"
        },
        {
            "@odata.id": null,
            "@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
            "ResourceId": "/subscriptions/<subscriptionId>/resourcegroups/<rgname>/providers/microsoft.compute/virtualmachines/<virtualmachine2Id>"
        },
        {
            "@odata.id": null,
            "@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
            "ResourceId": "/subscriptions/<subscriptionName>/resourcegroups/<rgname>/providers/microsoft.compute/virtualmachines/<virtualmachine3ID>"
        }

    ]
}

Die Ergebnisse sind vergleichbar mit dem, was üblicherweise in der Azure-Portalansicht unter Nicht konforme Ressourcen zu sehen ist.

Bereinigen von Ressourcen

Verwenden Sie zum Entfernen der erstellten Zuweisung die Azure CLI, oder kehren Sie den Terraform-Ausführungsplan mit terraform destroy um.

  • Azure CLI

    az policy assignment delete --name 'audit-vm-manageddisks' --scope '/subscriptions/<subscriptionID>/<resourceGroupName>'
    
  • Terraform

    terraform destroy assignment.tfplan
    

Nächste Schritte

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

Weitere Informationen zum Zuweisen von Richtlinien, die die Konformität neuer Ressourcen überprüfen, finden Sie im folgenden Tutorial: