Mulai cepat: Membuat penetapan kebijakan untuk mengidentifikasi sumber daya yang tidak sesuai dengan menggunakan templat ARM

Dalam mulai cepat ini, Anda menggunakan templat Azure Resource Manager (templat ARM) untuk membuat penetapan kebijakan yang memvalidasi kepatuhan sumber daya dengan kebijakan Azure. Kebijakan ini ditetapkan ke grup sumber daya dan mengaudit komputer virtual yang tidak menggunakan disk terkelola. Setelah membuat penetapan kebijakan, Anda mengidentifikasi komputer virtual yang tidak patuh.

Templat Azure Resource Manager adalah file JavaScript Object Notation (JSON) yang menentukan infrastruktur dan konfigurasi untuk proyek Anda. Template tersebut menggunakan sintaksis deklaratif. Anda menjelaskan penyebaran yang Dimaksudkan tanpa menulis urutan perintah pemrograman untuk membuat penyebaran.

Jika lingkungan Anda telah memenuhi prasyarat dan Anda terbiasa menggunakan templat ARM, pilih tombol Sebarkan ke Azure. Templat terbuka di portal Azure.

Cuplikan layar tombol Sebarkan ke Azure untuk menetapkan kebijakan dengan templat Azure Resource Manager.

Prasyarat

  • Jika Anda tidak memiliki akun Azure, buat akun gratis sebelum memulai.
  • Azure PowerShell atau Azure CLI.
  • Visual Studio Code dan Alat Azure Resource Manager (ARM).
  • Microsoft.PolicyInsights harus terdaftar di langganan Azure Anda. Untuk mendaftarkan penyedia sumber daya, Anda harus memiliki izin untuk mendaftarkan penyedia sumber daya. Izin tersebut disertakan dalam peran Kontributor dan Pemilik.
  • Grup sumber daya dengan setidaknya satu komputer virtual yang tidak menggunakan disk terkelola.

Meninjau templat

Templat ARM membuat penetapan kebijakan untuk cakupan grup sumber daya dan menetapkan definisi kebijakan bawaan Audit VM yang tidak menggunakan disk terkelola.

Buat templat ARM berikut sebagai policy-assignment.json.

  1. Buka Visual Studio Code dan pilih File> Teks Baru.
  2. Salin dan tempel templat ARM ke Visual Studio Code.
  3. Pilih Simpan File>dan gunakan nama file policy-assignment.json.
{
  "$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'))]"
    }
  }
}

Jenis sumber daya yang ditentukan dalam templat ARM adalah Microsoft.Authorization/policyAssignments.

Templat menggunakan tiga parameter untuk menyebarkan penetapan kebijakan:

  • policyAssignmentName membuat penetapan kebijakan bernama audit-vm-managed-disks.
  • policyDefinitionID menggunakan ID definisi kebijakan bawaan. Sebagai referensi, perintah untuk mendapatkan ID ada di bagian untuk menyebarkan templat.
  • policyDisplayNamemembuat nama tampilan yang terlihat di portal Azure.

Untuk informasi selengkapnya tentang file templat ARM:

  • Untuk menemukan sampel templat ARM lainnya, buka Menelusuri sampel kode.
  • Untuk mempelajari selengkapnya tentang referensi templat untuk penyebaran, buka referensi templat Azure.
  • Untuk mempelajari cara mengembangkan templat ARM, buka dokumentasi templat ARM.
  • Untuk mempelajari tentang penyebaran tingkat langganan, buka Penyebaran langganan dengan templat ARM.

Menyebarkan templat ARM

Anda dapat menyebarkan templat ARM dengan Azure PowerShell atau Azure CLI.

Dari sesi terminal Visual Studio Code, sambungkan ke Azure. Jika Anda memiliki lebih dari satu langganan, jalankan perintah untuk mengatur konteks ke langganan Anda. Ganti <subscriptionID> dengan ID langganan Azure Anda.

Connect-AzAccount

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

Anda dapat memverifikasi apakah Microsoft.PolicyInsights terdaftar. Jika tidak, Anda dapat menjalankan perintah untuk mendaftarkan penyedia sumber daya.

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

Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'

Untuk informasi selengkapnya, buka Get-AzResourceProvider dan Register-AzResourceProvider.

Perintah berikut menampilkan policyDefinitionID nilai parameter:

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

Perintah berikut menyebarkan definisi kebijakan ke grup sumber daya Anda. Ganti <resourceGroupName> dengan nama grup sumber daya Anda:

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

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

New-AzResourceGroupDeployment @deployparms

Variabel $rg menyimpan properti untuk grup sumber daya. Variabel $deployparms menggunakan splatting untuk membuat nilai parameter dan meningkatkan keterbacaan. New-AzResourceGroupDeployment Perintah menggunakan nilai parameter yang ditentukan dalam $deployparms variabel.

  • Name adalah nama penyebaran yang ditampilkan dalam output dan di Azure untuk penyebaran grup sumber daya.
  • ResourceGroupName$rg.ResourceGroupName menggunakan properti untuk mendapatkan nama grup sumber daya Anda tempat kebijakan ditetapkan.
  • TemplateFile menentukan nama dan lokasi templat ARM di komputer lokal Anda.

Anda dapat memverifikasi penyebaran penetapan kebijakan dengan perintah berikut:

Perintah menggunakan $rg.ResourceId properti untuk mendapatkan ID grup sumber daya.

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

Untuk informasi selengkapnya, buka Get-AzPolicyAssignment.

Mengidentifikasi sumber daya yang tidak sesuai

Setelah penetapan kebijakan disebarkan, komputer virtual yang disebarkan ke grup sumber daya diaudit untuk kepatuhan dengan kebijakan disk terkelola.

Status kepatuhan untuk penetapan kebijakan baru membutuhkan waktu beberapa menit untuk menjadi aktif dan memberikan hasil tentang status kebijakan.

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

Get-AzPolicyState @complianceparms

Variabel $complianceparms membuat nilai parameter yang Get-AzPolicyState digunakan dalam perintah .

  • ResourceGroupName mendapatkan nama grup sumber daya dari $rg.ResourceGroupName properti .
  • PolicyAssignmentName menentukan nama yang digunakan saat penetapan kebijakan dibuat.
  • Filter menggunakan ekspresi untuk menemukan sumber daya yang tidak sesuai dengan penetapan kebijakan.

Hasil Anda menyerupai contoh berikut dan ComplianceState menunjukkan 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, ]}

Untuk informasi selengkapnya, buka Get-AzPolicyState.

Membersihkan sumber daya

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

Untuk keluar dari sesi Azure PowerShell Anda:

Disconnect-AzAccount

Langkah berikutnya

Dalam mulai cepat ini, Anda telah menetapkan definisi kebijakan untuk mengidentifikasi sumber daya yang tidak sesuai di lingkungan Azure Anda.

Untuk mempelajari selengkapnya tentang cara menetapkan kebijakan yang memvalidasi kepatuhan sumber daya, lanjutkan ke tutorial.