Configurar permissões do Construtor de Imagens de VM do Azure usando a CLI do Azure
Aplica-se a: ✔️ VMs do Linux ✔️ Conjuntos de dimensionamento flexíveis
Quando você se registra no Construtor de Imagens de VM do Azure, sua assinatura obtém acesso a um nome da entidade de serviço (SPN) do Construtor de Imagens de VM. O registro também autoriza a permissão do serviço para criar, gerenciar e excluir um grupo de recursos de preparo. Para o processo de construção de imagem, a atribuição da função de Colaborador também é necessária no grupo de recursos de preparo.
Se você quiser que o Construtor de Imagens de VM distribua imagens, crie uma identidade atribuída pelo usuário no Azure, com permissões para ler e gravar 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 pelo usuário que você criar precisará de permissões para ler contêineres públicos ou privados.
Você deve configurar as 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, confira Início Rápido para Bash no Azure Cloud Shell.
Se preferir executar os comandos de referência da CLI localmente, instale a CLI do Azure. Para execuções no Windows ou no macOS, considere executar a CLI do Azure em um contêiner do Docker. Para obter mais informações, confira Como executar a CLI do Azure em um contêiner do Docker.
Se estiver usando uma instalação local, entre com a CLI do Azure usando o comando az login. Para concluir o processo de autenticação, siga as etapas exibidas no terminal. Para ver outras opções de entrada, confira Conectar-se com a CLI do Azure.
Quando solicitado, instale a extensão da CLI do Azure no primeiro uso. Para obter mais informações sobre extensões, confira Usar extensões com a CLI do Azure.
Execute az version para localizar a versão e as bibliotecas dependentes que estão instaladas. Para fazer a atualização para a versão mais recente, execute az upgrade.
Criar uma identidade gerenciada atribuída ao usuário
O Construtor de Imagens de VM exige que você crie uma identidade Azure gerenciada atribuída pelo usuário. O Construtor de Imagens de VM usa essa identidade gerenciada 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.
Observação
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 essa finalidade.
O exemplo a seguir mostra como criar uma identidade Azure gerenciada atribuída pelo usuário. Substitua as configurações de espaço reservado para definir suas variáveis.
Configuração | Descrição |
---|---|
<Grupo de recursos> | O grupo de recursos onde 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ídas pelo usuário do Azure.
Permitir que o Construtor de Imagens de VM distribua imagens
Para que o Construtor de Imagens de VM 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 à ela direitos no grupo de recursos em que a imagem é compilada. O Construtor de Imagens de VM não tem permissão para acessar os recursos em outros grupos de recursos na assinatura. Você precisa tomar ações explícitas para permitir o acesso, a fim de evitar falhas em suas compilações.
Você não precisa conceder direitos de colaborador à identidade gerenciada atribuída 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 você quiser distribuir para a Galeria de Computação do Azure, também precisará:
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 as imagens existentes
Para o Construtor de Imagens de VM compilar 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 à ela direitos no grupo de recursos em que a imagem está localizada.
Veja como você compilar a partir de uma imagem personalizada existente:
Microsoft.Compute/images/read
Veja como você cria 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 Construtor de Imagens de VM tem a capacidade de implantar e usar uma rede virtual existente em sua assinatura, permitindo assim que as personalizações acessem recursos conectados.
Você não precisa conceder direitos de colaborador à identidade gerenciada atribuída 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 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 leitura e gravação. Decida o que é apropriado para o seu ambiente. Por exemplo, crie uma função para permitir que o Construtor de Imagens de VM leia imagens do grupo de recursos example-RG-1 e grave imagens no grupo de recursos example-RG-2.
Exemplo de função de imagem personalizada do Azure
O exemplo a seguir cria uma função do Azure para usar e distribuir uma imagem personalizada de origem. Em seguida, conceda 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, primeiro defina as seguintes variáveis. Substitua as configurações de espaço reservado para definir suas variáveis.
Configuração | Descrição |
---|---|
<ID da assinatura> | Sua ID da assinatura 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, conceda 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, primeiro defina as seguintes variáveis. Substitua as configurações de espaço reservado para definir suas variáveis.
Configuração | Descrição |
---|---|
<ID da assinatura> | Sua ID da assinatura do Azure. |
<Grupo de recursos> | O grupo de recursos da 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 de Armazenamento do Azure
Se você quiser autenticar com o Armazenamento do Microsoft 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 ao Armazenamento do Microsoft Azure.
Observação
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 do Construtor de Imagens de VM, 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 o seguinte espaço reservado:
Configuração | Descrição |
---|---|
<Região> | Região do modelo |
<Grupo de recursos> | Resource group |
<Contêiner da conta de armazenamento> | Nome do contêiner da conta de armazenamento |
<ID da assinatura> | Assinatura 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 Microsoft Azure. Você aprende como criar e configurar a identidade gerenciada atribuída pelo usuário para acessar uma conta de armazenamento.