Hızlı Başlangıç: ARM şablonunu kullanarak uyumlu olmayan kaynakları tanımlamak için ilke ataması oluşturma

Bu hızlı başlangıçta, kaynağın Azure ilkesiyle uyumluluğunu doğrulayan bir ilke ataması oluşturmak için bir Azure Resource Manager şablonu (ARM şablonu) kullanacaksınız. İlke bir kaynak grubuna atanır ve yönetilen disk kullanmayan sanal makineleri denetler. İlke atamasını oluşturduktan sonra uyumlu olmayan sanal makineleri tanımlarsınız.

Azure Resource Manager şablonu, projenizin altyapısını ve yapılandırmasını tanımlayan bir JavaScript Nesne Gösterimi (JSON) dosyasıdır. Bu şablonda, bildirim temelli sözdizimi kullanılır. Dağıtımı oluşturmak için programlama komutlarının sırasını yazmadan hedeflenen dağıtımınızı açıklarsınız.

Ortamınız önkoşulları karşılıyorsa ve ARM şablonlarını kullanma hakkında bilginiz varsa, Azure’a dağıtma düğmesini seçin. Şablon Azure portalında açılır.

Azure Resource Manager şablonuyla ilke atamak için Azure'a Dağıt düğmesinin ekran görüntüsü.

Önkoşullar

Şablonu gözden geçirme

ARM şablonu, kaynak grubu kapsamı için bir ilke ataması oluşturur ve yönetilen disk kullanmayan VM'leri denetle yerleşik ilke tanımını atar.

aşağıdaki ARM şablonunu policy-assignment.json olarak oluşturun.

  1. Visual Studio Code'ı açın ve Dosya>Yeni Metin Dosyası'na tıklayın.
  2. ARM şablonunu kopyalayıp Visual Studio Code'a yapıştırın.
  3. Dosya>Kaydet'i seçin ve policy-assignment.json dosya adını kullanın.
{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "policyAssignmentName": {
      "type": "string",
      "defaultValue": "audit-vm-managed-disks",
      "metadata": {
        "description": "Policy assignment name used in assignment's resource ID"
      }
    },
    "policyDefinitionID": {
      "type": "string",
      "defaultValue": "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d",
      "metadata": {
        "description": "Policy definition ID"
      }
    },
    "policyDisplayName": {
      "type": "string",
      "defaultValue": "Audit VM managed disks",
      "metadata": {
        "description": "Display name for Azure portal"
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Authorization/policyAssignments",
      "apiVersion": "2023-04-01",
      "name": "[parameters('policyAssignmentName')]",
      "properties": {
        "policyDefinitionId": "[parameters('policyDefinitionID')]",
        "description": "Policy assignment to resource group scope created with ARM template",
        "displayName": "[parameters('policyDisplayName')]",
        "nonComplianceMessages": [
          {
            "message": "Virtual machines should use managed disks"
          }
        ]
      }
    }
  ],
  "outputs": {
    "assignmentId": {
      "type": "string",
      "value": "[resourceId('Microsoft.Authorization/policyAssignments', parameters('policyAssignmentName'))]"
    }
  }
}

ARM şablonunda tanımlanan kaynak türü Microsoft.Authorization/policyAssignments'tır.

Şablon, ilke atamasını dağıtmak için üç parametre kullanır:

  • policyAssignmentNameaudit-vm-managed-disks adlı ilke atamasını oluşturur.
  • policyDefinitionID yerleşik ilke tanımının kimliğini kullanır. Başvuru için, kimliği alma komutları şablonu dağıtma bölümünde yer alır.
  • policyDisplayName Azure portalında görünen bir görünen ad oluşturur.

ARM şablon dosyaları hakkında daha fazla bilgi için:

  • Daha fazla ARM şablonu örneği bulmak için Kod örneklerine göz atma bölümüne gidin.
  • Dağıtımlara yönelik şablon başvuruları hakkında daha fazla bilgi edinmek için Azure şablon başvurusu'na gidin.
  • ARM şablonları geliştirmeyi öğrenmek için ARM şablonu belgelerine gidin.
  • Abonelik düzeyinde dağıtımlar hakkında bilgi edinmek için ARM şablonlarıyla abonelik dağıtımları bölümüne gidin.

ARM şablonunu dağıtma

ARM şablonunu Azure PowerShell veya Azure CLI ile dağıtabilirsiniz.

Visual Studio Code terminal oturumundan Azure'a bağlanın. Birden fazla aboneliğiniz varsa, aboneliğinize bağlam ayarlamak için komutları çalıştırın. <subscriptionID> öğesini Azure abonelik kimliğinizle değiştirin.

Connect-AzAccount

# Run these commands if you have multiple subscriptions
Get-AzSubScription
Set-AzContext -Subscription <subscriptionID>

Kayıtlı olup olmadığını Microsoft.PolicyInsights doğrulayabilirsiniz. Değilse, kaynak sağlayıcısını kaydetmek için bir komut çalıştırabilirsiniz.

