Rychlý start: Vytvoření přiřazení zásady k identifikaci prostředků, které nedodržují předpisy, pomocí Terraformu

Prvním krokem k porozumění dodržování předpisů v Azure je zjištění stavu vašich prostředků. Tento rychlý start vás provede procesem vytvoření přiřazení zásady pro identifikaci virtuálních počítačů, které nepoužívají spravované disky.

Na konci tohoto procesu úspěšně identifikujete virtuální počítače, které nepoužívají spravované disky v rámci předplatného. Neodpovídají přiřazení zásad.

Požadavky

  • Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.
  • Terraform verze 0.12.0 nebo vyšší nakonfigurovaný ve vašem prostředí Pokyny najdete v tématu Konfigurace Terraformu pomocí Azure Cloud Shell.
  • Tento rychlý start vyžaduje, abyste spustili Azure CLI verze 2.13.0 nebo novější. Verzi zjistíte spuštěním příkazu az --version. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.

Vytvoření konfigurace, proměnné a výstupního souboru Terraformu

V tomto rychlém startu vytvoříte přiřazení zásady a přiřadíte definici Auditovat virtuální počítače, které nepoužívají spravované disky (06a78e20-9358-41c9-923c-fb736d382a4d). Tato definice zásady identifikuje prostředky, které nevyhovují podmínkám nastaveným v definici zásady.

Nejprve nakonfigurujte konfiguraci Terraformu, proměnnou a výstupní soubory. Prostředky Terraformu pro Azure Policy používat poskytovatele Azure.

  1. Vytvořte novou složku s názvem policy-assignment a změňte do ní adresáře.

  2. Vytvořte main.tf s následujícím kódem:

    Poznámka

    Pokud chcete vytvořit přiřazení zásad ve skupině pro správu, použijte prostředek azurerm_management_group_policy_assignment , v případě skupiny prostředků použijte azurerm_resource_group_policy_assignment a pro předplatné prostředek 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. Vytvořte variables.tf s následujícím kódem:

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

    Obor určuje, pro které prostředky nebo seskupení prostředků se toto přiřazení zásady bude vynucovat. Může se pohybovat od skupiny pro správu až po jednotlivé prostředky. Nezapomeňte nahradit {scope} jedním z následujících vzorů na základě deklarovaného prostředku:

    • Předplatné: /subscriptions/{subscriptionId}
    • Skupina prostředků: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
    • Zdrojů: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]
  4. Vytvořte output.tf s následujícím kódem:

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

Inicializace Terraformu a vytvoření plánu

Dále inicializujte Terraform, aby se stáhli potřební poskytovatelé, a pak vytvořte plán.

  1. Spusťte příkaz terraform init . Tento příkaz stáhne moduly Azure potřebné k vytvoření prostředků Azure v konfiguraci Terraformu.

    terraform init
    

    Snímek obrazovky se spuštěním příkazu terraform init, který ukazuje stažení modulu azurerm a zprávu o úspěchu

  2. Ověřování pomocí Azure CLI pro Terraform Další informace najdete v tématu Poskytovatel Azure: Ověřování pomocí Azure CLI.

    az login
    
  3. Vytvořte plán spuštění pomocí příkazu Terraform plan a parametru out .

    terraform plan -out assignment.tfplan
    

    Snímek obrazovky se spuštěním příkazu Terraform plan a parametru out, který znázorňuje vytvořený prostředek Azure

    Poznámka

    Informace o zachování plánů spuštění a zabezpečení najdete v tématu Terraform Plan: Upozornění zabezpečení.

Použití plánu provádění Terraformu

Nakonec použijte plán provádění.

Spusťte příkaz Terraform apply a zadejte již vytvořenou assignment.tfplan hodnotu.

terraform apply assignment.tfplan

Snímek obrazovky se spuštěním příkazu Terraform apply a výsledným vytvořením prostředku

Pomocí možnosti "Použít dokončeno! Zdroj: 1 přidáno, 0 změněno, 0 zničeno. Teď se vytvoří přiřazení zásad. Vzhledem k tomu, že jsme soubor definovali outputs.tf , vrátí se také assignment_id .

Zjištění nevyhovujících prostředků

Pokud chcete zobrazit prostředky, které nedodržují předpisy v rámci tohoto nového přiřazení, použijte assignment_id vrácenou nástrojem terraform apply. Spuštěním následujícího příkazu získejte ID prostředků nedodržovaných předpisů, které jsou výstupem do souboru 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>

Vaše výsledky budou vypadat přibližně jako v následujícím příkladu:

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

    ]
}

Tyto výsledky jsou srovnatelné s tím, co se obvykle zobrazuje v části Nekompatibilní prostředky v zobrazení na webu Azure Portal.

Vyčištění prostředků

Pokud chcete vytvořené přiřazení odebrat, použijte Azure CLI nebo použijte obrácený plán provádění Terraformu pomocí terraform destroypříkazu .

  • Azure CLI

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

    terraform destroy
    

Další kroky

V tomto rychlém startu jste přiřadili definici zásady pro identifikaci prostředků, které nedodržují předpisy, ve vašem prostředí Azure.

Další informace o přiřazování zásad pro ověření, že nové prostředky dodržují předpisy, najdete v tomto kurzu: