Guide pratique pour créer des définitions de stratégie de configuration de machine personnalisées

Avant de commencer, il est recommandé de lire la page Vue d’ensemble présentant la Configuration d’ordinateur, ainsi que les informations relatives aux options de correction de la configuration d’ordinateur.

Important

L’extension de configuration machine est requise pour les machines virtuelles Azure. Pour déployer l’extension à grande échelle sur toutes les machines, attribuez l’initiative de stratégie suivante : Deploy prerequisites to enable machine configuration policies on virtual machines

Pour utiliser les packages de configuration de la machine qui appliquent des configurations, l’extension de configuration invité de machine virtuelle Azure version 1.26.24 ou ultérieure, ou l’agent Arc version 1.10.0 ou version ultérieure, sont requis.

Les définitions de stratégie de configuration d’ordinateur personnalisées utilisant AuditIfNotExists ou DeployIfNotExists sont pris en charge en disponibilité générale (GA).

Utilisez les étapes suivantes pour créer vos propres stratégies qui auditent la conformité ou gèrent l’état des machines Azure ou Arc.

Installer PowerShell 7 et les modules PowerShell requis

Tout d’abord, configurez un environnement de création de configuration d’ordinateur pour installer la version requise de PowerShell pour votre système d’exploitation et le module GuestConfiguration.

Créer et publier un artefact de package de configuration de machine

Si ce n’est déjà fait, créez et publiez un package de configuration d’ordinateur personnalisé en suivant les étapes décrites dans Guide pratique pour créer des artefacts de package de configuration machine personnalisés. Ensuite, validez le package dans votre environnement de développement en suivant les étapes décrites dans Guide pratique pour tester des artefacts de package de configuration de machine.

Notes

Le code exemple dans cet article fait référence à la variable $contentUri. Si vous utilisez la même session PowerShell décrite dans les didacticiels précédents pour créer et tester vos artefacts de package, cette variable peut déjà disposer de l’URI de votre package.

Si la variable $contentUri n’est pas définie sur l’URI de votre package dans votre session PowerShell, vous devez la définir. Cet exemple utilise la chaîne de connexion d’un compte de stockage et l’applet de commande New-AzStorageContext pour créer un contexte de stockage. Il obtient ensuite l’objet blob de stockage pour le package publié et utilise les propriétés de cet objet pour obtenir l’URI de contenu.

$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

Exigences de la stratégie pour la configuration de machine

La section metadata de la définition d’une stratégie doit inclure deux propriétés pour le service de configuration d’ordinateur afin d’automatiser l’approvisionnement et la création de rapports sur les attributions de configuration invité. La propriété categorydoit être définie sur Guest Configuration et une section nommée guestConfiguration doit contenir des informations sur l’attribution de configuration d'ordinateur. L’applet de commande New-GuestConfigurationPolicy crée automatiquement ce texte.

L’exemple suivant illustre la section metadata qui est créée automatiquement par 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": {}
    }
}

Si l’effet de la définition est défini sur DeployIfNotExists, la section then doit contenir des informations concernant le déploiement d’une attribution de configuration d’ordinateur. L’applet de commande New-GuestConfigurationPolicy crée automatiquement ce texte.

Créer une définition Azure Policy

Une fois qu’un package de stratégie personnalisée de configuration de machine a été créé et chargé, créez la définition de la stratégie de configuration de machine. La cmdlet New-GuestConfigurationPolicy prend un package de stratégie personnalisé et crée une définition de stratégie.

Le paramètre PolicyId de New-GuestConfigurationPolicy requiert une chaîne unique. Un identificateur unique global (GUID) est requis. Pour les nouvelles définitions, générez un nouveau GUID à l’aide de la cmdlet New-GUID. Lorsque vous effectuez des mises à jour de la définition, utilisez la même chaîne unique pour PolicyId afin de vous assurer que la définition correcte est mise à jour.

Paramètres de la cmdlet New-GuestConfigurationPolicy :

  • PolicyId : GUID.
  • ContentUri : URI HTTP(S) public du package de contenu configuration de machine.
  • DisplayName : Nom d'affichage de la stratégie.
  • Description : Description de la stratégie.
  • Paramètre : paramètres de stratégie fournis dans une table de hachage.
  • PolicyVersion : version de stratégie.
  • Chemin d’accès : Chemin de destination où les définitions de stratégie sont créées.
  • Plateforme : plateforme cible (Windows/Linux) pour la stratégie et le package de contenu de configuration de machine.
  • Mode : (sensible à la casse ApplyAndMonitor, ApplyAndAutoCorrect, Audit) choisissez si la stratégie doit auditer ou déployer la configuration. Par défaut, il s’agit de Audit.
  • Tag ajoute un ou plusieurs filtres de balise à la définition de stratégie
  • Category définit le champ de métadonnées catégorie dans la définition de stratégie

Pour plus d’informations sur le paramètre Mode, consultez la page Comment configurer les options de correction pour la configuration de machine.

Créer une définition de stratégie qui audite à l’aide d’un package de configuration personnalisé, dans un chemin d’accès spécifié :

