Używanie Azure Policy w celu ograniczenia instalacji rozszerzeń na maszynach wirtualnych z systemem Linux

Jeśli chcesz zapobiec instalacji niektórych rozszerzeń na maszynach wirtualnych z systemem Linux, możesz utworzyć definicję Azure Policy przy użyciu interfejsu wiersza polecenia platformy Azure, aby ograniczyć rozszerzenia dla maszyn wirtualnych w grupie zasobów. Aby poznać podstawy rozszerzeń maszyn wirtualnych platformy Azure dla systemu Linux, zobacz Virtual machine extensions and features for Linux (Rozszerzenia i funkcje maszyn wirtualnych dla systemu Linux).

W tym samouczku jest używany interfejs wiersza polecenia w usłudze Azure Cloud Shell, który jest stale aktualizowany do najnowszej wersji. Jeśli chcesz uruchomić interfejs wiersza polecenia platformy Azure lokalnie, musisz zainstalować wersję 2.0.26 lub nowszą. Uruchom polecenie az --version, aby dowiedzieć się, jaka wersja jest używana. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.

Tworzenie pliku reguł

Aby ograniczyć dostępne rozszerzenia, należy utworzyć regułę w celu zidentyfikowania rozszerzenia.

W tym przykładzie pokazano, jak odrzucić instalację niedozwolonych rozszerzeń maszyn wirtualnych przez zdefiniowanie pliku reguł w usłudze Azure Cloud Shell. Jeśli jednak pracujesz lokalnie w interfejsie wiersza polecenia platformy Azure, możesz utworzyć plik lokalny i zastąpić ścieżkę (~/clouddrive) ścieżką do pliku w lokalnym systemie plików.

  1. W Cloud Shell powłoki bash utwórz plik ~/clouddrive/azurepolicy.rules.json przy użyciu dowolnego edytora tekstów.

  2. Skopiuj i wklej następującą .json zawartość do nowego pliku i zapisz go.

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

Tworzenie pliku parametrów

Potrzebny jest również plik parametrów , który tworzy strukturę do przekazania listy nieautoryzowanych rozszerzeń.

W tym przykładzie pokazano, jak utworzyć plik parametrów dla maszyn wirtualnych z systemem Linux w Cloud Shell.

  1. W Cloud Shell powłoki bash otwartej przed utwórz plik ~/clouddrive/azurepolicy.parameters.json przy użyciu dowolnego edytora tekstów.

  2. Skopiuj i wklej następującą .json zawartość do nowego pliku i zapisz go.

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

Tworzenie zasad

Definicja zasad to obiekt służący do przechowywania konfiguracji, której chcesz użyć. Definicja zasad używa plików reguł i parametrów do zdefiniowania zasad. Utwórz definicję zasad przy użyciu polecenia az policy definition create.

W tym przykładzie reguły i parametry to pliki utworzone i przechowywane jako pliki json w Cloud Shell lub w lokalnym systemie plików.

az policy definition create \
   --name 'not-allowed-vmextension-linux' \
   --display-name 'Block VM Extensions' \
   --description 'This policy governs which VM extensions that are blocked.' \
   --rules '~/clouddrive/azurepolicy.rules.json' \
   --params '~/clouddrive/azurepolicy.parameters.json' \
   --mode All

Przypisywanie zasad

W tym przykładzie zasady są przypisywane do grupy zasobów przy użyciu polecenia az policy assignment create. Każda maszyna wirtualna utworzona w grupie zasobów myResourceGroup nie będzie mogła zainstalować dostępu do maszyny wirtualnej z systemem Linux ani niestandardowych rozszerzeń skryptów dla systemu Linux.

Uwaga

Grupa zasobów musi istnieć, aby można było przypisać zasady.

Użyj polecenia az account list , aby znaleźć identyfikator subskrypcji i zastąpić symbol zastępczy w poniższym przykładzie:

az policy assignment create \
   --name 'not-allowed-vmextension-linux' \
   --scope /subscriptions/<subscription Id>/resourceGroups/myResourceGroup \
   --policy "not-allowed-vmextension-linux" \
   --params '{
		"notAllowedExtensions": {
			"value": [
				"VMAccessForLinux",
				"CustomScriptForLinux"
			]
		}
	}'

Testowanie zasad

Przetestuj zasady, tworząc nową maszynę wirtualną i dodając nowego użytkownika.

az vm create \
    --resource-group myResourceGroup \
	--name myVM \
	--image myImage \
	--generate-ssh-keys

Uwaga

Zastąp myResourceGroupodpowiednio wartości i myVM .myImage

Spróbuj utworzyć nowego użytkownika o nazwie myNewUser przy użyciu rozszerzenia VM Access.

az vm user update \
  --resource-group myResourceGroup \
  --name myVM \
  --username myNewUser \
  --password 'mynewuserpwd123!'

Usuwanie przypisania

az policy assignment delete --name 'not-allowed-vmextension-linux' --resource-group myResourceGroup

Usuwanie zasad

az policy definition delete --name 'not-allowed-vmextension-linux'

Następne kroki

Aby uzyskać więcej informacji, zobacz Azure Policy.