Cara membuat definisi kebijakan untuk konfigurasi mesin kustom

Sebelum memulai, ada baiknya membaca halaman gambaran umum untuk konfigurasi komputer, dan detail tentang opsi remediasi konfigurasi mesin.

Important

Mesin virtual Azure memerlukan ekstensi konfigurasi mesin. Untuk menyebarkan ekstensi dalam skala besar di semua mesin, tetapkan inisiatif kebijakan berikut: Deploy prerequisites to enable machine configuration policies on virtual machines

Untuk menggunakan paket konfigurasi komputer yang menerapkan konfigurasi, ekstensi konfigurasi tamu Azure VM versi 1.26.24 atau yang lebih baru, atau agen Arc 1.10.0 atau yang lebih baru, diperlukan.

Definisi kebijakan konfigurasi komputer kustom menggunakan salah satu AuditIfNotExists atau DeployIfNotExists berada dalam status dukungan Generally Available (GA).

Gunakan langkah-langkah berikut untuk membuat kebijakan Anda sendiri yang mengaudit kepatuhan atau mengelola keadaan mesin yang diaktifkan oleh Azure atau Arc.

Instal PowerShell 7 dan modul PowerShell yang diperlukan

Pertama, siapkan lingkungan penulisan konfigurasi komputer untuk menginstal versi PowerShell yang diperlukan untuk OS Anda dan modul GuestConfiguration .

Membuat dan menerbitkan artefak paket konfigurasi mesin

Jika Anda belum melakukannya, buat dan terbitkan paket konfigurasi komputer kustom dengan mengikuti langkah-langkah dalam Cara membuat artefak paket konfigurasi komputer kustom. Kemudian validasi paket di lingkungan pengembangan Anda dengan mengikuti langkah-langkah dalam Cara menguji artefak paket konfigurasi mesin.

Note

Contoh kode dalam artikel ini mereferensikan $contentUri variabel. Jika Anda menggunakan sesi PowerShell yang sama dengan tutorial sebelumnya untuk membuat dan menguji artefak paket Anda, variabel tersebut mungkin sudah memiliki URI ke paket Anda.

Jika Anda tidak memiliki variabel $contentUri diatur ke URI untuk paket Anda dalam sesi PowerShell Anda, Anda perlu mengaturnya. Contoh ini menggunakan string koneksi akun penyimpanan dan cmdlet New-AzStorageContext untuk membuat konteks penyimpanan. Kemudian mendapatkan blob penyimpanan untuk paket yang diterbitkan dan menggunakan atribut objek tersebut untuk mendapatkan URI konten.

$connectionString = '<storage-account-connection-string>'
$context = New-AzStorageContext -ConnectionString $connectionString
$getParams = @{
    Context   = $context
    Container = '<container-name>'
    Blob      = '<published-package-file-name>'
}
$blob = Get-AzStorageBlob @getParams
$contentUri = $blob.ICloudBlob.Uri.AbsoluteUri

Persyaratan kebijakan untuk konfigurasi mesin

Bagian metadata definisi kebijakan harus menyertakan dua properti agar layanan konfigurasi mesin dapat mengotomatiskan penyediaan dan pelaporan penugasan konfigurasi tamu. Properti kategori harus diatur ke Guest Configuration dan bagian bernama guestConfiguration harus berisi informasi tentang penetapan konfigurasi komputer. Cmdlet New-GuestConfigurationPolicy membuat teks ini secara otomatis.

Contoh berikut menunjukkan bagian metadata yang secara otomatis dibuat oleh New-GuestConfigurationPolicy.

"metadata": {
    "category": "Guest Configuration",
    "guestConfiguration": {
        "name": "test",
        "version": "1.0.0",
        "contentType": "Custom",
        "contentUri": "CUSTOM-URI-HERE",
        "contentHash": "CUSTOM-HASH-VALUE-HERE",
        "configurationParameter": {}
    }
}

Jika efek definisi diatur ke DeployIfNotExists, bagian tersebut harus berisi detail penerapan tentang penetapan konfigurasi mesin. Cmdlet New-GuestConfigurationPolicy membuat teks ini secara otomatis.

Buat definisi Azure Policy

Setelah paket kebijakan kustom konfigurasi mesin dibuat dan diunggah, buat definisi kebijakan konfigurasi mesin. Cmdlet New-GuestConfigurationPolicy menggunakan paket kebijakan khusus dan membuat definisi kebijakan.

Parameter PolicyId dari New-GuestConfigurationPolicy membutuhkan untai (karakter) yang unik. Pengidentifikasi unik (GUID) global diperlukan. Untuk definisi baru, buat GUID baru menggunakan New-GUID cmdlet . Saat membuat pembaruan pada definisi, gunakan untai (karakter) unik yang sama yang digunakan untuk PolicyId guna memastikan bahwa definisi yang benar diperbarui.

Parameter-parameter dari cmdlet New-GuestConfigurationPolicy:

  • PolicyId: GUID.

  • ContentUri: URI HTTP(s) publik dari paket konten konfigurasi mesin.

  • DisplayName: Nama tampilan kebijakan.

  • Description: Deskripsi kebijakan.

  • Parameter: Parameter kebijakan yang disediakan dalam tabel hash.

  • PolicyVersion: Versi kebijakan.

  • Path: Jalur tujuan tempat definisi kebijakan dibuat. Jangan tentukan parameter ini sebagai jalur ke salinan lokal paket.

  • Platform: Platform target (Windows/Linux) untuk paket kebijakan dan konten konfigurasi mesin.

  • Mode: (peka huruf besar/kecil: ApplyAndMonitor, ApplyAndAutoCorrect, Audit) pilih apakah kebijakan harus mengaudit atau menyebarkan konfigurasi. Default adalah Audit.

  • Tag: Menambahkan satu atau beberapa filter tag ke definisi kebijakan.

  • LocalContentPath: Jalur ke salinan .zip lokal file paket Konfigurasi Komputer. Parameter ini diperlukan jika Anda menggunakan Identitas Terkelola yang Ditetapkan Pengguna untuk menyediakan akses ke blob Azure Storage.

  • ManagedIdentityResourceId: resourceId adalah Identitas Terkelola yang Ditugaskan oleh Pengguna yang memiliki akses baca ke blob Azure Storage yang berisi file paket Konfigurasi Mesin .zip. Parameter ini diperlukan jika Anda menggunakan Identitas Terkelola yang Ditetapkan Pengguna untuk menyediakan akses ke blob Azure Storage.

  • ExcludeArcMachines: Menentukan bahwa definisi Kebijakan harus mengecualikan komputer Arc. Parameter ini diperlukan jika Anda menggunakan Identitas Terkelola yang Ditetapkan Pengguna untuk menyediakan akses ke blob Azure Storage.

  • UseSystemAssignedIdentity: Ini adalah opsi untuk menggunakan identitas yang ditetapkan sistem untuk mengunduh paket dari kontainer akun penyimpanan alih-alih menggunakan URL SaS.

    Anda tidak dapat menggunakan opsi ini dengan ManagedIdentityResourceId. Opsinya saling eksklusif.

    Anda dapat menggunakan parameter ini tanpa opsi ExcludeArcMachines karena identitas yang ditetapkan sistem tersedia untuk komputer Arc.

Important

Tidak seperti Azure VM, komputer yang terhubung dengan Arc saat ini tidak mendukung Identitas Terkelola yang Ditetapkan Pengguna. Akibatnya, -ExcludeArcMachines tanda diperlukan untuk memastikan pengecualian mesin tersebut dari definisi kebijakan. Agar Azure VM mengunduh paket yang ditetapkan dan menerapkan kebijakan, Agen Konfigurasi Tamu harus versi 1.29.82.0 atau lebih tinggi untuk Windows dan versi 1.26.76.0 atau yang lebih tinggi untuk Linux.

Untuk komputer yang terhubung dengan Arc, Anda juga dapat menggunakan Identitas Terkelola yang Ditetapkan Sistem untuk mengunduh paket.

Untuk informasi selengkapnya tentang parameter Mode , lihat halaman Cara mengonfigurasi opsi remediasi untuk konfigurasi komputer.

Buat definisi kebijakan yang mengaudit menggunakan paket konfigurasi kustom, di jalur tertentu:

$PolicyConfig      = @{
  PolicyId      = '_My GUID_'
  ContentUri    = $contentUri
  DisplayName   = 'My audit policy'
  Description   = 'My audit policy'
  Path          = './policies/auditIfNotExists.json'
  Platform      = 'Windows'
  PolicyVersion = 1.0.0
}

New-GuestConfigurationPolicy @PolicyConfig

Buat definisi kebijakan yang memberlakukan paket konfigurasi kustom, di jalur tertentu:

$PolicyConfig2      = @{
  PolicyId      = '_My GUID_'
  ContentUri    = $contentUri
  DisplayName   = 'My deployment policy'
  Description   = 'My deployment policy'
  Path          = './policies/deployIfNotExists.json'
  Platform      = 'Windows'
  PolicyVersion = 1.0.0
  Mode          = 'ApplyAndAutoCorrect'
}

New-GuestConfigurationPolicy @PolicyConfig2

Buat definisi kebijakan yang memberlakukan paket konfigurasi kustom menggunakan Identitas Terkelola yang Ditetapkan Pengguna:

$PolicyConfig3      = @{
  PolicyId                  = '_My GUID_'
  ContentUri                = $contentUri
  DisplayName               = 'My deployment policy'
  Description               = 'My deployment policy'
  Path                      = './policies/deployIfNotExists.json'
  Platform                  = 'Windows'
  PolicyVersion             = 1.0.0
  Mode                      = 'ApplyAndAutoCorrect'
  LocalContentPath          = "C:\Local\Path\To\Package"      # Required parameter for managed identity
  ManagedIdentityResourceId = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}" # Required parameter for managed identity
}

New-GuestConfigurationPolicy @PolicyConfig3 -ExcludeArcMachines

Untuk skenario ini, Anda perlu menonaktifkan pengaturan Izinkan akses anonim Blob dan menetapkan peran Pembaca Data Blob Penyimpanan kepada identitas pada akun penyimpanan.

Buat definisi kebijakan yang memberlakukan paket konfigurasi kustom menggunakan identitas terkelola System-Assigned:

$PolicyConfig4      = @{
  PolicyId                  = '_My GUID_'
  ContentUri                = $contentUri
  DisplayName               = 'My deployment policy'
  Description               = 'My deployment policy'
  Path                      = './policies/deployIfNotExists.json'
  Platform                  = 'Windows'
  PolicyVersion             = 1.0.0
  Mode                      = 'ApplyAndAutoCorrect'
  LocalContentPath          = "C:\Local\Path\To\Package"      # Required parameter for managed identity
}
New-GuestConfigurationPolicy @PolicyConfig4 -UseSystemAssignedIdentity

Untuk skenario ini, Anda perlu menonaktifkan pengaturan Izinkan akses anonim Blob dan menetapkan peran Pembaca Data Blob Penyimpanan pada akun penyimpanan ke identitas sistem.

Note

Anda dapat mengambil resourceId dari identitas yang dikelola menggunakan cmdlet PowerShell Get-AzUserAssignedIdentity.

Output cmdlet mengembalikan objek yang berisi nama tampilan definisi dan jalur dari file kebijakan. Definisi file JSON yang membuat definisi kebijakan audit memiliki nama auditIfNotExists.json dan file yang membuat definisi kebijakan untuk menerapkan konfigurasi memiliki nama deployIfNotExists.json.

Memfilter kebijakan konfigurasi mesin menggunakan tag

Definisi kebijakan yang dibuat oleh cmdlet dalam modul GuestConfiguration dapat secara opsional menyertakan filter untuk tag. Parameter mendukung array tabel hash yang berisi entri tag individual. Tag ditambahkan ke bagian if dari definisi kebijakan dan tidak dapat dimodifikasi oleh penetapan kebijakan.

Contoh cuplikan definisi kebijakan yang memfilter tag berikut.

"if": {
  "allOf" : [
    {
      "allOf": [
        {
          "field": "tags.Owner",
          "equals": "BusinessUnit"
        },
        {
          "field": "tags.Role",
          "equals": "Web"
        }
      ]
    },
    {
      // Original machine configuration content
    }
  ]
}

Menggunakan parameter di definisi kebijakan konfigurasi mesin kustom

Konfigurasi komputer mendukung pengesampingan properti Konfigurasi DSC pada waktu proses. Fitur ini berarti bahwa nilai dalam file MOF di dalam paket tidak harus dianggap statis. Nilai penimpaan disediakan melalui Azure Policy dan tidak mengubah cara Konfigurasi DSC ditulis atau dikompilasi.

Konfigurasi komputer mendukung jenis nilai berikut untuk parameter:

  • String
  • Boolean
  • Double
  • Float

Cmdlet New-GuestConfigurationPolicy dan Get-GuestConfigurationPackageComplianceStatus menyertakan parameter bernama Parameter. Parameter ini mengambil definisi tabel hash termasuk semua detail tentang setiap parameter dan membuat bagian yang diperlukan dari setiap file yang digunakan untuk definisi Azure Policy.

Contoh berikut membuat definisi kebijakan untuk mengaudit layanan, yaitu pengguna menyediakan jalur pada saat penetapan kebijakan.

# This DSC resource definition...
Service 'UserSelectedNameExample' {
    Name   = 'ParameterValue'
    Ensure = 'Present'
    State  = 'Running'
}

