Dela via


Använda Azure Policy för att begränsa installationen av tillägg på virtuella Windows-datorer

Om du vill förhindra användning eller installation av vissa tillägg på dina virtuella Windows-datorer kan du skapa en Azure Policy-definition med Hjälp av PowerShell för att begränsa tillägg för virtuella datorer i en resursgrupp.

I den här självstudien används Azure PowerShell i Cloud Shell, som ständigt uppdateras till den senaste versionen.

Skapa en regelfil

För att begränsa vilka tillägg som kan installeras måste du ha en regel för att tillhandahålla logiken för att identifiera tillägget.

Det här exemplet visar hur du nekar tillägg som publicerats av Microsoft. Beräkning genom att skapa en regelfil i Azure Cloud Shell, men om du arbetar lokalt i PowerShell kan du också skapa en lokal fil och ersätta sökvägen ($home/clouddrive) med sökvägen till den lokala filen på datorn.

  1. I ett Cloud Shell skapar du filen $home/clouddrive/rules.json med valfri textredigerare.

  2. Kopiera och klistra in följande .json innehåll i filen och spara den:

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

Skapa en parameterfil

Du behöver också en parameterfil som skapar en struktur som du kan använda för att skicka in en lista över de tillägg som ska blockeras.

Det här exemplet visar hur du skapar en parameterfil för virtuella datorer i Cloud Shell, men om du arbetar i PowerShell lokalt kan du också skapa en lokal fil och ersätta sökvägen ($home/clouddrive) med sökvägen till den lokala filen på datorn.

  1. I Cloud Shell skapar du filen $home/clouddrive/parameters.json med valfri textredigerare.

  2. Kopiera och klistra in följande .json innehåll i filen och spara den:

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

Skapa principen

En principdefinition är ett objekt som används för att lagra den konfiguration som du vill använda. Principdefinitionen använder regel- och parameterfilerna för att definiera principen. Skapa en principdefinition med cmdleten New-AzPolicyDefinition .

Principreglerna och parametrarna är de filer som du skapade och lagrade som .json filer i cloud shell. Ersätt exemplet -Policy och -Parameter filsökvägarna efter behov.

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

Tilldela principen

I det här exemplet tilldelas principen till en resursgrupp med New-AzPolicyAssignment. En virtuell dator som skapats i resursgruppen myResourceGroup kan inte installera tillägg för VM-åtkomstagenten eller anpassade skript.

Använd Get-AzSubscription | Format-Table-cmdlet för att få ditt prenumerations-ID att använda i stället för det i exemplet.

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

Testa principen

Testa principen genom att prova att använda tillägget för vm-åtkomst. Följande bör misslyckas med meddelandet "Set-AzVMAccessExtension: Resursen "myVMAccess" tilläts inte av principen.

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

I portalen bör lösenordsändringen misslyckas med meddelandet "Malldistributionen misslyckades på grund av principöverträdelse".

Ta bort tilldelningen

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

Ta bort principen

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

Nästa steg

Mer information finns i Azure Policy.