Configurar permissões do Construtor de Imagens de VM do Azure usando a CLI do Azure
Aplica-se a: ✔️ Linux VMs ✔️ Conjuntos de escala flexível
Quando se regista no Azure VM Image Builder, a sua subscrição obtém acesso a um SPN (nome principal do serviço VM Image Builder). Esse registro também autoriza a permissão de serviço para criar, gerenciar e excluir um grupo de recursos de preparo. Para o processo de criação de imagem, a atribuição de função de Colaborador também é necessária no grupo de recursos de preparação.
Se quiser que o Construtor de Imagens de VM distribua imagens, terá de criar uma identidade atribuída pelo utilizador no Azure, com permissões para ler e escrever imagens. Por exemplo, talvez você queira distribuir imagens para imagens gerenciadas ou para a Galeria de Computação do Azure. Se você estiver acessando o armazenamento do Azure, a identidade atribuída ao usuário que você criar precisará de permissões para ler contêineres públicos ou privados.
Você deve configurar permissões e privilégios antes de criar uma imagem. As seções a seguir detalham como configurar possíveis cenários usando a CLI do Azure.
Pré-requisitos
Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, consulte Guia de início rápido para Bash no Azure Cloud Shell.
Se preferir executar comandos de referência da CLI localmente, instale a CLI do Azure. Se estiver a utilizar o Windows ou macOS, considere executar a CLI do Azure num contentor Docker. Para obter mais informações, consulte Como executar a CLI do Azure em um contêiner do Docker.
Se estiver a utilizar uma instalação local, inicie sessão no CLI do Azure ao utilizar o comando az login. Para concluir o processo de autenticação, siga os passos apresentados no seu terminal. Para outras opções de entrada, consulte Entrar com a CLI do Azure.
Quando solicitado, instale a extensão da CLI do Azure na primeira utilização. Para obter mais informações sobre as extensões, veja Utilizar extensões com o CLI do Azure.
Execute o comando az version para localizar a versão e as bibliotecas dependentes instaladas. Para atualizar para a versão mais recente, execute o comando az upgrade.
Criar uma identidade gerida atribuída pelo utilizador
O Construtor de Imagens de VM requer que você crie uma identidade gerenciada atribuída pelo usuário do Azure. O Construtor de Imagens de VM usa essa identidade para ler imagens, gravar imagens e acessar contas de armazenamento do Azure. Você concede a permissão de identidade para realizar ações específicas em sua assinatura.
Nota
A identidade gerenciada atribuída pelo usuário é a maneira correta de conceder permissões aos grupos de recursos de imagem. O SPN foi preterido para este fim.
O exemplo a seguir mostra como criar uma identidade gerenciada atribuída pelo usuário do Azure. Substitua as configurações de espaço reservado para definir suas variáveis.
Definição | Descrição |
---|---|
<Grupo de recursos> | O grupo de recursos onde você deseja criar a identidade gerenciada atribuída pelo usuário. |
identityName="aibIdentity"
imageResourceGroup=<Resource group>
az identity create \
--resource-group $imageResourceGroup \
--name $identityName
Para obter mais informações, consulte Identidade gerenciada atribuída pelo usuário do Azure.
Permitir que o Construtor de Imagens VM distribua imagens
Para que o VM Image Builder distribua imagens, o serviço deve ter permissão para injetar as imagens em grupos de recursos. Para conceder as permissões necessárias, crie uma identidade gerenciada atribuída pelo usuário e conceda a ela direitos no grupo de recursos onde a imagem é construída. O Construtor de Imagens de VM não tem permissão para acessar recursos em outros grupos de recursos na assinatura. Você precisa tomar ações explícitas para permitir o acesso, para evitar que suas compilações falhem.
Não é necessário conceder aos direitos de contribuidor de identidade gerenciada atribuídos pelo usuário no grupo de recursos para distribuir imagens. No entanto, a identidade gerenciada atribuída pelo usuário precisa das seguintes permissões do Azure Actions
no grupo de recursos de distribuição:
Microsoft.Compute/images/write
Microsoft.Compute/images/read
Microsoft.Compute/images/delete
Se quiser distribuir para a Galeria de Computação do Azure, você também precisa:
Microsoft.Compute/galleries/read
Microsoft.Compute/galleries/images/read
Microsoft.Compute/galleries/images/versions/read
Microsoft.Compute/galleries/images/versions/write
Permissão para personalizar imagens existentes
Para que o VM Image Builder crie imagens a partir de imagens personalizadas de origem, o serviço deve ter permissão para ler as imagens nesses grupos de recursos. Para conceder as permissões necessárias, crie uma identidade gerenciada atribuída pelo usuário e conceda a ela direitos no grupo de recursos onde a imagem está localizada.
Veja como criar a partir de uma imagem personalizada existente:
Microsoft.Compute/images/read
Veja como criar a partir de uma versão existente da Galeria de Computação do Azure:
Microsoft.Compute/galleries/read
Microsoft.Compute/galleries/images/read
Microsoft.Compute/galleries/images/versions/read
Permissão para personalizar imagens em suas redes virtuais
O VM Image Builder tem a capacidade de implantar e usar uma rede virtual existente em sua assinatura, permitindo assim que as personalizações acessem recursos conectados.
Não é necessário conceder aos direitos de colaborador de identidade gerenciada atribuídos pelo usuário no grupo de recursos para implantar uma VM em uma rede virtual existente. No entanto, a identidade gerenciada atribuída pelo usuário precisa das seguintes permissões do Azure Actions
no grupo de recursos de rede virtual:
Microsoft.Network/virtualNetworks/read
Microsoft.Network/virtualNetworks/subnets/join/action
Criar uma definição de função do Azure
Os exemplos a seguir criam uma definição de função do Azure a partir das ações descritas nas seções anteriores. Os exemplos são aplicados no nível do grupo de recursos. Avalie e teste se os exemplos são granulares o suficiente para suas necessidades.
As ações de imagem permitem ler e escrever. Decida o que é apropriado para o seu ambiente. Por exemplo, crie uma função para permitir que o Construtor de Imagens da VM leia imagens do grupo de recursos example-rg-1 e grave imagens no grupo de recursos example-rg-2.
Imagem personalizada Exemplo de função do Azure
O exemplo a seguir cria uma função do Azure para usar e distribuir uma imagem personalizada de origem. Em seguida, você concede a função personalizada à identidade gerenciada atribuída pelo usuário para o Construtor de Imagens de VM.
Para simplificar a substituição de valores no exemplo, defina primeiro as seguintes variáveis. Substitua as configurações de espaço reservado para definir suas variáveis.
Definição | Descrição |
---|---|
<ID da Subscrição> | O seu ID de subscrição do Azure. |
<Grupo de recursos> | Grupo de recursos para a imagem personalizada. |
# Subscription ID - You can get this using `az account show | grep id` or from the Azure portal.
subscriptionID=$(az account show --query id --output tsv)
# Resource group - image builder will only support creating custom images in the same Resource Group as the source managed image.
imageResourceGroup=<Resource group>
identityName="aibIdentity"
# Use *cURL* to download the a sample JSON description
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json -o aibRoleImageCreation.json
# Create a unique role name to avoid clashes in the same Azure Active Directory domain
imageRoleDefName="Azure Image Builder Image Def"$(date +'%s')
# Update the JSON definition using stream editor
sed -i -e "s/<subscriptionID>/$subscriptionID/g" aibRoleImageCreation.json
sed -i -e "s/<rgName>/$imageResourceGroup/g" aibRoleImageCreation.json
sed -i -e "s/Azure Image Builder Service Image Creation Role/$imageRoleDefName/g" aibRoleImageCreation.json
# Create a custom role from the sample aibRoleImageCreation.json description file.
az role definition create --role-definition ./aibRoleImageCreation.json
# Get the user-assigned managed identity id
imgBuilderCliId=$(az identity show -g $imageResourceGroup -n $identityName --query clientId -o tsv)
# Grant the custom role to the user-assigned managed identity for Azure Image Builder.
az role assignment create \
--assignee $imgBuilderCliId \
--role $imageRoleDefName \
--scope /subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup
Exemplo de função do Azure de rede virtual existente
O exemplo a seguir cria uma função do Azure para usar e distribuir uma imagem de rede virtual existente. Em seguida, você concede a função personalizada à identidade gerenciada atribuída pelo usuário para o Construtor de Imagens de VM.
Para simplificar a substituição de valores no exemplo, defina primeiro as seguintes variáveis. Substitua as configurações de espaço reservado para definir suas variáveis.
Definição | Descrição |
---|---|
<ID da Subscrição> | O seu ID de subscrição do Azure. |
<Grupo de recursos> | O grupo de recursos de rede virtual |
# Subscription ID - You can get this using `az account show | grep id` or from the Azure portal.
subscriptionID=$(az account show --query id --output tsv)
VnetResourceGroup=<Resource group>
identityName="aibIdentity"
# Use *cURL* to download the a sample JSON description
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleNetworking.json -o aibRoleNetworking.json
# Create a unique role name to avoid clashes in the same domain
netRoleDefName="Azure Image Builder Network Def"$(date +'%s')
# Update the JSON definition using stream editor
sed -i -e "s/<subscriptionID>/$subscriptionID/g" aibRoleNetworking.json
sed -i -e "s/<vnetRgName>/$VnetResourceGroup/g" aibRoleNetworking.json
sed -i -e "s/Azure Image Builder Service Networking Role/$netRoleDefName/g" aibRoleNetworking.json
# Create a custom role from the aibRoleNetworking.json description file.
az role definition create --role-definition ./aibRoleNetworking.json
# Get the user-assigned managed identity id
imgBuilderCliId=$(az identity show -g $imageResourceGroup -n $identityName --query clientId -o tsv)
# Grant the custom role to the user-assigned managed identity for Azure Image Builder.
az role assignment create \
--assignee $imgBuilderCliId \
--role $netRoleDefName \
--scope /subscriptions/$subscriptionID/resourceGroups/$VnetResourceGroup
Usando a identidade gerenciada para acesso ao Armazenamento do Azure
Se você quiser autenticar com o Armazenamento do Azure e usar contêineres privados, o Construtor de Imagens de VM precisará de uma identidade gerenciada atribuída pelo usuário. O Construtor de Imagens de VM usa a identidade para autenticar com o Armazenamento do Azure.
Nota
O Construtor de Imagens de VM usa apenas a identidade no momento em que você envia o modelo de imagem. A VM de compilação não tem acesso à identidade durante a compilação da imagem.
Use a CLI do Azure para criar a identidade gerenciada atribuída pelo usuário:
az role assignment create \
--assignee <Image Builder client ID> \
--role "Storage Blob Data Reader" \
--scope /subscriptions/<Subscription ID>/resourceGroups/<Resource group>/providers/Microsoft.Storage/storageAccounts/$scriptStorageAcc/blobServices/default/containers/<Storage account container>
No modelo VM Image Builder, forneça a identidade gerenciada atribuída pelo usuário:
"type": "Microsoft.VirtualMachineImages/imageTemplates",
"apiVersion": "2020-02-14",
"location": "<Region>",
..
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"<Image Builder ID>": {}
}
Substitua as seguintes configurações de espaço reservado:
Definição | Descrição |
---|---|
<Região> | Região do modelo |
<Grupo de recursos> | Grupo de recursos |
<Contêiner da conta de armazenamento> | Nome do contentor da conta de armazenamento |
<ID da Subscrição> | Subscrição do Azure |
Para obter mais informações, consulte Criar uma imagem e usar uma identidade gerenciada atribuída pelo usuário para acessar arquivos no Armazenamento do Azure. Você aprende a criar e configurar a identidade gerenciada atribuída pelo usuário para acessar uma conta de armazenamento.