Udostępnij za pośrednictwem


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.

Na końcu tego procesu należy zidentyfikować maszyny wirtualne, które nie korzystają z dysków zarządzanych w ramach subskrypcji. Są one niezgodne z przypisaniem zasad.

Podczas przypisywania wbudowanej definicji zasad lub inicjatywy opcjonalne jest odwołanie do wersji. Przypisania zasad wbudowanych definicji są domyślne dla najnowszej wersji i automatycznie dziedziczą drobne zmiany wersji, chyba że określono inaczej.

Wymagania wstępne

Tworzenie pliku konfiguracji, zmiennej i wyjściowej programu Terraform

W tym przewodniku Szybki start utworzysz przypisanie zasad i przypiszesz definicję Audit VMs that do not use managed disks (Przeprowadź inspekcję maszyn wirtualnych, które nie korzystają z dysków zarządzanych). Ta definicja zasad identyfikuje zasoby, które nie spełniają warunków określonych w definicji zasad.

Skonfiguruj konfigurację, zmienną i pliki wyjściowe programu Terraform. Zasoby programu Terraform dla usługi Azure Policy używają 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, dla grupy zasobów użyj azurerm_resource_group_policy_assignment i 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 ona zawierać 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}
    • Zasób: /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

Zainicjuj narzędzie Terraform w celu pobrania niezbędnych dostawców, a następnie utwórz 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 init narzędzia terraform z wyświetlonym pobraniem modułu azurerm i komunikatem 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 wykonywania 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 Plan programu Terraform: ostrzeżenie o zabezpieczeniach.

Zastosowanie planu wykonania programu Terraform

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.

Po utworzeniu komunikatu Apply complete! Resources: 1 added, 0 changed, 0 destroyed. 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 apply. Uruchom następujące polecenie, aby pobrać identyfikatory zasobów niezgodnych zasobów, które są danymi wyjściowymi do 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: