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.

Penting

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.

Catatan

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 yang $contentUri diatur ke URI untuk paket Anda dalam sesi PowerShell, Anda perlu mengaturnya. Contoh ini menggunakan string koneksi akun penyimpanan dan New-AzStorageContext cmdlet untuk membuat konteks penyimpanan. Kemudian mendapatkan blob penyimpanan untuk paket yang diterbitkan dan menggunakan properti 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 untuk layanan konfigurasi mesin untuk mengotomatiskan provisi dan pelaporan penetapan 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 penyebaran tentang penetapan konfigurasi komputer. 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 cmdlet New-GuestConfigurationPolicy:

  • PolicyId: GUID.
  • ContentUri: URI HTTP Publik 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.
  • 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
  • Category menetapkan bidang metadata kategori dalam definisi kebijakan

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

Buat definisi kebijakan yang melakukan audit menggunakan paket konfigurasi kustom, pada jalur yang ditentukan:

$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 menyebarkan konfigurasi menggunakan paket konfigurasi kustom, pada jalur yang ditentukan:

$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

{i>Output 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 New-GuestConfigurationPolicy Tag 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
  • Laju
  • 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 penyebaran jika tidak ada kebijakan (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.

Catatan

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. Properti 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 berikutnya