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
- Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
- Program Terraform w wersji 0.12.0 lub nowszej został skonfigurowany w danym środowisku. Aby uzyskać instrukcje, zobacz Konfigurowanie narzędzia Terraform przy użyciu usługi Azure Cloud Shell.
- Ten przewodnik Szybki start wymaga uruchomienia interfejsu wiersza polecenia platformy Azure w wersji 2.13.0 lub nowszej. Aby dowiedzieć się, jaka wersja jest używana, uruchom polecenie
az --version
. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.
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.
Utwórz nowy folder o nazwie
policy-assignment
i zmień w nim katalogi.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" }
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}/]
- Subskrypcje:
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.
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
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
Utwórz plan wykonywania za pomocą polecenia terraform plan i parametru out .
terraform plan -out assignment.tfplan
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
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: