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.

Efter den här genomgången kommer du att kunna identifiera virtuella datorer som inte använder hanterade diskar. De är inkompatibla med principtilldelningen.

Förutsättningar

  • Om du inte har en Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.
  • Terraform version 0.12.0 eller senare konfigurerad i din miljö. Anvisningar finns i Konfigurera Terraform med hjälp av Azure Cloud Shell.
  • Den här snabbstarten kräver att du kör Azure CLI version 2.13.0 eller senare. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.

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 ( 06a78e20-9358-41c9-923c-fb736d382a4d ). Den här principdefinitionen identifierar resurser som inte uppfyller villkoren i principdefinitionen.

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

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

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

    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. 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 vara allt från en hanteringsgrupp till en enskild resurs. Se till att {scope} ersätta med något av följande mönster:

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

Initiera Terraform och skapa en plan

Initiera sedan 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 terraform init-kommandot 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 Provider: Authenticating using the Azure CLI (Azure-provider: Autentisera med Hjälp av Azure CLI).

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

    terraform plan -out assignment.tfplan
    

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

    Anteckning

    Information om ständiga körningsplaner och säkerhet finns i Terraform-plan: Säkerhetsvarning.

Använd Terraform-körningsplanen

Tillämpa sedan körningsplanen.

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

terraform apply assignment.tfplan

Skärmbild av att köra terraform apply-kommandot och den resulterande resursskapandet.

Med "Tillämpa klart! Resurser: 1 tillagd, 0 ändrad, 0 förstörs." skapas principtilldelningen nu. Eftersom vi definierade outputs.tf filen returneras även _ tilldelnings-ID:t.

Identifiera icke-kompatibla resurser

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

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>

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 tilldelningen som skapats använder du Azure CLI eller omvänder Terraform-körningsplanen med terraform destroy .

  • Azure CLI

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

    terraform destroy assignment.tfplan
    

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 validera att de nya resurserna är kompatibla fortsätter du till självstudien för att: