Condividi tramite


Usare Criteri di Azure per limitare l'installazione di estensioni in macchine virtuali Windows

Se si vuole impedire l'uso o l'installazione di determinate estensioni nelle macchine virtuali Windows, è possibile creare una definizione di Criteri di Azure usando PowerShell per limitare le estensioni per le macchine virtuali all'interno di un gruppo di risorse.

Questa esercitazione usa Azure PowerShell all'interno di Cloud Shell, che viene costantemente aggiornato alla versione più recente.

Creare un file delle regole

Per limitare le estensioni installabili, è necessario definire una regola per indicare la logica necessaria a identificare l'estensione.

Questo esempio illustra come negare le estensioni pubblicate da 'Microsoft. Il calcolo crea un file di regole in Azure Cloud Shell, ma se si usa PowerShell in locale, è anche possibile creare un file locale e sostituire il percorso ($home/clouddrive) con il percorso del file locale nel computer.

  1. In Cloud Shell creare il file $home/clouddrive/rules.json usando qualsiasi editor di testo.

  2. Copiare e incollare il contenuto di .json seguente nel file e salvarlo:

{
	"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"
	}
}

Creare un file di parametri

È anche necessario un file di parametri per la creazione di una struttura da usare per passare un elenco delle estensioni da bloccare.

Questo esempio illustra come creare un file di parametri per le macchine virtuali in Cloud Shell, ma se si usa PowerShell in locale, è anche possibile creare un file locale e sostituire il percorso ($home/clouddrive) con il percorso del file locale nel computer.

  1. In Cloud Shell creare il file $home/clouddrive/parameters.json usando qualsiasi editor di testo.

  2. Copiare e incollare il contenuto di .json seguente nel file e salvarlo:

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

Creare i criteri

Una definizione di criteri è un oggetto usato per archiviare la configurazione che si desidera usare. La definizione di criteri usa i file di regole e parametri per definire i criteri. Creare una definizione di criteri usando il cmdlet New-AzPolicyDefinition.

Le regole e i parametri dei criteri sono file creati e archiviati come file con estensione JSON in Cloud Shell. Sostituire i percorsi di esempio -Policy e -Parameter di file in base alle esigenze.

$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'

Assegnare i criteri

Questo esempio assegna i criteri a un gruppo di risorse usando New-AzPolicyAssignment. Qualsiasi macchina virtuale creata nel gruppo di risorse myResourceGroup non sarà in grado di installare l'agente di accesso alla macchina virtuale o le estensioni script personalizzate.

Usare il cmdlet Get-AzSubscription | Format-Table per ottenere l'ID della sottoscrizione da sostituire a quello nell'esempio.

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

Testare il criterio

Per testare i criteri, provare a usare l'estensione di accesso alla macchina virtuale. L'errore seguente dovrebbe avere esito negativo con il messaggio "Set-AzVMAccessExtension: la risorsa 'myVMAccess' non è stata consentita dai criteri".

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

Nel portale la modifica della password dovrebbe non riuscire con il messaggio "La distribuzione del modello non è riuscita a causa di una violazione dei criteri".

Rimuovere l'assegnazione

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

Rimuovere i criteri

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

Passaggi successivi

Per altre informazioni, vedere Criteri di Azure.