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


Использование политики Azure для ограничения установки расширений на виртуальных машинах Linux

Если вы хотите предотвратить установку определенных расширений на виртуальных машинах Linux, можно создать определение политики Azure с помощью Azure CLI для ограничения расширений для виртуальных машин в группе ресурсов. Сведения об основах расширений виртуальных машин Azure для Linux см. в статье о расширениях и функциях виртуальных машин для Linux.

В этом руководстве используется интерфейс командной строки в Azure Cloud Shell, который постоянно обновляется до последней версии. Если вы хотите локально запустить Azure CLI, необходимо установить версию 2.0.26 или более позднюю. Чтобы узнать версию, выполните команду az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.

Примечание.

Новое! Попробуйте использовать поддержку виртуальной машины для ускорения диагностикиРекомендуется запустить VM Assist для Windows или VM Assist для Linux. Эти средства диагностики на основе скриптов помогают выявить распространенные проблемы, влияющие на гостевой агент виртуальной машины Azure и общую работоспособность виртуальных машин.

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

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

В этом примере показано, как запретить установку запрещенных расширений виртуальных машин путем определения файла правил в Azure Cloud Shell. Однако если вы работаете в Azure CLI локально, вы можете создать локальный файл и заменить путь (~/clouddrive) на путь к файлу в локальной файловой системе.

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

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

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

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

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

В этом примере показано, как создать файл параметров для виртуальных машин Linux в Cloud Shell.

  1. Перед открытием bash Cloud Shell создайте файл ~/clouddrive/azurepolicy.parameters.json с помощью любого текстового редактора.

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

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

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

Определение политики — это объект, используемый для хранения конфигурации, которую вы хотите использовать. Определение политики использует файлы правил и параметров для определения политики. Создайте определение политики с помощью az policy definition create.

В этом примере правила и параметры — это файлы, созданные и сохраненные в виде .json файлов в Cloud Shell или в локальной файловой системе.

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

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

В этом примере политика назначается группе ресурсов с помощью az policy assignment create. Любая виртуальная машина, созданная в группе ресурсов myResourceGroup , не сможет установить доступ к виртуальной машине Linux или расширения пользовательских скриптов для Linux.

Примечание.

Группа ресурсов должна существовать, прежде чем можно назначить политику.

Используйте az account list, чтобы найти идентификатор подписки и заменить заполнитель в следующем примере:

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"
			]
		}
	}'

Тестирование политики

Проверьте политику, создав новую виртуальную машину и добавив нового пользователя.

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

Примечание.

Замените myResourceGroupи myVMmyImage значения соответствующим образом.

Попробуйте создать нового пользователя с именем myNewUser с помощью расширения доступа к виртуальной машине.

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

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

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

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

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

Дальнейшие действия

Для получения дополнительной информации см. Политика Azure.