Szybki start: tworzenie przypisania zasad w celu identyfikowania niezgodnych zasobów przy użyciu narzędzia Terraform

Pierwszym krokiem do zrozumienia pojęcia zgodności na platformie Azure jest określenie obecnej sytuacji dotyczącej Twoich zasobów. Ten przewodnik Szybki start przeprowadzi Cię przez proces tworzenia przypisania zasad w celu zidentyfikowania maszyn wirtualnych, które nie korzystają z dysków zarządzanych.

Po zakończeniu tego procesu pomyślnie zidentyfikujesz maszyny wirtualne, które nie korzystają z dysków zarządzanych w ramach subskrypcji. Są one niezgodne z przypisaniem zasad.

Wymagania wstępne

Tworzenie pliku konfiguracji, zmiennej i wyjściowej narzędzia Terraform

W tym przewodniku Szybki start utworzysz przypisanie zasad i przypiszesz definicję Przeprowadź inspekcję maszyn wirtualnych, które nie używają dysków zarządzanych (06a78e20-9358-41c9-923c-fb736d382a4d). Ta definicja zasad identyfikuje zasoby, które nie spełniają warunków określonych w definicji zasad.

Najpierw skonfiguruj pliki konfiguracji, zmiennej i wyjściowe programu Terraform. Zasoby narzędzia Terraform dla Azure Policy korzystać z dostawcy platformy Azure.

  1. Utwórz nowy folder o nazwie policy-assignment i zmień w nim katalogi.

  2. Utwórz main.tf za pomocą następującego kodu:

    Uwaga

    Aby utworzyć przypisanie zasad w grupie zarządzania, użyj zasobu azurerm_management_group_policy_assignment , w przypadku grupy zasobów użyj azurerm_resource_group_policy_assignment , a dla subskrypcji użyj zasobu azurerm_subscription_policy_assignment .

      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. Utwórz variables.tf za pomocą następującego kodu:

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

    Zakres określa, jakie zasoby lub grupy zasobów są wymuszane w ramach przypisania zasad. Może to być zakres od grupy zarządzania do pojedynczego zasobu. Pamiętaj, aby zastąpić {scope} jedną z następujących wzorców na podstawie zadeklarowanego zasobu:

    • Subskrypcje: /subscriptions/{subscriptionId}
    • Grupa zasobów: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
    • Zasobów: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]
  4. Utwórz output.tf za pomocą następującego kodu:

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

Inicjowanie programu Terraform i tworzenie planu

Następnie zainicjuj narzędzie Terraform, aby pobrać niezbędnych dostawców, a następnie utworzyć plan.

  1. Uruchom polecenie terraform init . To polecenie pobiera moduły platformy Azure wymagane do utworzenia zasobów platformy Azure w konfiguracji narzędzia Terraform.

    terraform init
    

    Zrzut ekranu przedstawiający uruchomienie polecenia terraform init, które pokazuje pobieranie modułu azurerm i komunikat o powodzeniu.

  2. Uwierzytelnianie za pomocą interfejsu wiersza polecenia platformy Azure dla programu Terraform. Aby uzyskać więcej informacji, zobacz Azure Provider: Authenticating using the Azure CLI (Dostawca platformy Azure: uwierzytelnianie przy użyciu interfejsu wiersza polecenia platformy Azure).

    az login
    
  3. Utwórz plan wykonania za pomocą polecenia terraform plan i parametru out .

    terraform plan -out assignment.tfplan
    

    Zrzut ekranu przedstawiający uruchomienie polecenia i parametru planu terraform w celu wyświetlenia utworzonego zasobu platformy Azure.

    Uwaga

    Aby uzyskać informacje na temat utrwalania planów wykonywania i zabezpieczeń, zobacz Terraform Plan: Ostrzeżenie o zabezpieczeniach.

Zastosowanie planu wykonania programu Terraform

Na koniec zastosuj plan wykonania.

Uruchom polecenie terraform apply i określ assignment.tfplan już utworzone polecenie.

terraform apply assignment.tfplan

Zrzut ekranu przedstawiający uruchamianie polecenia apply narzędzia terraform i wynikowego tworzenia zasobów.

Z komunikatem "Zastosuj ukończono! Zasoby: 1 dodane, 0 zmienione, 0 zniszczone." komunikat, przypisanie zasad jest teraz tworzone. Ponieważ zdefiniowaliśmy outputs.tf plik, zwracany jest również assignment_id.

Identyfikowanie niezgodnych zasobów

Aby wyświetlić zasoby, które nie są zgodne w ramach tego nowego przypisania, użyj assignment_id zwróconych przez terraform applypolecenie . Uruchom następujące polecenie, aby pobrać identyfikatory zasobów niezgodnych zasobów, które są danymi wyjściowymi w pliku JSON:

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>

Wyniki powinny wyglądać podobnie do następujących:

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

    ]
}

Wyniki są porównywalne z zawartością zwykle wyświetlaną w obszarze Niezgodne zasoby w widoku witryny Azure Portal.

Czyszczenie zasobów

Aby usunąć utworzone przypisanie, użyj interfejsu wiersza polecenia platformy Azure lub odwrócić plan wykonywania programu Terraform za pomocą polecenia terraform destroy.

  • Interfejs wiersza polecenia platformy Azure

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

    terraform destroy
    

Następne kroki

W tym przewodniku Szybki start została przypisana definicja zasad mających na celu zidentyfikowanie niezgodnych zasobów w środowisku platformy Azure.

Aby dowiedzieć się więcej na temat przypisywania zasad w celu sprawdzenia zgodności nowych zasobów, przejdź do samouczka: