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

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.

  1. adlı policy-assignment yeni bir klasör oluşturun ve dizinleri bu klasöre değiştirin.

  2. 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"
      }
    
  3. 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}/]
  4. 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.

  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 bir başarı iletisini gösteren terraform init komutunu çalıştırma işleminin ekran görüntüsü.

  2. 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
    
  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 işleminin ekran görüntüsü.

    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

terraform apply komutunu ve sonuçta elde edilen kaynak oluşturmayı çalıştırma işleminin ekran görüntüsü.

"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.tfassignment_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 applydö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 destroyTerraform 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: