Delen via


Quickstart: Een beleidstoewijzing maken om niet-compatibele resources te identificeren met Behulp van Terraform

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 identificeert u virtuele machines die geen beheerde schijven in het abonnement gebruiken. Ze zijn niet-compatibel met de beleidstoewijzing.

Wanneer u een ingebouwde beleids- of initiatiefdefinitie toewijst, is het optioneel om te verwijzen naar een versie. Beleidstoewijzingen van ingebouwde definities zijn standaard ingesteld op de meest recente versie en nemen automatisch kleine versiewijzigingen over, tenzij anders opgegeven.

Vereisten

De configuratie, de variabele en het uitvoerbestand van Terraform maken

In deze snelstart maakt u een beleidstoewijzing en wijst u de definitie Controleer virtuele machines die niet gebruikmaken van beheerde schijven toe. Deze beleidsdefinitie identificeert resources die niet voldoen aan de voorwaarden die zijn vastgelegd in de beleidsdefinitie.

Configureer de Terraform-configuratie, -variabele en -uitvoerbestanden. 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 bij een beheergroep, gebruikt u de azurerm_management_group_policy_assignment resource voor een resourcegroep de azurerm_resource_group_policy_assignment en voor een abonnement gebruikt u 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 voor welke resources of groep resources de beleidstoewijzing wordt afgedwongen. Het kan variëren van een beheergroep tot een afzonderlijke resource. Zorg ervoor dat u een van de volgende patronen vervangt {scope} 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 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 Azure Provider: Verifiëren met behulp van de Azure CLI voor meer informatie.

    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 Terraform-plan: Beveiligingswaarschuwing voor meer informatie over persistente uitvoeringsplannen en beveiliging.

Een Terraform-uitvoeringsplan toepassen

Pas het uitvoeringsplan 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 het Apply complete! Resources: 1 added, 0 changed, 0 destroyed. bericht wordt de beleidstoewijzing nu gemaakt. Omdat we het outputs.tf bestand hebben gedefinieerd, wordt de assignment_id ook 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: