Share via


Utilizar Azure Policy para restringir a instalação de extensões em VMs do Linux

Se quiser impedir a instalação de determinadas extensões nas VMs do Linux, pode criar uma definição de Azure Policy com a CLI do Azure para restringir extensões para VMs dentro de um grupo de recursos. Para saber as noções básicas das extensões de VM do Azure para Linux, veja Extensões e funcionalidades de máquinas virtuais para Linux.

Este tutorial utiliza a CLI na Cloud Shell do Azure, que é constantemente atualizada para a versão mais recente. Se quiser executar a CLI do Azure localmente, tem de instalar a versão 2.0.26 ou posterior. Executar az --version para localizar a versão. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).

Criar um ficheiro de regras

Para restringir as extensões disponíveis, tem de criar uma regra para identificar a extensão.

Este exemplo demonstra como negar a instalação de extensões de VM não permitidas ao definir um ficheiro de regras no Azure Cloud Shell. No entanto, se estiver a trabalhar localmente na CLI do Azure, pode criar um ficheiro local e substituir o caminho (~/clouddrive) pelo caminho para o ficheiro no seu sistema de ficheiros local.

  1. Num bash Cloud Shell criar o ficheiro ~/clouddrive/azurepolicy.rules.json com qualquer editor de texto.

  2. Copie e cole os seguintes .json conteúdos no novo ficheiro e guarde-o.

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

Criar um ficheiro de parâmetros

Também precisa de um ficheiro de parâmetros que crie uma estrutura para utilizar para transmitir uma lista das extensões não autorizadas.

Este exemplo mostra como criar um ficheiro de parâmetros para VMs do Linux no Cloud Shell.

  1. No bash Cloud Shell aberto anteriormente, crie o ficheiro ~/clouddrive/azurepolicy.parameters.json com qualquer editor de texto.

  2. Copie e cole os seguintes .json conteúdos no novo ficheiro e guarde-o.

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

Criar a política

Uma definição de política é um objeto utilizado para armazenar a configuração que pretende utilizar. A definição de política utiliza os ficheiros de regras e parâmetros para definir a política. Crie a definição de política com az policy definition create.

Neste exemplo, as regras e os parâmetros são os ficheiros que criou e armazenou como ficheiros .json no Cloud Shell ou no seu sistema de ficheiros local.

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

Atribuir a política

Este exemplo atribui a política a um grupo de recursos com az policy assignment create. Qualquer VM criada no grupo de recursos myResourceGroup não poderá instalar o Acesso à VM do Linux ou as Extensões de Script Personalizado para Linux.

Nota

O grupo de recursos tem de existir antes de poder atribuir a política.

Utilize az account list para localizar o seu ID de subscrição e substituir o marcador de posição no exemplo seguinte:

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

Testar a política

Teste a política ao criar uma nova VM e adicionar um novo utilizador.

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

Nota

Substitua myResourceGroupe myImagemyVM os valores em conformidade.

Tente criar um novo utilizador com o nome myNewUser com a extensão de Acesso da VM.

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

Remover a atribuição

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

Remover a política

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

Passos seguintes

Para obter mais informações, veja Azure Policy.