Dela via


Snabbstart: Skapa en principtilldelning för att identifiera icke-kompatibla resurser med Terraform

Det första steget mot att förstå kompatibilitet i Azure är att identifiera dina resursers status. Denna snabbstart vägleder dig genom processen för att skapa en principtilldelning som identifierar virtuella datorer som inte använder hanterade diskar.

I slutet av den här processen identifierar du virtuella datorer som inte använder hanterade diskar i hela prenumerationen. De är inkompatibla med principtilldelningen.

När du tilldelar en inbyggd princip eller initiativdefinition är det valfritt att referera till en version. Principtilldelningar av inbyggda definitioner är standard för den senaste versionen och ärver automatiskt delversionsändringar om inget annat anges.

Förutsättningar

Skapa Terraform-konfigurations-, variabel- och utdatafilen

I den här snabbstarten skapar du en principtilldelning och tilldelar definitionen Granska virtuella datorer som inte använder hanterade diskar. Den här principdefinitionen identifierar resurser som inte uppfyller villkoren i principdefinitionen.

Konfigurera Terraform-konfigurations-, variabel- och utdatafilerna. Terraform-resurserna för Azure Policy använder Azure-providern.

  1. Skapa en ny mapp med namnet policy-assignment och ändra kataloger till den.

  2. Skapa main.tf med följande kod:

    Kommentar

    Om du vill skapa en principtilldelning i en hanteringsgrupp använder du den azurerm_management_group_policy_assignment resursen, för en resursgrupp använder du azurerm_resource_group_policy_assignment och för en prenumeration använder du azurerm_subscription_policy_assignment resursen.

      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. Skapa variables.tf med följande kod:

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

    Ett omfång avgör vilka resurser eller grupper med resurser som principtilldelningen används i. Det kan sträcka sig från en hanteringsgrupp till en enskild resurs. Ersätt {scope} med något av följande mönster baserat på den deklarerade resursen:

    • Prenumeration: /subscriptions/{subscriptionId}
    • Resursgrupp: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
    • Resurs: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]
  4. Skapa output.tf med följande kod:

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

Initiera Terraform och skapa plan

Initiera Terraform för att ladda ned nödvändiga leverantörer och skapa sedan en plan.

  1. Kör kommandot terraform init. Det här kommandot laddar ned de Azure-moduler som krävs för att skapa Azure-resurserna i Terraform-konfigurationen.

    terraform init
    

    Skärmbild av att köra kommandot terraform init som visar nedladdning av azurerm-modulen och ett meddelande om att det lyckades.

  2. Autentisera med Azure CLI för Terraform. Mer information finns i Azure-providern: Autentisera med hjälp av Azure CLI.

    az login
    
  3. Skapa körningsplanen med terraform-plankommandot och out-parametern .

    terraform plan -out assignment.tfplan
    

    Skärmbild av körning av terraform-plankommandot och out-parametern för att visa den Azure-resurs som skulle skapas.

    Kommentar

    Information om hur du bevarar körningsplaner och säkerhet finns i Terraform-plan: Säkerhetsvarning.

Använd Terraform-körningsplanen

Tillämpa körningsplanen.

Kör kommandot terraform apply och ange den som redan har skapatsassignment.tfplan.

terraform apply assignment.tfplan

Skärmbild av körningen av kommandot terraform apply och den resulterande resursen.

Med meddelandet Apply complete! Resources: 1 added, 0 changed, 0 destroyed. skapas nu principtilldelningen. Eftersom vi definierade outputs.tf filen returneras även assignment_id.

Identifiera icke-kompatibla resurser

Om du vill visa de resurser som inte är kompatibla under den här nya tilldelningen använder du assignment_id som returneras av terraform apply. Kör följande kommando för att hämta resurs-ID:t för de icke-kompatibla resurser som matas ut till en JSON-fil:

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>

Ditt resultat liknar följande exempel:

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

Resultatet är jämförbart med det du vanligtvis skulle se under Icke-kompatibla resurser i Azure-portalens vy.

Rensa resurser

Om du vill ta bort den skapade tilldelningen använder du Azure CLI eller återställer Terraform-körningsplanen med terraform destroy.

  • Azure CLI

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

    terraform destroy
    

Nästa steg

I den här snabbstarten har du tilldelat en principdefinition för att identifiera icke-kompatibla resurser i Azure-miljön.

Om du vill ha mer information om tilldelning av principer för att kontrollera att de nya resurserna är kompatibla fortsätter du till självstudiekursen för att: