Come creare definizioni di criteri di configurazione del computer personalizzati

Prima di iniziare, è consigliabile leggere la pagina di panoramica per la configurazione del computer e i dettagli sulle opzioni di correzione della configurazione del computer.

Importante

L'estensione di configurazione del computer è necessaria per le macchine virtuali di Azure. Per distribuire l'estensione su larga scala in tutti i computer, assegnare l'iniziativa di criteri seguente: Deploy prerequisites to enable machine configuration policies on virtual machines

Per usare i pacchetti di configurazione del computer che applicano configurazioni, è necessaria l'estensione di configurazione guest della macchina virtuale di Azure versione 1.26.24 o successiva oppure l'agente Arc 1.10.0 o versione successiva.

Le definizioni dei criteri di configurazione del computer personalizzato che usano AuditIfNotExists o DeployIfNotExists si trovano nello stato di supporto disponibile a livello generale.

Usare la procedura seguente per creare criteri personalizzati che controllano la conformità o gestiscono lo stato dei computer abilitati per Azure o Arc.

Installare PowerShell 7 e i moduli di PowerShell necessari

Prima di tutto, configurare un ambiente di creazione della configurazione del computer per installare la versione necessaria di PowerShell per il sistema operativo e il modulo GuestConfiguration .

Creare e pubblicare un artefatto del pacchetto di configurazione del computer

Se non è già stato fatto, creare e pubblicare un pacchetto di configurazione del computer personalizzato seguendo la procedura descritta in Come creare artefatti del pacchetto di configurazione del computer personalizzato. Convalidare quindi il pacchetto nell'ambiente di sviluppo seguendo la procedura descritta in Come testare gli artefatti del pacchetto di configurazione del computer.

Nota

Il codice di esempio in questo articolo fa riferimento alla $contentUri variabile . Se si usa la stessa sessione di PowerShell delle esercitazioni precedenti per la creazione e il test degli artefatti del pacchetto, tale variabile potrebbe avere già l'URI per il pacchetto.

Se la $contentUri variabile non è impostata sull'URI per il pacchetto nella sessione di PowerShell, è necessario impostarla. Questo esempio usa l'stringa di connessione di un account di archiviazione e il New-AzStorageContext cmdlet per creare un contesto di archiviazione. Ottiene quindi il BLOB di archiviazione per il pacchetto pubblicato e usa le proprietà dell'oggetto per ottenere l'URI del contenuto.

$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

Requisiti dei criteri per la configurazione del computer

La sezione dei metadati della definizione dei criteri deve includere due proprietà per il servizio di configurazione del computer per automatizzare il provisioning e la creazione di report delle assegnazioni di configurazione guest. La proprietà category deve essere impostata su Guest Configuration e una sezione denominata guestConfiguration deve contenere informazioni sull'assegnazione di configurazione del computer. Il New-GuestConfigurationPolicy cmdlet crea automaticamente questo testo.

Nell'esempio seguente viene illustrata la sezione dei metadati creata automaticamente da 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": {}
    }
}

Se l'effetto di definizione è impostato su DeployIfNotExists, la sezione deve contenere i dettagli della distribuzione relativi a un'assegnazione di configurazione del computer. Il New-GuestConfigurationPolicy cmdlet crea automaticamente questo testo.

Creare una definizione di Criteri di Azure

Dopo aver creato e caricato un pacchetto di criteri personalizzati di configurazione del computer, creare la definizione dei criteri di configurazione del computer. Il cmdlet New-GuestConfigurationPolicy accetta un pacchetto di criteri personalizzati e crea una definizione dei criteri.

Il parametro PolicyId di New-GuestConfigurationPolicy richiede una stringa univoca. È necessario un identificatore univoco globale (GUID). Per le nuove definizioni, generare un nuovo GUID usando il New-GUID cmdlet . Quando si apportano aggiornamenti alla definizione, usare la stessa stringa univoca per PolicyId per assicurarsi che la definizione corretta venga aggiornata.

Parametri del cmdlet New-GuestConfigurationPolicy:

  • PolicyId: GUID.
  • ContentUri: URI HTTP pubblico del pacchetto di contenuto della configurazione del computer.
  • DisplayName: nome visualizzato dei criteri.
  • Descrizione: descrizione dei criteri.
  • Parametro: parametri dei criteri forniti in una tabella hash.
  • PolicyVersion: versione dei criteri.
  • Percorso: percorso di destinazione in cui vengono create le definizioni dei criteri.
  • Piattaforma: piattaforma di destinazione (Windows/Linux) per i criteri di configurazione del computer e il pacchetto di contenuto.
  • Modalità: (con distinzione tra maiuscole e minuscole: ApplyAndMonitor, ApplyAndAutoCorrect, Audit) scegliere se il criterio deve controllare o distribuire la configurazione. Il valore predefinito è Audit.
  • Tag aggiunge uno o più filtri di tag alla definizione dei criteri
  • Category imposta il campo dei metadati della categoria nella definizione dei criteri

Per altre informazioni sul parametro Mode , vedere la pagina Come configurare le opzioni di correzione per la configurazione del computer.

