Mulai Cepat: Membuat penugasan kebijakan untuk mengidentifikasi sumber daya yang tidak patuh dengan menggunakan file Bicep

Dalam mulai cepat ini, Anda menggunakan file Bicep 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.

Bicep adalah bahasa pemrogram khusus domain (DSL) yang menggunakan sintaks deklaratif untuk menyebarkan sumber daya Azure. Bicep menyediakan sintaks ringkas, keamanan jenis yang andal, dan dukungan untuk penggunaan kembali kode. Bicep menawarkan pengalaman penulisan terbaik untuk solusi infrastructure-as-code di Azure.

Prasyarat

Tinjau file Bicep

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

Buat file Bicep berikut sebagai policy-assignment.bicep.

  1. Buka Visual Studio Code dan pilih File> Teks Baru.
  2. Salin dan tempel file Bicep ke Visual Studio Code.
  3. Pilih Simpan File>dan gunakan nama file policy-assignment.bicep.
param policyAssignmentName string = 'audit-vm-managed-disks'
param policyDefinitionID string = '/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d'
param policyDisplayName string = 'Audit VM managed disks'

resource assignment 'Microsoft.Authorization/policyAssignments@2023-04-01' = {
  name: policyAssignmentName
  scope: resourceGroup()
  properties: {
    policyDefinitionId: policyDefinitionID
    description: 'Policy assignment to resource group scope created with Bicep file'
    displayName: policyDisplayName
    nonComplianceMessages: [
      {
        message: 'Virtual machines should use managed disks'
      }
    ]
  }
}

output assignmentId string = assignment.id

Jenis sumber daya yang ditentukan dalam file Bicep adalah Microsoft.Authorization/policyAssignments.

File Bicep 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 Bicep:

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

Menerapkan file Bicep

Anda dapat menyebarkan file Bicep 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.bicep'
}

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 file Bicep 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/20/2024 18:55:45
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.