Partager via


Utiliser Azure Policy pour restreindre l’installation d’extensions sur les machines virtuelles Windows

Si vous souhaitez empêcher l’utilisation ou l’installation de certaines extensions sur vos machines virtuelles Windows, vous pouvez créer une définition Azure Policy à l’aide de PowerShell afin de restreindre les extensions pour les machines virtuelles dans un groupe de ressources.

Ce didacticiel utilise Azure PowerShell dans Cloud Shell, qui est constamment mise à jour vers la dernière version.

Créer un fichier de règles

Pour restreindre les extensions qui peuvent être installées, vous devez disposer d’une règle qui fournit la logique permettant d’identifier l’extension.

Cet exemple montre comment interdire l’installation des extensions publiées par « Microsoft. Compute » en créant un fichier de règles dans Azure Cloud Shell. Cependant, si vous utilisez PowerShell localement, vous pouvez également créer un fichier local et remplacer le chemin d’accès ($home/clouddrive) par le chemin d’accès au fichier local sur votre ordinateur.

  1. Dans un Cloud Shell, créez le fichier $home/clouddrive/rules.json au moyen de n’importe quel éditeur de texte.

  2. Copiez et collez les contenus .json suivants dans le fichier et enregistrez-le :

{
	"if": {
		"allOf": [
			{
				"field": "type",
				"equals": "Microsoft.Compute/virtualMachines/extensions"
			},
			{
				"field": "Microsoft.Compute/virtualMachines/extensions/publisher",
				"equals": "Microsoft.Compute"
			},
			{
				"field": "Microsoft.Compute/virtualMachines/extensions/type",
				"in": "[parameters('notAllowedExtensions')]"
			}
		]
	},
	"then": {
		"effect": "deny"
	}
}

Créer un fichier de paramètres

Vous avez également besoin d’un fichier de paramètres qui crée une structure que vous pourrez utiliser pour transmettre la liste des extensions à bloquer.

Cet exemple montre comment créer un fichier de paramètres pour les machines virtuelles dans Cloud Shell. Cependant, si vous utilisez PowerShell localement, vous pouvez également créer un fichier local et remplacer le chemin d’accès ($home/clouddrive) par le chemin d’accès au fichier local sur votre ordinateur.

  1. Dans Cloud Shell, créez le fichier $home/clouddrive/parameters.json au moyen de n’importe quel éditeur de texte.

  2. Copiez et collez les contenus .json suivants dans le fichier et enregistrez-le :

{
	"notAllowedExtensions": {
		"type": "Array",
		"metadata": {
			"description": "The list of extensions that will be denied.",
			"displayName": "Denied extension"
		}
	}
}

Création de la stratégie

Une définition de stratégie est un objet servant à stocker la configuration que vous souhaitez utiliser. La définition de stratégie fait appel aux fichiers de règles et de paramètres pour définir la stratégie. Créez une définition de stratégie à l'aide de la cmdlet New-AzPolicyDefinition.

Les règles de stratégie et les paramètres correspondent aux fichiers que vous avez créés et stockés en tant que fichiers .json dans votre Cloud Shell. Remplacez les exemples de chemins de fichier -Policy et -Parameter selon vos besoins.

$definition = New-AzPolicyDefinition `
   -Name "not-allowed-vmextension-windows" `
   -DisplayName "Not allowed VM Extensions" `
   -description "This policy governs which VM extensions that are explicitly denied."   `
   -Policy 'C:\Users\ContainerAdministrator\clouddrive\rules.json' `
   -Parameter 'C:\Users\ContainerAdministrator\clouddrive\parameters.json'

Affecter la stratégie

Dans cet exemple, la stratégie est affectée à un groupe de ressources à l'aide de la commande New-AzPolicyAssignment. N’importe quelle machine virtuelle créée dans le groupe de ressources myResourceGroup ne pourra pas installer les extensions VM Access Agent ou Custom Script.

Utilisez la cmdlet Get-AzSubscription | Format-Table pour obtenir l'ID d'abonnement qui remplacera celui de l'exemple.

$scope = "/subscriptions/<subscription id>/resourceGroups/myResourceGroup"
$assignment = New-AzPolicyAssignment `
   -Name "not-allowed-vmextension-windows" `
   -Scope $scope `
   -PolicyDefinition $definition `
   -PolicyParameter '{
    "notAllowedExtensions": {
        "value": [
            "VMAccessAgent",
            "CustomScriptExtension"
        ]
    }
}'
$assignment

Tester la stratégie

Pour tester la stratégie, essayez d’utiliser l’extension d’accès de la machine virtuelle. Ce qui suit doit échouer avec le message « Set-AzVMAccessExtension : La ressource 'myVMAccess' a été interdite par la stratégie ».

Set-AzVMAccessExtension `
   -ResourceGroupName "myResourceGroup" `
   -VMName "myVM" `
   -Name "myVMAccess" `
   -Location EastUS

Dans le portail, le changement de mot de passe échoue avec le message « Le déploiement de modèle a échoué en raison de la violation de stratégie. ».

Supprimer l’affectation

Remove-AzPolicyAssignment -Name not-allowed-vmextension-windows -Scope $scope

Supprimer la stratégie

Remove-AzPolicyDefinition -Name not-allowed-vmextension-windows

Étapes suivantes

Pour plus d’informations, consultez Présentation d’Azure Policy.