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. Ne spécifiez pas ce paramètre comme chemin d’accès à une copie locale du package.
- 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 deAudit
. - Tag : ajoute un ou plusieurs filtres de balise à la définition de stratégie.
- Category : définit le champ de métadonnées de catégorie dans la définition de stratégie.
- LocalContentPath : chemin d’accès à la copie locale du fichier du package de configuration d’ordinateur au format
.zip
. Ce paramètre est requis si vous utilisez une identité managée affectée par l’utilisateur pour fournir l’accès à un objet blob Stockage Azure. - ManagedIdentityResourceId :
resourceId
de l’identité managée affectée par l’utilisateur qui a accès en lecture à l’objet blob Stockage Azure contenant le fichier du package de configuration d’ordinateur au format.zip
. Ce paramètre est requis si vous utilisez une identité managée affectée par l’utilisateur pour fournir l’accès à un objet blob Stockage Azure. - ExcludeArcMachines : spécifie que la définition Policy doit exclure les machines Arc. Ce paramètre est requis si vous utilisez une identité managée affectée par l’utilisateur pour fournir l’accès à un objet blob Stockage Azure.
Important
Contrairement aux machines virtuelles Azure, les machines connectées à Arc ne prennent actuellement pas en charge les identités managées affectées par l’utilisateur. Par conséquent, l’indicateur -ExcludeArcMachines
est requis pour garantir l’exclusion de ces machines de la définition de stratégie. Pour que la machine virtuelle Azure télécharge le package affecté et applique la stratégie, vous devez utiliser l’agent de configuration Invité version 1.29.82.0
ou ultérieure pour Windows et version 1.26.76.0
ou ultérieure pour Linux.
Pour plus d’informations sur le paramètre Mode, consultez la page Comment configurer les options de correction pour la configuration de machine.
Créez 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éez une définition de stratégie qui applique 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
Créez une définition de stratégie qui applique un package de configuration personnalisé à l’aide d’une identité managée affectée par l’utilisateur :
$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
Remarque
Vous pouvez récupérer le resourceId d’une identité managée à l’aide de l’applet de commande PowerShell Get-AzUserAssignedIdentity
.
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éé parNew-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
- Attribuez votre définition de stratégie personnalisée à l’aide du portail Azure.
- Découvrez comment visualiser les informations relatives à la conformité pour les attributions de stratégie de la configuration de la machine.