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.

Próximos passos

Visão geral do Azure VM Image Builder