Aracılığıyla paylaş


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.

  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

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

    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

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

İ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 applydö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 destroyters ç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: