Quickstart: Een beleidstoewijzing maken om niet-conforme resources met Terraform te identificeren

De eerste stap in het begrijpen van naleving in Azure is het identificeren van de status van uw resources. In deze quickstart gaat u een beleidstoewijzing maken voor het identificeren van virtuele machines die geen beheerde schijven gebruiken.

Aan het einde van dit proces kunt u virtuele machines identificeren die geen beheerde schijven in het abonnement gebruiken. Ze zijn niet-compatibel met de beleidstoewijzing.

Vereisten

De configuratie, de variabele en het uitvoerbestand van Terraform maken

In deze quickstart maakt u een beleidstoewijzing en wijst u de definitie Controleer virtuele machines die niet gebruikmaken van beheerde schijven (06a78e20-9358-41c9-923c-fb736d382a4d) toe. Deze beleidsdefinitie identificeert resources die niet voldoen aan de voorwaarden die zijn vastgelegd in de beleidsdefinitie.

Configureer eerst de configuratie, de variabele en het uitvoerbestand van Terraform De Terraform-resources voor Azure Policy gebruiken de Azure-provider.

  1. Maak een nieuwe map met de naam policy-assignment en zet de mappen hierin.

  2. Maak main.tf met de volgende code:

    Notitie

    Als u een beleidstoewijzing wilt maken in een beheergroep, gebruikt u de azurerm_management_group_policy_assignment resource, gebruikt u voor een resourcegroep de azurerm_resource_group_policy_assignment en voor een abonnement de azurerm_subscription_policy_assignment resource.

      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. Maak variables.tf met de volgende code:

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

    Het bereik bepaalt op welke resources of groep resources de beleidstoewijzing wordt afgedwongen. Het kan variëren van een beheergroep tot een afzonderlijke resource. Zorg ervoor dat u vervangt door {scope} een van de volgende patronen op basis van de gedeclareerde resource:

    • Abonnement: /subscriptions/{subscriptionId}
    • Resourcegroep: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
    • Resource: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]
  4. Maak output.tf met de volgende code:

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

Terraform initialiseren en een plan maken

Initialiseer vervolgens Terraform om de benodigde providers te downloaden en maak vervolgens een plan.

  1. Voer de opdracht terraform init uit. Met deze opdracht worden de Azure-modules gedownload die vereist zijn voor het maken van de Azure-resources in de Terraform-configuratie.

    terraform init
    

    Schermopname van het uitvoeren van de terraform init-opdracht waarin het downloaden van de azurerm-module en het succesbericht wordt weergegeven.

  2. Verifieer met Azure CLI voor Terraform. Zie voor meer informatie Azure-provider: Verifiëren met behulp van de Azure CLI.

    az login
    
  3. Maak het uitvoeringsplan met de opdracht terraform plan en de parameter out.

    terraform plan -out assignment.tfplan
    

    Schermopname van het uitvoeren van de opdracht ‘terraform plan’ en parameter ‘out’ om de Azure-resource weer te geven die zou worden gemaakt.

    Notitie

    Zie voor informatie over permanente uitvoeringsplannen en beveiliging Terraform Plan: Beveiligingswaarschuwing.

Een Terraform-uitvoeringsplan toepassen

Pas het uitvoeringsplan als laatste toe.

Voer de opdracht terraform apply uit en geef het assignment.tfplan op dat al is gemaakt.

terraform apply assignment.tfplan

Schermopname van het uitvoeren van de opdracht ‘terraform apply’ en vervolgens het maken van de resource.

Met de 'Apply voltooid! Resources: 1 toegevoegd, 0 gewijzigd, 0 vernietigd.", wordt de beleidstoewijzing nu gemaakt. Omdat we het outputs.tf bestand hebben gedefinieerd, wordt ook de assignment_id geretourneerd.

Niet-compatibele resources identificeren

Als u de resources wilt weergeven die niet compatibel zijn onder deze nieuwe toewijzing, gebruikt u de assignment_id geretourneerd door terraform apply. Voer daarbij de volgende opdracht uit om de resource-id's te verkrijgen van de niet-conforme resources. Deze worden uitgevoerd naar een JSON-bestand:

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>

De resultaten zien er ongeveer als volgt uit:

{
    "@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>"
        }

    ]
}

De resultaten zijn vergelijkbaar met wat in de weergave van de Azure-portal meestal wordt vermeld onder Niet-compatibele resources.

Resources opschonen

Als u de gemaakte toewijzing wilt verwijderen, gebruikt u Azure CLI of draait u het Terraform-uitvoeringsplan om met terraform destroy.

  • Azure CLI

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

    terraform destroy
    

Volgende stappen

In deze Quick Start hebt u een beleidsdefinitie toegewezen om niet-compatibele resources in uw Azure-omgeving te identificeren.

Ga voor meer informatie over het toewijzen van beleid om te controleren of nieuwe resources conform zijn verder met de zelfstudie voor: