Hızlı Başlangıç: Terraform kullanarak uyumlu olmayan kaynakları belirlemek 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, yönetilen disk kullanmayan sanal makineleri başarılı bir şekilde belirlemiş olacaksınız. Bu sanal makineler, ilke ataması ile uyumsuzdur.

Önkoşullar

  • Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
  • Ortamınız için yapılandırılmış Terraform 0.12.0 veya daha yeni bir sürüm. Yönergeler için bkz. Terraform'ı Azure Cloud Shell.
  • 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ı, değişkeni ve çıkış dosyasını oluşturma

Bu hızlı başlangıçta, bir ilke ataması oluşturun ve yönetilen diskleri kullanmayan VM'leri denetle ( 06a78e20-9358-41c9-923c-fb736d382a4d ) tanımını atarsınız. Bu ilke tanımı, ilke tanımında ayarlanmış koşullarla uyumlu olmayan kaynakları tanımlar.

İlk olarak Terraform yapılandırmasını, değişkenlerini ve çıkış dosyalarını yapılandırabilirsiniz. Azure Sağlayıcısı'Azure İlkesi için Terraform kaynakları.

  1. adlı yeni bir klasör policy-assignment oluşturun ve dizinleri bu klasöre dönüştürebilirsiniz.

  2. Aşağıdaki main.tf kodla oluşturun:

    provider "azurerm" {
        version = "~>2.0"
        features {}
    }
    
    resource "azurerm_policy_assignment" "auditvms" {
        name = "audit-vm-manageddisks"
        scope = 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. Aşağıdaki variables.tf kodla oluşturun:

    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 farklı olabilir. yerine aşağıdaki {scope} desenlerden birini değiştirilebilir:

    • Abonelik: /subscriptions/{subscriptionId}
    • Kaynak grubu: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
    • Kaynak: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]
  4. Aşağıdaki output.tf kodla oluşturun:

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

Terraform'i başlatma ve plan oluşturma

Ardından Terraform'ı başlatarak gerekli sağlayıcıları indirin ve bir plan oluşturun.

  1. 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
    

    azurerm modülünü indirmeyi ve başarılı iletiyi gösteren terraform init komutunu çalıştırmanın ekran görüntüsü.

  2. Terraform için Azure CLI ile kimlik doğrulaması yapma. Daha fazla bilgi için bkz. Azure Sağlayıcısı: Azure CLI kullanarak kimlik doğrulama.

    az login
    
  3. terraform plan komutu ve out parametresiyle yürütme planını oluşturun.

    terraform plan -out assignment.tfplan
    

    Oluşturulacak Azure kaynağını göstermek için terraform plan komutunu ve out parametresini çalıştırma ekran görüntüsü.

    Not

    Yürütme planlarını ve güvenliğini kalıcı olarak kalıcı olarak uygulama 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ı uygulama.

terraform apply komutunu çalıştırın ve önceden oluşturulmuş assignment.tfplan olan komutu belirtin.

terraform apply assignment.tfplan

terraform apply komutunu çalıştırmanın ve sonuçta elde edilen kaynak oluşturmanın ekran görüntüsü.

"Uygula tamamlandı! Kaynaklar: 1 eklendi, 0 değiştirildi, 0 yok edildi." iletisiyle, ilke ataması artık oluşturulur. Dosyayı outputs.tf tanımlandığımız için atama _ kimliği 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 döndürülen atama _ kimliğini terraform apply kullanın. Bu komutla, JSON dosyasına çıktı olarak çıkış olarak uyumlu olmayan kaynakların kaynak kimliklerini almak için aşağıdaki komutu çalıştırın:

armclient post "/subscriptions/<subscriptionID>/resourceGroups/<rgName>/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 yürütme planını tersine terraform destroy çevirin.

  • Azure CLI

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

    terraform destroy assignment.tfplan
    

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 için ilke atama hakkında daha fazla bilgi edinmek için şu öğreticiye devam edin: