Delen via


Azure Policy gebruiken om de installatie van extensies op Windows-VM's te beperken

Als u het gebruik of de installatie van bepaalde extensies op uw Windows-VM's wilt voorkomen, kunt u een Azure Policy-definitie maken met behulp van PowerShell om extensies voor VM's binnen een resourcegroep te beperken.

In deze zelfstudie wordt Gebruikgemaakt van Azure PowerShell in De Cloud Shell, die voortdurend wordt bijgewerkt naar de nieuwste versie.

Opmerking

New! VM-hulp proberen voor snellere diagnostische gegevens' U wordt aangeraden VM-hulp uit te voeren voor Windows of VM-hulp voor Linux. Met deze diagnostische hulpprogramma's op basis van scripts kunt u veelvoorkomende problemen identificeren die van invloed zijn op de Azure VM-gastagent en de algehele VM-status.

Een regelbestand maken

Als u wilt beperken welke extensies kunnen worden geïnstalleerd, moet u een regel hebben om de logica op te geven om de extensie te identificeren.

In dit voorbeeld ziet u hoe u extensies kunt weigeren die zijn gepubliceerd door Microsoft. Compute' door een regelbestand te maken in Azure Cloud Shell, maar als u lokaal in PowerShell werkt, kunt u ook een lokaal bestand maken en het pad ($home/clouddrive) vervangen door het pad naar het lokale bestand op uw computer.

  1. Maak in een Cloud Shell het bestand $home/clouddrive/rules.json met behulp van een teksteditor.

  2. Kopieer en plak de volgende .json inhoud in het bestand en sla het op:

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

Een parameterbestand maken

U hebt ook een parameterbestand nodig waarmee u een structuur kunt maken die u kunt gebruiken voor het doorgeven van een lijst met extensies die u wilt blokkeren.

In dit voorbeeld ziet u hoe u een parameterbestand maakt voor VM's in Cloud Shell, maar als u lokaal in PowerShell werkt, kunt u ook een lokaal bestand maken en het pad ($home/clouddrive) vervangen door het pad naar het lokale bestand op uw computer.

  1. Maak in Cloud Shell het bestand $home/clouddrive/parameters.json met behulp van een teksteditor.

  2. Kopieer en plak de volgende .json inhoud in het bestand en sla het op:

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

Het beleid maken

Een beleidsdefinitie is een object dat wordt gebruikt voor het opslaan van de configuratie die u wilt gebruiken. De beleidsdefinitie maakt gebruik van de regels en parametersbestanden om het beleid te definiëren. Maak een beleidsdefinitie met behulp van de cmdlet New-AzPolicyDefinition .

De beleidsregels en parameters zijn de bestanden die u hebt gemaakt en opgeslagen als .json bestanden in uw cloudshell. Vervang indien nodig de voorbeeldbestandspaden -Policy en -Parameter.

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

Het beleid toewijzen

In dit voorbeeld wordt het beleid aan een resourcegroep toegewezen met behulp van New-AzPolicyAssignment. Vm's die zijn gemaakt in de resourcegroep myResourceGroup , kunnen de VM-toegangsagent of aangepaste scriptextensies niet installeren.

Gebruik de Get-AzSubscription | Cmdlet Format-Table om uw abonnements-id op te halen voor gebruik in plaats van de id in het voorbeeld.

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

Het beleid testen

Als u het beleid wilt testen, probeert u de VM-toegangsextensie te gebruiken. Het volgende moet mislukken met het bericht "Set-AzVMAccessExtension: Resource 'myVMAccess' was verboden volgens het beleid."

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

In de portal moet de wachtwoordwijziging mislukken met het bericht 'De sjabloonimplementatie is mislukt vanwege beleidsschending'.

De toewijzing verwijderen

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

Het beleid verwijderen

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

Volgende stappen

Zie Azure Policy voor meer informatie.