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.
Em um bash do Cloud Shell, crie o arquivo
~/clouddrive/azurepolicy.rules.json
usando qualquer editor de texto.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.
No bash do Cloud Shell aberto antes, crie o arquivo ~/clouddrive/azurepolicy.parameters.json usando qualquer editor de texto.
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.