Configuración de los permisos de Azure VM Image Builder mediante la CLI de Azure

Se aplica a: ✔️ máquinas virtuales Linux ✔️ conjuntos de escalado flexibles

Cuando se registra en Azure VM Image Builder, la suscripción obtiene acceso a un nombre de entidad principal de servicio (SPN) de VM Image Builder. Este registro también autoriza el permiso de servicio para crear, administrar y eliminar un grupo de recursos de almacenamiento provisional. Para el proceso de compilación de imágenes, también se requiere la asignación de roles de colaborador en el grupo de recursos de almacenamiento provisional.

Si quiere que VM Image Builder distribuya imágenes, debe crear una identidad asignada por el usuario en Azure, con permisos para leer y escribir imágenes. Por ejemplo, puede que quiera distribuir imágenes a imágenes administradas o a Azure Compute Gallery. Si accede a Azure Storage, la identidad asignada por el usuario que cree necesita permisos para leer contenedores públicos o privados.

Debe configurar los permisos y los privilegios antes de crear una imagen. En las secciones siguientes se detalla cómo configurar posibles escenarios mediante la CLI de Azure.

Requisitos previos

Crear una identidad administrada asignada por el usuario

VM Image Builder requiere la creación de una identidad administrada de Azure asignada por el usuario. VM Image Builder usa esta identidad para leer imágenes, escribir imágenes y acceder a las cuentas de Azure Storage. El permiso de identidad se concede para realizar acciones específicas en una suscripción.

Nota

La identidad administrada asignada por el usuario es la manera correcta de conceder permisos a los grupos de recursos de imagen. El SPN está en desuso para este fin.

En el ejemplo siguiente se muestra cómo crear una identidad administrada de Azure asignada por el usuario. Reemplace la configuración del marcador de posición para establecer las variables.

Configuración Descripción
<Grupos de recursos> El grupo de recursos en donde quiere crear la identidad administrada asignada por el usuario.
identityName="aibIdentity"
imageResourceGroup=<Resource group>

az identity create \
    --resource-group $imageResourceGroup \
    --name $identityName

Para obtener más información, consulte Identidad administrada asignada por el usuario de Azure.

Permiso para que VM Image Builder distribuya imágenes

Para que VM Image Builder distribuya las imágenes, se debe permitir al servicio insertar las imágenes en los grupos de recursos. Para conceder los permisos necesarios, cree una identidad administrada asignada por el usuario y conceda derechos en el grupo de recursos donde se crea la imagen. VM Image Builder no tiene permiso para acceder a los recursos de otros grupos de recursos de la suscripción. Debe realizar acciones explícitas para permitir el acceso para evitar errores en la creación.

No es necesario conceder derechos de colaborador de identidad administrada asignada por el usuario en el grupo de recursos para distribuir las imágenes. Sin embargo, la identidad administrada asignada por el usuario necesita los siguientes permisos Actions de Azure en el grupo de recursos de distribución:

Microsoft.Compute/images/write
Microsoft.Compute/images/read
Microsoft.Compute/images/delete

Si quiere distribuir a Azure Compute Gallery, también necesita lo siguiente:

Microsoft.Compute/galleries/read
Microsoft.Compute/galleries/images/read
Microsoft.Compute/galleries/images/versions/read
Microsoft.Compute/galleries/images/versions/write

Permiso para personalizar las imágenes existentes

Para que VM Image Builder cree imágenes a partir de imágenes personalizadas de origen, se debe permitir que el servicio lea las imágenes en estos grupos de recursos. Para conceder los permisos necesarios, cree una identidad administrada asignada por el usuario y conceda derechos en el grupo de recursos donde se ubica la imagen.

A continuación, se muestra cómo se crea a partir de una imagen personalizada existente:

Microsoft.Compute/images/read

A continuación, se muestra cómo se crea a partir de una versión existente de Azure Compute Gallery:

