Använd 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.

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

Skapa en regelfil

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

Det här exemplet visar hur du nekar tillägg som publicerats av Microsoft.Compute genom att skapa en regelfil i Azure 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.

I en Cloud Shellskriver du:

nano $home/clouddrive/rules.json

Kopiera och klistra in följande .json i filen.

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

När du är klar trycker du på Ctrl + O och sedan Retur för att spara filen. Tryck på Ctrl + X för att stänga filen och avsluta.

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 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.

I Cloud Shellskriver du:

nano $home/clouddrive/parameters.json

Kopiera och klistra in följande .json i filen.

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

När du är klar trycker du på Ctrl + O och sedan Retur för att spara filen. Tryck på Ctrl + X för att stänga filen och avsluta.

Skapa principen

En principdefinition är ett objekt som används för att lagra den konfiguration som du vill använda. Principdefinitionen använder reglerna 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.

$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 hjälp av New-AzPolicyAssignment. Virtuella datorer som skapas i resursgruppen myResourceGroup kan inte installera VM-åtkomstagenten eller anpassade skripttillägg.

Använda | Cmdleten Format-Table 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 försöka 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 "Malldistributionen misslyckades på grund av principöverträdelse". som meddelande.

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.