Partilhar via


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

Se quiser impedir a instalação de determinadas extensões em suas VMs Linux, você pode criar uma definição de Política do Azure usando a CLI do Azure para restringir extensões para VMs dentro de um grupo de recursos. Para aprender as noções básicas das extensões de VM do Azure para Linux, consulte Extensões de máquina virtual e recursos para Linux.

Este tutorial usa a CLI no Azure Cloud Shell, que é constantemente atualizado para a versão mais recente. Se você quiser executar a CLI do Azure localmente, precisará 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 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 negar 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 em seu sistema de arquivos local.

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

  2. Copie e cole o seguinte .json conteúdo 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 crie uma estrutura para você 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 Cloud Shell aberto antes, crie o arquivo ~/clouddrive/azurepolicy.parameters.json usando qualquer editor de texto.

  2. Copie e cole o seguinte .json conteúdo 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ê gostaria de usar. A definição de política usa os arquivos de regras e parâmetros para definir a política. Crie a definição de política usando az policy definition create.

Neste exemplo, as regras e parâmetros são os arquivos que você criou e armazenou como arquivos .json no Cloud Shell ou em seu 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 createo . Qualquer VM criada no grupo de recursos myResourceGroup não poderá instalar o Linux VM Access ou as Extensões de Script Personalizadas para Linux.

Nota

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

Use az account list para localizar sua ID de assinatura e substituir o espaço reservado no exemplo a seguir:

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

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

Nota

Substitua myResourceGroup, myVM e myImage os valores de acordo.

Tente criar um novo usuário chamado myNewUser usando a extensão VM Access.

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óximos passos

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