Creare una definizione di criteri che controlla usando un pacchetto di configurazione personalizzato, in un percorso specificato:

$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

Creare una definizione di criteri che distribuisca una configurazione usando un pacchetto di configurazione personalizzato, in un percorso specificato:

$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

L'output del cmdlet restituisce un oggetto contenente il nome visualizzato della definizione e il percorso dei file dei criteri. I file JSON di definizione che creano definizioni dei criteri di controllo hanno il nome auditIfNotExists.json e i file che creano definizioni di criteri per applicare le configurazioni hanno il nome deployIfNotExists.json.

Filtro dei criteri di configurazione dei computer tramite tag

Le definizioni dei criteri create dai cmdlet nel modulo GuestConfiguration possono includere facoltativamente un filtro per i tag. Il parametro Tag di New-GuestConfigurationPolicy supporta una matrice di tabelle hash contenenti singole voci di tag. I tag vengono aggiunti alla sezione if della definizione dei criteri e non possono essere modificati da un'assegnazione di criteri.

Frammento di esempio di una definizione di criteri che filtra per i tag segue.

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

Uso dei parametri nelle definizioni dei criteri di configurazione del computer personalizzato

La configurazione del computer supporta l'override delle proprietà di una configurazione DSC in fase di esecuzione. Ciò significa che i valori nel file MOF del pacchetto non devono essere considerati statici. I valori di override vengono forniti tramite Criteri di Azure e non cambiano la modalità di creazione o compilazione delle configurazioni DSC.

La configurazione del computer supporta i tipi di valore seguenti per i parametri:

  • Stringa
  • Boolean
  • Double
  • Float

I cmdlet New-GuestConfigurationPolicy e Get-GuestConfigurationPackageComplianceStatus includono un parametro denominato Parameter. Questo parametro accetta una definizione di tabella hash, inclusi tutti i dettagli su ogni parametro e crea le sezioni necessarie di ogni file usato per la definizione di Criteri di Azure.

Nell'esempio seguente viene creata una definizione dei criteri per controllare un servizio, in cui l'utente seleziona un'opzione in un elenco al momento dell'assegnazione dei criteri.

# 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

Pubblicare la definizione di Criteri di Azure

Infine, è possibile pubblicare le definizioni dei criteri usando il New-AzPolicyDefinition cmdlet . I comandi seguenti pubblicano i criteri di configurazione del computer nel Centro criteri.

Per eseguire il New-AzPolicyDefinition comando, è necessario accedere per creare definizioni di criteri in Azure. I requisiti di autorizzazione specifici sono documentati nella pagina Panoramica di Criteri di Azure. Il ruolo predefinito consigliato è Resource Policy Contributor.

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

In alternativa, se i criteri sono una distribuzione se non esistono criteri (DINE) usano questo comando:

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

Con la definizione dei criteri creata in Azure, l'ultimo passaggio consiste nell'assegnare la definizione. Informazioni su come assegnare la definizione con il portale, l'interfaccia della riga di comando di Azure e Azure PowerShell.

Ciclo di vita dei criteri

Se si vuole rilasciare un aggiornamento alla definizione dei criteri, apportare la modifica sia per il pacchetto di configurazione guest che per i dettagli della definizione Criteri di Azure.

Nota

La version proprietà dell'assegnazione della configurazione del computer influisce solo sui pacchetti ospitati da Microsoft. La procedura consigliata per il controllo delle versioni del contenuto personalizzato consiste nell'includere la versione nel nome file.

In primo luogo, quando si esegue New-GuestConfigurationPackage, specificare un nome per il pacchetto che lo rende univoco dalle versioni precedenti. È possibile includere un numero di versione nel nome, PackageName_1.0.0ad esempio . Il numero in questo esempio viene usato solo per rendere univoco il pacchetto, non per specificare che il pacchetto deve essere considerato più recente o precedente rispetto ad altri pacchetti.

In secondo luogo, aggiornare i parametri usati con il New-GuestConfigurationPolicy cmdlet seguendo ognuna delle spiegazioni seguenti.

  • Versione: quando si esegue il New-GuestConfigurationPolicy cmdlet, è necessario specificare un numero di versione maggiore di quello attualmente pubblicato.
  • contentUri: quando si esegue il New-GuestConfigurationPolicy cmdlet, è necessario specificare un URI per il percorso del pacchetto. L'inclusione di una versione del pacchetto nel nome file garantisce che il valore di questa proprietà cambi in ogni versione.
  • contentHash: il New-GuestConfigurationPolicy cmdlet aggiorna automaticamente questa proprietà. Si tratta di un valore hash del pacchetto creato da New-GuestConfigurationPackage. La proprietà deve essere corretta per il file .zip da pubblicare. Se viene aggiornata solo la proprietà contentUri , l'estensione rifiuta il pacchetto di contenuto.

Il modo più semplice per rilasciare un pacchetto aggiornato consiste nel ripetere il processo descritto in questo articolo e specificare un numero di versione aggiornato. Questo processo garantisce che tutte le proprietà siano state aggiornate correttamente.

Passaggi successivi