Configurer les autorisations d’Azure VM Image Builder avec Azure CLI

S’applique à : ✔️ Machines virtuelles Linux ✔️ Groupes identiques flexibles

Lorsque vous vous inscrivez à Azure VM Image Builder, votre abonnement obtient l’accès à un nom de principal du service (SPN) VM Image Builder. Cette inscription autorise également le service à créer, gérer et supprimer un groupe de ressources intermédiaire. Pour le processus de génération d’images, l’attribution du rôle Contributeur est également requise au niveau du groupe de ressources intermédiaire.

Si vous souhaitez qu’Azure VM Image Builder distribue des images, vous devez créer une identité affectée par l’utilisateur dans Azure, avec des autorisations pour lire et écrire des images. Par exemple, vous pouvez distribuer des images à des images managées ou à Azure Compute Gallery. Si vous accédez au stockage Azure, l’identité attribuée par l’utilisateur que vous créez nécessite des autorisations pour lire des conteneurs privés ou publics.

Vous devez configurer les autorisations et les privilèges avant de générer une image. Les sections suivantes détaillent comment configurer les scénarios possibles à l’aide de l’Azure CLI.

Prérequis

Créer une identité managée attribuée par l’utilisateur

Azure VM Image Builder vous oblige à créer une identité managée affectée par l’utilisateur Azure. Azure VM Image Builder utilise cette identité pour lire les images, écrire les images et accéder aux comptes de stockage Azure. Vous octroyez l’autorisation d’identité pour effectuer des actions spécifiques dans votre abonnement.

Notes

L’identité managée affectée par l’utilisateur est la bonne façon d’accorder des autorisations aux groupes de ressources d’images. Le SPN est déconseillé à cet effet.

L’exemple suivant montre comment créer une identité managée attribuée par l’utilisateur Azure. Remplacez les paramètres d’espaces réservés pour définir vos variables.

Paramètre Description
<Groupe de ressources> Le groupe de ressources dans lequel vous souhaitez créer l’identité managée attribuée par l'utilisateur.
identityName="aibIdentity"
imageResourceGroup=<Resource group>

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

Pour plus d’informations, voir Identité managée affectée par l’utilisateur Azure.

Autoriser Azure VM Image Builder à distribuer des images

Pour que Azure Image Builder distribue des images, le service Azure Image Builder doit être autorisé à injecter les images dans des groupes de ressources. Pour octroyer les autorisations requises, vous devez créer une identité managée attribuée par l’utilisateur et lui octroyer des droits sur le groupe de ressources dans lequel l’image est générée. Azure VM Image Builder ne dispose pas d’autorisation d’accès aux ressources d’autres groupes de ressources dans l’abonnement. Vous devez effectuer des actions explicites pour permettre l’accès afin d’éviter l’échec de vos builds.

Vous n’avez pas besoin d’octroyer au contributeur d’identités managées attribuées par l’utilisateur des droits sur le groupe de ressources pour distribuer des images. Toutefois, l’identité managée attribuée par l’utilisateur a besoin des autorisations Actions Azure suivantes dans le groupe de ressources de distribution :

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

Si vous souhaitez distribuer à Azure Compute Gallery, vous avez également besoin des éléments suivants :

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

Autorisation de personnaliser des images existantes

Pour qu’Azure VM Image Builder génère des images personnalisées sources le service doit être autorisé à lire les images dans ces groupes de ressources. Pour octroyer les autorisations requises, créez une identité managée attribuée par l’utilisateur et octroyez-lui des droits sur le groupe de ressources dans lequel se trouve l’image.

Voici comment créer à partir d’une image personnalisée existante :

Microsoft.Compute/images/read

Voici comment générer des images à partir d’une version existante d’Azure Compute Gallery :

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

Autorisation de personnaliser des images sur vos réseaux virtuels

Azure VM Image Builder a la capacité de déployer et d’utiliser un réseau virtuel existant dans votre abonnement, ce qui permet aux personnalisations d’accéder aux ressources connectées.

Vous n’avez pas besoin d’octroyer au contributeur d’identités managées attribuées par l’utilisateur des droits sur le groupe de ressources pour déployer une machine virtuelle sur le réseau virtuel existant. Toutefois, l’identité managée attribuée par l’utilisateur a besoin des autorisations Actions Azure suivantes dans le groupe de ressources du réseau virtuel :

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

Créer une définition de rôle Azure

Les exemples suivants créent une définition de rôle Azure à partir des actions décrites dans les sections précédentes. Les exemples sont appliqués au niveau du groupe de ressources. Évaluez et testez si les exemples sont suffisamment granulaires pour répondre à vos exigences.

Les actions d’image autorisent la lecture et l’écriture. Décidez des éléments appropriés pour votre environnement. Par exemple, créez un rôle pour permettre à Azure VM Image Builder de lire des images à partir du groupe de ressources exemple-rg-1 et d’écrire des images dans le groupe de ressources exemple-rg-2.

Exemple de rôle d’image personnalisée Azure

L’exemple suivant crée un rôle Azure pour utiliser et distribuer une image personnalisée source. Vous octroyez ensuite le rôle personnalisé à l’identité managée attribuée par l’utilisateur pour Azure VM Image Builder.

Pour simplifier le remplacement de valeurs dans l’exemple, définissez les variables suivantes en premier. Remplacez les paramètres d’espaces réservés pour définir vos variables.

Paramètre Description
<Identifiant d’abonnement> Votre ID d’abonnement Azure.
<Groupe de ressources> Groupes de ressources pour l’image personnalisée.
# 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

Exemple de rôle Azure de réseau virtuel existant

L’exemple suivant crée un rôle Azure pour utiliser et distribuer une image du réseau virtuel existant. Vous octroyez ensuite le rôle personnalisé à l’identité managée attribuée par l’utilisateur pour Azure VM Image Builder.

Pour simplifier le remplacement de valeurs dans l’exemple, définissez les variables suivantes en premier. Remplacez les paramètres d’espaces réservés pour définir vos variables.

Paramètre Description
<Identifiant d’abonnement> Votre ID d’abonnement Azure.
<Groupe de ressources> Groupe de ressources de réseau virtuel
# 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

Utilisation de l’identité managée pour l’accès au Stockage Azure

Si vous voulez authentifier avec le stockage Azure et utiliser des conteneurs privés, Azure VM Image Builder a besoin d’une identité managée attribuée par l’utilisateur. Azure VM Image Builder utilise l’identité pour authentifier avec Stockage Azure.

Notes

Azure VM Image Builder utilise uniquement l’identité au moment où vous envoyez le modèle d’image. La machine virtuelle de build n’a pas accès à l’identité pendant la génération de l’image.

Utilisez l’interface Azure CLI pour créer l’identité managée attribuée par l’utilisateur :

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>

Dans le modèle Azure VM Image Builder, vous devez fournir l’identité managée attribuée par l’utilisateur :

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

Remplacez les paramètres d’espaces réservés suivants :

Paramètre Description
<Région> Région du modèle
<Groupe de ressources> Resource group
<Conteneur de comptes de stockage> Nom du conteneur de compte de stockage
<Identifiant d’abonnement> Abonnement Azure

Pour plus d’informations, consultez Créer une image et utiliser une identité managée affectée par l’utilisateur pour accéder aux fichiers dans Stockage Azure. Vous apprenez comment créer et configurer l’identité managée affectée par l’utilisateur pour accéder à un compte de stockage.

Étapes suivantes

Vue d’ensemble Azure VM Image Builder