Get-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights' |
   Select-Object -Property ResourceTypes, RegistrationState

Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'

Daha fazla bilgi için Get-AzResourceProvider ve Register-AzResourceProvider'a gidin.

Aşağıdaki komutlar parametrenin policyDefinitionID değerini görüntüler:

(Get-AzPolicyDefinition |
  Where-Object { $_.Properties.DisplayName -eq 'Audit VMs that do not use managed disks' }).ResourceId

Aşağıdaki komutlar, ilke tanımını kaynak grubunuz için dağıtır. değerini kaynak grubu adınızla değiştirin <resourceGroupName> :

$rg = Get-AzResourceGroup -Name '<resourceGroupName>'

$deployparms = @{
Name = 'PolicyDeployment'
ResourceGroupName = $rg.ResourceGroupName
TemplateFile = 'policy-assignment.json'
}

New-AzResourceGroupDeployment @deployparms

değişkeni, $rg kaynak grubunun özelliklerini depolar. değişken, $deployparms parametre değerleri oluşturmak ve okunabilirliği geliştirmek için splatting kullanır. New-AzResourceGroupDeployment komutu değişkeninde $deployparms tanımlanan parametre değerlerini kullanır.

  • Name , kaynak grubunun dağıtımları için çıktıda ve Azure'da görüntülenen dağıtım adıdır.
  • ResourceGroupName , ilkenin $rg.ResourceGroupName atandığı kaynak grubunuzun adını almak için özelliğini kullanır.
  • TemplateFile ARM şablonunun adını ve yerel bilgisayarınızdaki konumunu belirtir.

İlke atamasının dağıtımını aşağıdaki komutla doğrulayabilirsiniz:

komutu, kaynak grubunun kimliğini almak için özelliğini kullanır $rg.ResourceId .

Get-AzPolicyAssignment -Name 'audit-vm-managed-disks' -Scope $rg.ResourceId
Name               : audit-vm-managed-disks
ResourceId         : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks
ResourceName       : audit-vm-managed-disks
ResourceGroupName  : {resourceGroupName}
ResourceType       : Microsoft.Authorization/policyAssignments
SubscriptionId     : {subscriptionId}
PolicyAssignmentId : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks
Properties         : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.Policy.PsPolicyAssignmentProperties

Daha fazla bilgi için Get-AzPolicyAssignment sayfasına gidin.

Uyumlu olmayan kaynakları belirleme

İlke ataması dağıtıldıktan sonra, kaynak grubuna dağıtılan sanal makineler yönetilen disk ilkesiyle uyumluluk açısından denetlener.

Yeni ilke atamasının uyumluluk durumunun etkinleşmesi ve ilkenin durumuyla ilgili sonuçlar sağlaması birkaç dakika sürer.

$complianceparms = @{
ResourceGroupName = $rg.ResourceGroupName
PolicyAssignmentName = 'audit-vm-managed-disks'
Filter = 'IsCompliant eq false'
}

Get-AzPolicyState @complianceparms

değişkeni, $complianceparms komutunda Get-AzPolicyState kullanılan parametre değerlerini oluşturur.

  • ResourceGroupName özelliğinden $rg.ResourceGroupName kaynak grubu adını alır.
  • PolicyAssignmentName , ilke ataması oluşturulurken kullanılan adı belirtir.
  • Filter , ilke atamasıyla uyumlu olmayan kaynakları bulmak için bir ifade kullanır.

Sonuçlarınız aşağıdaki örneğe benzer ve ComplianceState şunu gösterir NonCompliant:

Timestamp                : 2/26/2024 19:02:56
ResourceId               : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.compute/virtualmachines/{vmId}
PolicyAssignmentId       : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.authorization/policyassignments/audit-vm-managed-disks
PolicyDefinitionId       : /providers/microsoft.authorization/policydefinitions/06a78e20-9358-41c9-923c-fb736d382a4d
IsCompliant              : False
SubscriptionId           : {subscriptionId}
ResourceType             : Microsoft.Compute/virtualMachines
ResourceLocation         : {location}
ResourceGroup            : {resourceGroupName}
ResourceTags             : tbd
PolicyAssignmentName     : audit-vm-managed-disks
PolicyAssignmentOwner    : tbd
PolicyAssignmentScope    : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}
PolicyDefinitionName     : 06a78e20-9358-41c9-923c-fb736d382a4d
PolicyDefinitionAction   : audit
PolicyDefinitionCategory : tbd
ManagementGroupIds       : {managementGroupId}
ComplianceState          : NonCompliant
AdditionalProperties     : {[complianceReasonCode, ]}

Daha fazla bilgi için Get-AzPolicyState sayfasına gidin.

Kaynakları temizleme

Remove-AzPolicyAssignment -Name 'audit-vm-managed-disks' -Scope $rg.ResourceId

Azure PowerShell oturumunuzun oturumunu kapatmak için:

Disconnect-AzAccount

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.

Kaynak uyumluluğunu doğrulayan ilkeler atama hakkında daha fazla bilgi edinmek için öğreticiye geçin.