Compartilhar via


Usar a política do Azure para restringir a instalação de extensões nas VMs do Linux

Se você quiser impedir a instalação de determinadas extensões em suas VMs Linux, poderá criar uma definição do Azure Policy usando a CLI do Azure para restringir as extensões para VMs em um grupo de recursos. Para conhecer os conceitos básicos das extensões de VM do Azure para Linux, consulte Extensões de máquina virtual e recursos para Linux.

Este tutorial usa o CLI dentro da Cloud Shell do Azure, que é constantemente atualizada para a versão mais recente. Se você deseja executar a CLI do Azure localmente, você precisa instalar a versão 2.0.26 ou posterior. Execute az --version para encontrar a versão. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure.

Criar um arquivo de regras

Para restringir quais extensões estão disponíveis, você precisa criar uma regra para identificar a extensão.

Este exemplo demonstra como recusar a instalação de extensões de VM não permitidas definindo um arquivo de regras no Azure Cloud Shell. No entanto, se você estiver trabalhando na CLI do Azure localmente, poderá criar um arquivo local e substituir o caminho (~/clouddrive) pelo caminho para o arquivo no sistema de arquivos local.

  1. Em um bash do Cloud Shell, crie o arquivo ~/clouddrive/azurepolicy.rules.json usando qualquer editor de texto.

  2. Copie e cole os seguintes conteúdos .json no novo arquivo e salve-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 arquivo de parâmetros

Você também precisa de um arquivo de parâmetros que cria uma estrutura para usar para passar uma lista de extensões não autorizadas.

Este exemplo mostra como criar um arquivo de parâmetro para VMs Linux no Cloud Shell.

  1. No bash do Cloud Shell aberto antes, crie o arquivo ~/clouddrive/azurepolicy.parameters.json usando qualquer editor de texto.

  2. Copie e cole os seguintes conteúdos .json no novo arquivo e salve-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 usado para armazenar a configuração que você deseja usar. A definição de política usa os arquivos de regras e parâmetros para definir a política. Criar a definição de política usando criar definição de política az.

Neste exemplo, os parâmetros e as regras são os arquivos que você criou e armazenou como arquivos .json no Cloud Shell ou no sistema de arquivos 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 usando az policy assignment create. Qualquer VM criada no grupo de recursos myResourceGroup não será capaz de instalar o Acesso à VM LInux ou as Extensões de Scrip Personalizado para Linux.

Observação

O grupo de recursos deve existir antes que você possa atribuir a política.

Use az account list para localizar a ID da assinatura e substituir o espaço reservado no seguinte exemplo:

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 criando uma VM e adicionando um novo usuário.

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

Observação

Substitua os valores myResourceGroup, myVM e myImage adequadamente.

Tente criar um novo usuário chamado myNewUser usando 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'

Próximas etapas

Para saber mais, veja Azure Policy.