Hızlı Başlangıç: Terraform kullanarak uyumlu olmayan kaynakları tanımlamak için ilke ataması oluşturma
Azure’da uyumluluğu anlamanın ilk adımı, kaynaklarınızın durumunu belirlemektir. Bu hızlı başlangıç, yönetilen disk kullanmayan sanal makineleri belirlemek üzere ilke ataması oluşturma işleminde size yol gösterir.
Bu işlemin sonunda, abonelik genelinde yönetilen diskler kullanmayan sanal makineleri tanımlarsınız. Bu sanal makineler, ilke ataması ile uyumsuzdur.
Yerleşik bir ilke veya girişim tanımı atarken, bir sürüme başvurmak isteğe bağlıdır. Yerleşik tanımların ilke atamaları varsayılan olarak en son sürüme ayarlı ve aksi belirtilmedikçe ikincil sürüm değişikliklerini otomatik olarak devralır.
Önkoşullar
- Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
- Terraform sürüm 0.12.0 veya üzeri ortamınızda yapılandırılmış. Yönergeler için bkz . Azure Cloud Shell kullanarak Terraform yapılandırma.
- Bu hızlı başlangıç için Azure CLI 2.13.0 veya sonraki bir sürümü çalıştırmanız gerekir. Sürümü bulmak için
az --version
komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.
Terraform yapılandırmasını, değişkenini ve çıkış dosyasını oluşturma
Bu hızlı başlangıçta, bir ilke ataması oluşturup Yönetilen diskleri kullanmayan sanal makineleri denetle tanımını atayacaksınız. Bu ilke tanımı, ilke tanımında ayarlanan koşullara uyumlu olmayan kaynakları tanımlar.
Terraform yapılandırmasını, değişkenini ve çıkış dosyalarını yapılandırın. Azure İlkesi için Terraform kaynakları Azure Sağlayıcısı'nı kullanır.
adlı
policy-assignment
yeni bir klasör oluşturun ve dizinleri bu klasöre değiştirin.Aşağıdaki kodla oluşturun
main.tf
:Not
Yönetim Grubunda İlke Ataması oluşturmak için azurerm_management_group_policy_assignment kaynağını, Kaynak Grubu için azurerm_resource_group_policy_assignment ve Abonelik için azurerm_subscription_policy_assignment kaynağını kullanın.
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" }
Aşağıdaki kodla oluşturun
variables.tf
:variable "cust_scope" { default = "{scope}" }
Kapsam, ilke atamasının hangi kaynaklarda veya kaynak gruplarında uygulanacağını belirler. Bir yönetim grubundan tek bir kaynağa kadar değişebilir. değerini, bildirilen kaynağa göre aşağıdaki desenlerden biriyle değiştirmeyi
{scope}
unutmayın:- Abonelik:
/subscriptions/{subscriptionId}
- Kaynak grubu:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
- Kaynak:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]
- Abonelik:
Aşağıdaki kodla oluşturun
output.tf
:output "assignment_id" { value = azurerm_subscription_policy_assignment.auditvms.id }
Terraform'u başlatma ve plan oluşturma
Gerekli sağlayıcıları indirmek için Terraform'u başlatın ve bir plan oluşturun.
terraform init komutunu çalıştırın. Bu komut, Terraform yapılandırmasında Azure kaynaklarını oluşturmak için gereken Azure modüllerini indirir.
terraform init
Terraform için Azure CLI ile kimlik doğrulaması yapın. Daha fazla bilgi için bkz . Azure Sağlayıcısı: Azure CLI kullanarak kimlik doğrulama.
az login
terraform plan komutu ve out parametresiyle yürütme planını oluşturun.
terraform plan -out assignment.tfplan
Not
Yürütme planlarının ve güvenliğin kalıcı hale getirilmesi hakkında bilgi için bkz . Terraform Planı: Güvenlik Uyarısı.
Terraform yürütme planını uygulama
Yürütme planını uygulayın.
terraform apply komutunu çalıştırın ve önceden oluşturulmuş olan öğesini assignment.tfplan
belirtin.
terraform apply assignment.tfplan
İletiyle Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
, ilke ataması oluşturulur. Dosyayı tanımladığımız için outputs.tf
assignment_id de döndürülür.
Uyumlu olmayan kaynakları belirleme
Bu yeni atama altında uyumlu olmayan kaynakları görüntülemek için tarafından terraform apply
döndürülen assignment_id kullanın. Bununla birlikte aşağıdaki komutu çalıştırarak bir JSON dosyasına çıkışı yapılan uyumlu olmayan kaynakların kaynak kimliklerini alın:
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>
Sonuçlarınız aşağıdaki örneğe benzer:
{
"@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>"
}
]
}
Sonuçlar, Azure portalı görünümünde Uyumlu olmayan kaynaklar bölümünde gördüklerinize benzer.
Kaynakları temizleme
Oluşturulan atamayı kaldırmak için Azure CLI kullanın veya terraform yürütme planını ile terraform destroy
ters çevirin.
Azure CLI
az policy assignment delete --name 'audit-vm-manageddisks' --scope '/subscriptions/<subscriptionID>/<resourceGroupName>'
Terraform
terraform destroy
Sonraki adımlar
Bu hızlı başlangıçta, Azure ortamınızda uyumlu olmayan kaynakları belirlemek üzere bir ilke tanımı atadınız.
Yeni kaynakların uyumlu olduğunu doğrulamak üzere ilke atama hakkında daha fazla bilgi edinmek için şu öğreticiye geçin: