Jak utworzyć niestandardowe definicje zasad konfiguracji maszyny

Przed rozpoczęciem warto przeczytać stronę przeglądu konfiguracji maszyny oraz szczegółowe informacje o opcjach korygowania konfiguracji maszyny.

Ważne

Rozszerzenie konfiguracji maszyny jest wymagane dla maszyn wirtualnych platformy Azure. Aby wdrożyć rozszerzenie na dużą skalę na wszystkich maszynach, przypisz następującą inicjatywę zasad: Deploy prerequisites to enable machine configuration policies on virtual machines

Aby użyć pakietów konfiguracji maszyny, które stosują konfiguracje, wymagane jest rozszerzenie konfiguracji gościa maszyny wirtualnej platformy Azure w wersji 1.26.24 lub nowszej albo agent usługi Arc 1.10.0 lub nowszej.

Niestandardowe definicje zasad konfiguracji maszyny przy użyciu lub AuditIfNotExistsDeployIfNotExists są w stanie pomocy technicznej ogólnie dostępnej.

Wykonaj poniższe kroki, aby utworzyć własne zasady, które przeprowadzają inspekcję zgodności lub zarządzają stanem maszyn platformy Azure lub z obsługą usługi Arc.

Instalowanie programu PowerShell 7 i wymaganych modułów programu PowerShell

Najpierw skonfiguruj środowisko tworzenia konfiguracji maszyny, aby zainstalować wymaganą wersję programu PowerShell dla systemu operacyjnego i modułu GuestConfiguration.

Tworzenie i publikowanie artefaktu pakietu konfiguracji maszyny

Jeśli jeszcze tego nie zrobiono, utwórz i opublikuj niestandardowy pakiet konfiguracji maszyny, wykonując kroki opisane w temacie How to create custom machine configuration package artifacts (Jak utworzyć artefakty pakietu konfiguracji niestandardowej maszyny). Następnie zweryfikuj pakiet w środowisku deweloperskim, wykonując kroki opisane w temacie Jak przetestować artefakty pakietu konfiguracji maszyny.

Uwaga

Przykładowy kod w tym artykule odwołuje się do zmiennej $contentUri . Jeśli używasz tej samej sesji programu PowerShell co wcześniejsze samouczki dotyczące tworzenia i testowania artefaktów pakietu, ta zmienna może już mieć identyfikator URI pakietu.

Jeśli nie masz zmiennej ustawionej $contentUri na identyfikator URI pakietu w sesji programu PowerShell, musisz ją ustawić. W tym przykładzie użyto parametry połączenia konta magazynu i New-AzStorageContext polecenia cmdlet do utworzenia kontekstu magazynu. Następnie pobiera obiekt blob magazynu dla opublikowanego pakietu i używa właściwości tego obiektu do pobrania identyfikatora URI zawartości.

$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

Wymagania dotyczące zasad konfiguracji maszyny

Sekcja metadanych definicji zasad musi zawierać dwie właściwości usługi konfiguracji maszyny w celu zautomatyzowania aprowizacji i raportowania przypisań konfiguracji gościa. Właściwość category musi być ustawiona na Guest Configuration , a sekcja o nazwie guestConfiguration musi zawierać informacje o przypisaniu konfiguracji maszyny. Polecenie New-GuestConfigurationPolicy cmdlet automatycznie tworzy ten tekst.

W poniższym przykładzie pokazano sekcję metadanych , która jest tworzona automatycznie przez New-GuestConfigurationPolicyprogram .

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

Jeśli dla efektu definicji ustawiono wartość DeployIfNotExists, sekcja then musi zawierać szczegóły wdrożenia dotyczące przypisania konfiguracji maszyny. Polecenie New-GuestConfigurationPolicy cmdlet automatycznie tworzy ten tekst.

Tworzenie definicji usługi Azure Policy

Po utworzeniu i przekazaniu niestandardowego pakietu zasad konfiguracji maszyny utwórz definicję zasad konfiguracji maszyny. Polecenie New-GuestConfigurationPolicy cmdlet przyjmuje niestandardowy pakiet zasad i tworzy definicję zasad.

Parametr PolicyId parametru New-GuestConfigurationPolicy wymaga unikatowego ciągu. Wymagany jest unikatowy identyfikator globalny (GUID). W przypadku nowych definicji wygeneruj nowy identyfikator GUID przy użyciu New-GUID polecenia cmdlet . Podczas wprowadzania aktualizacji do definicji użyj tego samego unikatowego ciągu dla identyfikatora PolicyId , aby upewnić się, że poprawna definicja została zaktualizowana.

New-GuestConfigurationPolicy Parametry polecenia cmdlet:

  • PolicyId: identyfikator GUID.
  • ContentUri: publiczny identyfikator URI protokołu HTTP pakietu zawartości konfiguracji maszyny.
  • DisplayName: nazwa wyświetlana zasad.
  • Opis: Opis zasad.
  • Parametr: parametry zasad podane w tabeli skrótów.
  • PolicyVersion: wersja zasad.
  • Ścieżka: ścieżka docelowa, w której są tworzone definicje zasad.
  • Platforma: Platforma docelowa (Windows/Linux) dla zasad konfiguracji komputera i pakietu zawartości.
  • Tryb: (uwzględniana wielkość liter: ApplyAndMonitor, ApplyAndAutoCorrect, Audit) wybierz, czy zasady powinny przeprowadzać inspekcję lub wdrażać konfigurację. Wartość domyślna to Audit.
  • Tag dodaje co najmniej jeden filtr tagu do definicji zasad
  • Kategoria ustawia pole metadanych kategorii w definicji zasad

Aby uzyskać więcej informacji na temat parametru Mode , zobacz stronę How to configure remediation options for machine configuration (Jak skonfigurować opcje korygowania konfiguracji maszyny).

Utwórz definicję zasad, która przeprowadza inspekcję przy użyciu niestandardowego pakietu konfiguracji w określonej ścieżce:

$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

Utwórz definicję zasad, która wdraża konfigurację przy użyciu niestandardowego pakietu konfiguracji w określonej ścieżce:

$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

Dane wyjściowe polecenia cmdlet zwracają obiekt zawierający nazwę wyświetlaną definicji i ścieżkę plików zasad. Pliki JSON definicji, które tworzą definicje zasad inspekcji, mają nazwę auditIfNotExists.json i pliki, które tworzą definicje zasad w celu zastosowania konfiguracji, mają nazwę deployIfNotExists.json.

Filtrowanie zasad konfiguracji maszyny przy użyciu tagów

Definicje zasad utworzone przez polecenia cmdlet w module GuestConfiguration mogą opcjonalnie zawierać filtr tagów. Parametr New-GuestConfigurationPolicy Tag obiektu obsługuje tablicę tabel skrótów zawierających pojedyncze wpisy tagów. Tagi są dodawane do sekcji if definicji zasad i nie można ich modyfikować przez przypisanie zasad.

Przykładowy fragment definicji zasad, który filtruje tagi poniżej.

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

Używanie parametrów w definicjach zasad konfiguracji maszyny niestandardowej

Konfiguracja maszyny obsługuje zastępowanie właściwości konfiguracji DSC w czasie wykonywania. Ta funkcja oznacza, że wartości w pliku MOF w pakiecie nie muszą być uznawane za statyczne. Wartości przesłonięcia są udostępniane za pośrednictwem usługi Azure Policy i nie zmieniają sposobu tworzenia lub kompilowania konfiguracji DSC.

Konfiguracja maszyny obsługuje następujące typy wartości dla parametrów:

  • String
  • Wartość logiczna
  • Liczba rzeczywista
  • Liczba zmiennoprzecinkowa

Polecenia cmdlet New-GuestConfigurationPolicy i Get-GuestConfigurationPackageComplianceStatus zawierają parametr o nazwie Parametr. Ten parametr przyjmuje definicję tabeli skrótów, w tym wszystkie szczegóły dotyczące każdego parametru i tworzy wymagane sekcje każdego pliku używanego do definicji usługi Azure Policy.

Poniższy przykład tworzy definicję zasad do inspekcji usługi, w której użytkownik wybiera z listy w momencie przypisania zasad.

# 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

Publikowanie definicji usługi Azure Policy

Na koniec możesz opublikować definicje zasad przy użyciu New-AzPolicyDefinition polecenia cmdlet . Poniższe polecenia publikują zasady konfiguracji maszyny w centrum zasad.

Aby uruchomić New-AzPolicyDefinition polecenie, musisz mieć dostęp do tworzenia definicji zasad na platformie Azure. Określone wymagania dotyczące autoryzacji są udokumentowane na stronie Przegląd usługi Azure Policy. Zalecana wbudowana rola to Resource Policy Contributor.

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

Jeśli natomiast zasady są wdrażane, jeśli nie istnieją zasady (DINE), użyj następującego polecenia:

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

Po utworzeniu definicji zasad na platformie Azure ostatnim krokiem jest przypisanie definicji. Zobacz, jak przypisać definicję za pomocą witryny Portal, interfejsu wiersza polecenia platformy Azure i programu Azure PowerShell.

Cykl życia zasad

Jeśli chcesz opublikować aktualizację definicji zasad, wprowadź zmiany zarówno dla pakietu konfiguracji gościa, jak i szczegółów definicji usługi Azure Policy.

Uwaga

version Właściwość przypisania konfiguracji maszyny powoduje tylko pakiety hostowane przez firmę Microsoft. Najlepszym rozwiązaniem w przypadku przechowywania wersji zawartości niestandardowej jest uwzględnienie wersji w nazwie pliku.

Najpierw podczas uruchamiania New-GuestConfigurationPackageprogramu określ nazwę pakietu, który sprawia, że jest unikatowy z wcześniejszych wersji. Możesz uwzględnić numer wersji w nazwie, na przykład PackageName_1.0.0. Liczba w tym przykładzie jest używana tylko do tworzenia unikatowego pakietu, a nie określania, że pakiet powinien być traktowany jako nowszy lub starszy niż inne pakiety.

Po drugie zaktualizuj parametry używane za New-GuestConfigurationPolicy pomocą polecenia cmdlet zgodnie z każdym z poniższych wyjaśnień.

  • Wersja: po uruchomieniu New-GuestConfigurationPolicy polecenia cmdlet należy określić numer wersji większy niż aktualnie opublikowany.
  • contentUri: po uruchomieniu New-GuestConfigurationPolicy polecenia cmdlet należy określić identyfikator URI do lokalizacji pakietu. Dołączenie wersji pakietu w nazwie pliku gwarantuje, że wartość tej właściwości zmienia się w każdej wersji.
  • contentHash: New-GuestConfigurationPolicy polecenie cmdlet automatycznie aktualizuje tę właściwość. Jest to wartość skrótu pakietu utworzonego przez New-GuestConfigurationPackageprogram . Właściwość musi być poprawna dla publikowanego .zip pliku. Jeśli jest aktualizowana tylko właściwość contentUri , rozszerzenie odrzuca pakiet zawartości.

Najprostszym sposobem wydania zaktualizowanego pakietu jest powtórzenie procesu opisanego w tym artykule i określenie zaktualizowanego numeru wersji. Ten proces gwarantuje, że wszystkie właściwości zostały poprawnie zaktualizowane.

Następne kroki