Поделиться через


Ограничение установки расширений на виртуальных машинах Windows с помощью службы "Политика Azure"

Если нужно заблокировать использование или установку определенных расширений на виртуальные машины Windows, можно создать через PowerShell определение политики Azure, которая ограничивает расширения для виртуальных машин в определенной группе ресурсов.

В этом руководстве используется интерфейс Azure PowerShell в Cloud Shell, который постоянно обновляется до последней версии.

Создание файла правил

Чтобы ограничить допустимые для установки расширения, вам потребуется правило с логикой определения расширений.

В этом примере показано, как запретить расширения, опубликованные корпорацией Майкрософт. Вычисление путем создания файла правил в Azure Cloud Shell, но если вы работаете в PowerShell локально, вы также можете создать локальный файл и заменить путь ($home/clouddrive) на путь к локальному файлу на компьютере.

  1. В Cloud Shell создайте файл $home/clouddrive/rules.json с помощью любого текстового редактора.

  2. Скопируйте и вставьте следующее содержимое .json в файл и сохраните его:

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

Создание файла параметров

Вам понадобится также файл параметров, который позволяет создать структуру для передачи списка блокируемых расширений.

В этом примере показано, как создать файл параметров для виртуальных машин в Cloud Shell, но при локальной работе в PowerShell можно также создать локальный файл и заменить путь ($home/clouddrive) на путь к локальному файлу на компьютере.

  1. В Cloud Shell создайте файл $home/clouddrive/parameters.json с помощью любого текстового редактора.

  2. Скопируйте и вставьте следующее содержимое .json в файл и сохраните его:

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

Создание политики

Определение политики — это объект для хранения конфигурации, которую нужно использовать. Для определения политики используются файлы правил и параметров. Создайте определение политики с помощью командлета New-AzPolicyDefinition.

Правила и параметры этой политики представлены в виде файлов, которые вы создали в формате JSON и сохранили с помощью Cloud Shell. Замените пример -Policy и -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'

Назначение политики

В этом примере назначается политика для группы ресурсов с помощью командлета New-AzPolicyAssignment. Любая виртуальная машина, созданная в группе ресурсов myResourceGroup , не сможет установить агент доступа к виртуальной машине или расширения настраиваемых скриптов.

Командлет Get-AzSubscription | Format-Table предоставит вам идентификатор подписки, который следует указать вместо образца в примере.

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

Проверка политики

Чтобы проверить политику, попробуйте применить расширение для доступа к виртуальной машине. Следующее должно завершиться ошибкой с сообщением Set-AzVMAccessExtension: Resource 'myVMAccess' был запрещен политикой.

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

Попытка сменить пароль на портале должна завершиться ошибкой с сообщением "Не удалось развернуть шаблон, нарушена политика".

Удаление назначения

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

Удаление политики

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

Следующие шаги

Дополнительные сведения см. в статье Что такое служба "Политика Azure"?