# ...can be converted to a hash table:
$PolicyParameterInfo     = @(
  @{
    # Policy parameter name (mandatory)
    Name                 = 'ServiceName'
    # Policy parameter display name (mandatory)
    DisplayName          = 'windows service name.'
    # Policy parameter description (optional)
    Description          = 'Name of the windows service to be audited.'
    # DSC configuration resource type (mandatory)
    ResourceType         = 'Service'
    # DSC configuration resource id (mandatory)
    ResourceId           = 'UserSelectedNameExample'
    # DSC configuration resource property name (mandatory)
    ResourcePropertyName = 'Name'
    # Policy parameter default value (optional)
    DefaultValue         = 'winrm'
    # Policy parameter allowed values (optional)
    AllowedValues        = @('BDESVC','TermService','wuauserv','winrm')
  })

# ...and then passed into the `New-GuestConfigurationPolicy` cmdlet
$PolicyParam = @{
  PolicyId      = 'My GUID'
  ContentUri    = $contentUri
  DisplayName   = 'Audit Windows Service.'
  Description   = "Audit if a Windows Service isn't enabled on Windows machine."
  Path          = '.\policies\auditIfNotExists.json'
  Parameter     = $PolicyParameterInfo
  PolicyVersion = 1.0.0
}

New-GuestConfigurationPolicy @PolicyParam

Terbitkan definisi Azure Policy

Terakhir, Anda dapat menerbitkan definisi kebijakan menggunakan New-AzPolicyDefinition cmdlet . Perintah di bawah ini menerbitkan kebijakan konfigurasi komputer Anda ke pusat kebijakan.

Untuk menjalankan New-AzPolicyDefinition perintah, Anda memerlukan akses untuk membuat definisi kebijakan di Azure. Persyaratan otorisasi tertentu didokumentasikan di halaman Gambaran Umum Azure Policy. Peran bawaan yang direkomendasikan adalah Resource Policy Contributor.

New-AzPolicyDefinition -Name 'mypolicydefinition' -Policy '.\policies\auditIfNotExists.json'

Atau, jika kebijakan adalah kebijakan menerapkan jika tidak ada (DINE), gunakan perintah ini:

New-AzPolicyDefinition -Name 'mypolicydefinition' -Policy '.\policies\deployIfNotExists.json'

Dengan definisi kebijakan yang dibuat di Azure, langkah terakhir adalah menetapkan definisi. Lihat cara menetapkan definisi dengan Portal, Azure CLI, dan Azure PowerShell.

Siklus hidup kebijakan

Jika Anda ingin merilis pembaruan definisi kebijakan, buat perubahan untuk detail definisi paket konfigurasi tamu dan Azure Policy.

Note

Properti version penetapan konfigurasi komputer hanya memengaruhi paket yang dihosting oleh Microsoft. Praktik terbaik untuk penerapan versi konten kustom adalah menyertakan versi dalam nama file.

Pertama, saat menjalankan New-GuestConfigurationPackage, tentukan nama untuk paket yang membuatnya unik dari versi sebelumnya. Anda bisa menyertakan nomor versi dalam nama seperti PackageName_1.0.0. Nomor dalam contoh ini hanya digunakan untuk membuat paket menjadi unik, bukan untuk menentukan bahwa paket akan dianggap lebih baru atau lebih lama daripada paket lainnya.

Kedua, perbarui parameter yang digunakan dengan cmdlet New-GuestConfigurationPolicy mengikuti masing-masing penjelasan berikut.

  • Versi: Saat menjalankan New-GuestConfigurationPolicy cmdlet, Anda harus menentukan nomor versi yang lebih besar dari yang saat ini diterbitkan.
  • contentUri: Saat menjalankan cmdlet New-GuestConfigurationPolicy, Anda harus menetapkan URI ke lokasi paket. Menyertakan versi paket dalam nama file memastikan nilai properti ini berubah di setiap rilis.
  • contentHash: New-GuestConfigurationPolicy Cmdlet memperbarui properti ini secara otomatis. Ini adalah nilai hash dari paket yang dibuat oleh New-GuestConfigurationPackage. Atribut harus benar untuk file .zip yang Anda terbitkan. Jika hanya properti contentUri yang diperbarui, Ekstensi menolak paket konten.

Cara term mudah untuk merilis paket yang diperbarui adalah dengan mengulangi proses yang dijelaskan dalam artikel ini dan menentukan nomor versi yang diperbarui. Proses tersebut memastikan semua properti telah diperbarui dengan benar.

Langkah selanjutnya