Microsoft.Compute/galleries/read
Microsoft.Compute/galleries/images/read
Microsoft.Compute/galleries/images/versions/read

Permiso para personalizar imágenes en redes virtuales

VM Image Builder tiene la capacidad de implementar y usar una red virtual existente en su suscripción, lo que permite que las personalizaciones tengan acceso a los recursos conectados.

No es necesario conceder derechos de colaborador de identidad administrada asignada por el usuario en el grupo de recursos para implementar una VM en una red virtual existente. Sin embargo, la identidad administrada asignada por el usuario necesita los siguientes permisos Actions de Azure en el grupo de recursos de red virtual:

Microsoft.Network/virtualNetworks/read
Microsoft.Network/virtualNetworks/subnets/join/action

Creación de una definición de roles de Azure

En los ejemplos siguientes se crea una definición de roles de Azure a partir de las acciones descritas en las secciones anteriores. Los ejemplos se aplican en el nivel de grupo de recursos. Evalúe y pruebe si los ejemplos son lo suficientemente detallados para sus requisitos.

Las acciones en las imágenes permiten la lectura y escritura. Decida qué es adecuado para su entorno. Por ejemplo, cree un rol para permitir que VM Image Builder lea imágenes del grupo de recursos example-rg-1 y escriba imágenes en el grupo de recursos example-rg-2.

Ejemplo de rol de Azure de imagen personalizada

En el ejemplo siguiente se crea un rol de Azure para usar y distribuir una imagen personalizada de origen. A continuación, conceda el rol personalizado a la identidad administrada asignada por el usuario para VM Image Builder.

Para simplificar la sustitución de valores en el ejemplo, establezca las siguientes variables primero. Reemplace la configuración del marcador de posición para establecer las variables.

Configuración Descripción
<Subscription ID> Su identificador de suscripción de Azure.
<Grupos de recursos> Grupo de recursos para la imagen 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

Ejemplo de rol de Azure de red virtual existente

En el ejemplo siguiente se crea un rol de Azure para usar y distribuir una imagen de red virtual existente. A continuación, conceda el rol personalizado a la identidad administrada asignada por el usuario para VM Image Builder.

Para simplificar la sustitución de valores en el ejemplo, establezca las siguientes variables primero. Reemplace la configuración del marcador de posición para establecer las variables.

Configuración Descripción
<Subscription ID> Su identificador de suscripción de Azure.
<Grupos de recursos> Grupo de recursos de la red 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>/$vnetRgName/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

Uso de la identidad administrada para el acceso a Azure Storage

Si quiere autenticarse en Azure Storage y usar contenedores privados, VM Image Builder necesita una identidad administrada asignada por el usuario. VM Image Builder usa la identidad para autenticarse en Azure Storage.

Nota

VM Image Builder solo usa la identidad en el momento en que envía la plantilla de imagen. La VM de creación no tiene acceso a la identidad durante la creación de la imagen.

Use la CLI de Azure para crear la identidad administrada asignada por el usuario:

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>

En la plantilla de VM Image Builder, proporcione la identidad administrada asignada por el usuario:

    "type": "Microsoft.VirtualMachineImages/imageTemplates",
    "apiVersion": "2020-02-14",
    "location": "<Region>",
    ..
    "identity": {
    "type": "UserAssigned",
          "userAssignedIdentities": {
            "<Image Builder ID>": {}     
        }

Reemplace la configuración del marcador de posición siguiente:

Configuración Descripción
<Región> Región de la plantilla
<Grupos de recursos> Resource group
<Contenedor de cuenta de almacenamiento> El nombre del contenedor de la cuenta de almacenamiento
<Subscription ID> Suscripción de Azure

Para más información, consulte Creación de una imagen y uso de una identidad administrada asignada por el usuario para acceder a archivos en Azure Storage. Aprenderá a crear y configurar la identidad administrada asignada por el usuario para acceder a una cuenta de almacenamiento.

Pasos siguientes

Introducción a Azure VM Image Builder