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.

Als u dit proces helemaal hebt doorlopen, kunt u virtuele machines identificeren die geen beheerde schijven 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:

    provider "azurerm" {
        version = "~>2.0"
        features {}
    }
    
    resource "azurerm_policy_assignment" "auditvms" {
        name = "audit-vm-manageddisks"
        scope = 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 dat u {scope} vervangt door een van de volgende patronen:

    • 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_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 beleid toewijzing nu gemaakt. Omdat we het bestand outputs.tf hebben gedefinieerd, wordt de toewijzings-_id ook geretourneerd.

Niet-compatibele resources identificeren

Als u de resources wilt weergeven die niet conform zijn onder deze nieuwe toewijzing, gebruikt u de toewijzings-_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>/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>

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 assignment.tfplan
    

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: