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 identifizieren Sie VMs, die keine verwalteten Datenträger in Abonnements verwenden. Sie sind mit der Richtlinienzuweisung nicht konform.

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

  • 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 zu. Mit dieser Richtliniendefinition werden Ressourcen identifiziert, die die in der Richtliniendefinition festgelegten Bedingungen nicht erfüllen.

Konfigurieren Sie die Konfiguration, die Variable und die Ausgabedateien für 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:

    Hinweis

    Verwenden Sie zum Erstellen einer Richtlinienzuweisung in einer Verwaltungsgruppe die Ressource azurerm_management_group_policy_assignment, für eine Ressourcengruppe die Ressource azurerm_resource_group_policy_assignment und für ein Abonnement die Ressource azurerm_subscription_policy_assignment.

      provider "azurerm" {
        features {}
      }
    
      terraform {
      required_providers {
          azurerm = {
              source = "hashicorp/azurerm"
              version = ">= 2.96.0"
          }
        }
      }
    
      resource "azurerm_subscription_policy_assignment" "auditvms" {
      name = "audit-vm-manageddisks"
      subscription_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. Stellen Sie sicher, dass Sie {scope} basierend auf der deklarierten Ressource durch eines der folgenden Muster ersetzen:

    • 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_subscription_policy_assignment.auditvms.id
    }
    

Initialisieren von Terraform und Erstellen eines Plans

Initialisieren Sie 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, der die Ausführung des Befehls „terraform init“ sowie das Herunterladen des AzureRM-Moduls und eine Erfolgsmeldung zeigt

  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: Ausführen des Befehls „terraform plan“ und des Parameters „out“, um die Azure-Ressource zu zeigen, die erstellt wird

    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 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: Ausführen des Befehls „terraform apply“ und resultierende Ressourcenerstellung

Mit der Meldung Apply complete! Resources: 1 added, 0 changed, 0 destroyed. wird die Richtlinienzuweisung jetzt 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>/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
    

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: