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 disk kullanmayan sanal makineleri başarıyla tanımlayacaksınız. Bu sanal makineler, ilke ataması ile uyumsuzdur.
Ö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ıştır. 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ünü ç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şturacak ve Yönetilen diskleri (06a78e20-9358-41c9-923c-fb736d382a4d
) kullanmayan VM'leri denetle tanımını ataacaksınız. Bu ilke tanımı, ilke tanımında ayarlanan koşullarla uyumlu olmayan kaynakları tanımlar.
İlk olarak 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
Ardından 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ı. Daha fazla bilgi için bkz . Azure Sağlayıcı: 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
Kalıcı yürütme planları ve güvenlik hakkında bilgi için bkz . Terraform Planı: Güvenlik Uyarısı.
Terraform yürütme planını uygulama
Son olarak 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
"Başvuru tamamlandı! Kaynaklar: 1 eklendi, 0 değiştirildi, 0 yok edildi." iletisiyle ilke ataması oluşturuldu. 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. Bu komutla, bir JSON dosyasına çıkışı yapılan uyumlu olmayan kaynakların kaynak kimliklerini almak için aşağıdaki komutu çalıştırı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'yı kullanın veya ile terraform destroy
Terraform yürütme planını tersine ç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: