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 AuditIfNotExists
DeployIfNotExists
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-GuestConfigurationPolicy
program .
"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. Nie należy określać tego parametru jako ścieżki do lokalnej kopii pakietu.
- 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 toAudit
. - Tag: dodaje jeden lub więcej filtrów tagów do definicji zasad.
- Kategoria: ustawia pole metadanych kategorii w definicji zasad.
- LocalContentPath: ścieżka do lokalnej kopii
.zip
pliku pakietu Konfiguracji komputera. Ten parametr jest wymagany, jeśli używasz tożsamości zarządzanej przypisanej przez użytkownika w celu zapewnienia dostępu do obiektu blob usługi Azure Storge. - ManagedIdentityResourceId: identyfikator
resourceId
tożsamości zarządzanej przypisanej przez użytkownika z dostępem do odczytu do obiektu blob usługi Azure Storage zawierającego.zip
plik pakietu konfiguracji komputera. Ten parametr jest wymagany, jeśli używasz tożsamości zarządzanej przypisanej przez użytkownika w celu zapewnienia dostępu do obiektu blob usługi Azure Storge. - ExcludeArcMachines: określa, że definicja zasad powinna wykluczać maszyny arc. Ten parametr jest wymagany, jeśli używasz tożsamości zarządzanej przypisanej przez użytkownika w celu zapewnienia dostępu do obiektu blob usługi Azure Storge.
Ważne
W przeciwieństwie do maszyn wirtualnych platformy Azure maszyny połączone z usługą Arc obecnie nie obsługują tożsamości zarządzanych przypisanych przez użytkownika. W związku z tym flaga -ExcludeArcMachines
jest wymagana, aby zapewnić wykluczenie tych maszyn z definicji zasad. Aby maszyna wirtualna platformy Azure pobrać przypisany pakiet i zastosować zasady, agent konfiguracji gościa musi być w wersji 1.29.82.0
lub nowszej dla systemu Windows i w wersji 1.26.76.0
lub nowszej dla systemu Linux.
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 wymuszającą niestandardowy pakiet 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
Utwórz definicję zasad, która wymusza niestandardowy pakiet konfiguracji przy użyciu tożsamości zarządzanej przypisanej przez użytkownika:
$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
Uwaga
Identyfikator resorceId tożsamości zarządzanej można pobrać przy użyciu Get-AzUserAssignedIdentity
polecenia cmdlet programu PowerShell.
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-GuestConfigurationPackage
programu 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 przezNew-GuestConfigurationPackage
program . 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
- Przypisz niestandardową definicję zasad przy użyciu witryny Azure Portal.
- Dowiedz się, jak wyświetlić szczegóły zgodności przypisań zasad konfiguracji maszyny.