$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

Créer une définition de stratégie qui déploie une configuration à l’aide d’un package de configuration personnalisé, dans un chemin d’accès spécifié :

$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

La sortie de la cmdlet retourne un objet contenant le nom complet de la définition et le chemin d’accès aux fichiers de stratégie. Les fichiers JSON de définition qui créent des définitions de stratégie d’audit portent le nom auditIfNotExists.json et les fichiers qui créent des définitions de stratégie pour appliquer des configurations portent le nom deployIfNotExists.json.

Filtrage des stratégies de configuration de machine à l’aide de balises

Les définitions de stratégie créées par des cmdlets dans le module GuestConfiguration peuvent éventuellement inclure un filtre pour les balises. Le paramètre Tag de New-GuestConfigurationPolicy prend en charge un groupe de tables de hachage contenant des balises individuelles. Les balises sont ajoutées à la section if de la définition de stratégie et ne peuvent pas être modifiées par une attribution de stratégie.

Vous trouverez ci-dessous un exemple d’extrait de définition de stratégie permettant de filtrer des balises.

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

Utilisation de paramètres dans des définitions de stratégie personnalisées de configuration de machine

La configuration d’ordinateur prend en charge le remplacement des propriétés d’une configuration DSC lors d’une exécution. Cette fonctionnalité signifie que les valeurs du fichier MOF dans le package n’ont pas à être considérées comme statiques. Les valeurs de remplacement sont fournies via Azure Policy et ne modifient pas la création ni la compilation des configurations DSC.

La configuration d’ordinateur prend en charge les types de valeurs de paramètres suivants :

  • Chaîne
  • Booléen
  • Double
  • Float

Les cmdlets New-GuestConfigurationPolicy et Get-GuestConfigurationPackageComplianceStatus incluent un paramètre nommé Paramètre. Ce paramètre utilise une définition de table de hachage qui comprend toutes les informations concernant chaque paramètre et crée les sections nécessaires de chaque fichier utilisé dans la définition Azure Policy.

L’exemple suivant crée une définition de stratégie pour auditer un service, que l’utilisateur sélectionne dans une liste au moment de l’attribution de la stratégie.

# 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

Publier la définition Azure Policy

Enfin, vous pouvez publier les définitions de stratégie à l’aide de la cmdlet New-AzPolicyDefinition. Les commandes ci-dessous publient votre stratégie de configuration d’ordinateur dans le centre de stratégies.

Pour exécuter la commande New-AzPolicyDefinition, vous devez avoir accès à la création de définitions de stratégies dans Azure. Les exigences spécifiques en matière d’autorisations sont documentées dans la page vue d’ensemble d’Azure Policy. Le rôle intégré recommandé est Resource Policy Contributor.

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

Ou, si la stratégie est un déploiement s’il n’existe pas de stratégie (DINE), utilisez cette commande :

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

Avec la définition de stratégie créée dans Azure, la dernière étape consiste à attribuer la définition. Apprenez à attribuer la définition à l'aide du portail, d'Azure CLI et d'Azure PowerShell.

Cycle de vie de la stratégie

Si vous souhaitez publier une mise à jour de la définition de stratégie, effectuez la modification pour le package de configuration invité et les détails de la définition Azure Policy.

Notes

La propriété version de l’affectation de configuration de machine n’a d’influence que sur les packages qui sont hébergés par Microsoft. La meilleure pratique pour le contenu personnalisé du contrôle de version consiste à inclure la version dans le nom de fichier.

Tout d’abord, lorsque de l’exécution de New-GuestConfigurationPackage, spécifiez un nom qui rende le package unique par rapport aux versions antérieures. Vous pouvez inclure un numéro de version dans le nom, par exemple PackageName_1.0.0. Le numéro dans cet exemple ne sert qu’à rendre le package unique, et non à spécifier que le package doit être considéré comme plus récent ou plus ancien que les autres.

Ensuite, mettez à jour les paramètres utilisés avec la cmdlet New-GuestConfigurationPolicy en suivant chacune des explications suivantes.

  • Version : lorsque vous exécutez la cmdlet New-GuestConfigurationPolicy, vous devez spécifier un numéro de version supérieur à celui de la version actuellement publiée.
  • contentUri : Lorsque vous exécutez la cmdlet New-GuestConfigurationPolicy, vous devez spécifier un URI vers l’emplacement du package. L’inclusion d’une version de package dans le nom de fichier garantit que la valeur de cette propriété change dans chaque version.
  • contentHash : la cmdlet New-GuestConfigurationPolicy met à jour cette propriété automatiquement. Il s’agit d’une valeur de hachage du package créé par New-GuestConfigurationPackage. Cette propriété doit être correcte pour le fichier .zip que vous publiez. Si seule la propriété contentUri est mise à jour, l’extension rejette le package de contenu.

Le moyen le plus simple de publier un package mis à jour consiste à répéter le processus décrit dans cet article et à spécifier un numéro de version mis à jour. Ce processus garantit que toutes les propriétés ont été correctement mises à jour.

Étapes suivantes