Konfigurera Azure VM Image Builder-behörigheter med hjälp av Azure CLI

Gäller för: ✔️ Flexibla skalningsuppsättningar för virtuella Linux-datorer ✔️

När du registrerar dig för Azure VM Image Builder får din prenumeration åtkomst till ett SPN (VM Image Builder Service Principal Name). Den här registreringen ger även tjänsten behörighet att skapa, hantera och ta bort en mellanlagringsresursgrupp. För avbildningsskapandeprocessen krävs även rolltilldelningen Deltagare i resursgruppen för mellanlagring.

Om du vill att VM Image Builder ska distribuera avbildningar måste du skapa en användartilldelad identitet i Azure med behörighet att läsa och skriva avbildningar. Du kanske till exempel vill distribuera avbildningar till hanterade avbildningar eller till Azure Compute Gallery. Om du har åtkomst till Azure Storage behöver den användartilldelade identitet som du skapar behörighet att läsa privata eller offentliga containrar.

Du måste konfigurera behörigheter och behörigheter innan du skapar en avbildning. I följande avsnitt beskrivs hur du konfigurerar möjliga scenarier med hjälp av Azure CLI.

Förutsättningar

Skapa en användartilldelad hanterad identitet

Vm Image Builder kräver att du skapar en användartilldelad hanterad identitet i Azure. Vm Image Builder använder den här identiteten för att läsa avbildningar, skriva avbildningar och få åtkomst till Azure Storage-konton. Du ger identiteten behörighet att utföra specifika åtgärder i din prenumeration.

Kommentar

Användartilldelad hanterad identitet är rätt sätt att bevilja behörigheter till avbildningsresursgrupperna. SPN är inaktuellt för detta ändamål.

I följande exempel visas hur du skapar en azure-användartilldelad hanterad identitet. Ersätt platshållarinställningarna för att ange variablerna.

Inställning beskrivning
<Resursgrupp> Den resursgrupp där du vill skapa den användartilldelade hanterade identiteten.
identityName="aibIdentity"
imageResourceGroup=<Resource group>

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

Mer information finns i Användartilldelad hanterad identitet i Azure.

Tillåt att VM Image Builder distribuerar avbildningar

För att VM Image Builder ska kunna distribuera avbildningar måste tjänsten tillåtas att mata in avbildningarna i resursgrupper. Om du vill bevilja de behörigheter som krävs skapar du en användartilldelad hanterad identitet och ger den behörighet till den resursgrupp där avbildningen skapas. Vm Image Builder har inte behörighet att komma åt resurser i andra resursgrupper i prenumerationen. Du måste vidta explicita åtgärder för att tillåta åtkomst för att förhindra att dina versioner misslyckas.

Du behöver inte ge den användartilldelade hanterade identitetsdeltagaren behörighet för resursgruppen för att distribuera avbildningar. Den användartilldelade hanterade identiteten behöver dock följande Azure-behörigheter Actions i distributionsresursgruppen:

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

Om du vill distribuera till Azure Compute Gallery behöver du också:

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

Behörighet att anpassa befintliga avbildningar

För att VM Image Builder ska kunna skapa avbildningar från anpassade källavbildningar måste tjänsten kunna läsa avbildningarna i dessa resursgrupper. Om du vill bevilja nödvändiga behörigheter skapar du en användartilldelad hanterad identitet och ger den behörighet för resursgruppen där avbildningen finns.

Så här skapar du från en befintlig anpassad avbildning:

Microsoft.Compute/images/read

Så här skapar du från en befintlig Azure Compute Gallery-version:

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

Behörighet att anpassa avbildningar i dina virtuella nätverk

Vm Image Builder har möjlighet att distribuera och använda ett befintligt virtuellt nätverk i din prenumeration, vilket ger anpassningar åtkomst till anslutna resurser.

Du behöver inte ge den användartilldelade hanterade identitetsdeltagaren behörighet för resursgruppen för att distribuera en virtuell dator till ett befintligt virtuellt nätverk. Den användartilldelade hanterade identiteten behöver dock följande Azure-behörigheter Actions för resursgruppen för virtuella nätverk:

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

Skapa en Azure-rolldefinition

I följande exempel skapas en Azure-rolldefinition från de åtgärder som beskrivs i föregående avsnitt. Exemplen tillämpas på resursgruppsnivå. Utvärdera och testa om exemplen är tillräckligt detaljerade för dina behov.

Bildåtgärderna tillåter läsning och skrivning. Bestäm vad som är lämpligt för din miljö. Skapa till exempel en roll för att tillåta vm Image Builder att läsa avbildningar från resursgruppen example-rg-1 och skriva avbildningar till resursgruppen example-rg-2.

Exempel på anpassad avbildning av Azure-roll

I följande exempel skapas en Azure-roll för att använda och distribuera en anpassad källbild. Sedan beviljar du den anpassade rollen till den användartilldelade hanterade identiteten för VM Image Builder.

För att förenkla bytet av värden i exemplet anger du följande variabler först. Ersätt platshållarinställningarna för att ange variablerna.

Inställning beskrivning
<Prenumerations-ID> ditt prenumerations-ID för Azure
<Resursgrupp> Resursgrupp för den anpassade avbildningen.
# 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

Azure-rollexempel för befintligt virtuellt nätverk

I följande exempel skapas en Azure-roll för att använda och distribuera en befintlig virtuell nätverksbild. Sedan beviljar du den anpassade rollen till den användartilldelade hanterade identiteten för VM Image Builder.

För att förenkla bytet av värden i exemplet anger du följande variabler först. Ersätt platshållarinställningarna för att ange variablerna.

Inställning beskrivning
<Prenumerations-ID> ditt prenumerations-ID för Azure
<Resursgrupp> Resursgruppen för virtuellt nätverk
# 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

Använda hanterad identitet för Azure Storage-åtkomst

Om du vill autentisera med Azure Storage och använda privata containrar behöver VM Image Builder en användartilldelad hanterad identitet. Vm Image Builder använder identiteten för att autentisera med Azure Storage.

Kommentar

Vm Image Builder använder bara identiteten när du skickar avbildningsmallen. Den virtuella byggdatorn har inte åtkomst till identiteten under avbildningsversionen.

Använd Azure CLI för att skapa den användartilldelade hanterade identiteten:

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>

Ange den användartilldelade hanterade identiteten i mallen Image Builder för virtuell dator:

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

Ersätt följande platshållarinställningar:

Inställning beskrivning
<Region> Mallregion
<Resursgrupp> Resursgrupp
<Container för lagringskonto> Namn på lagringskontocontainer
<Prenumerations-ID> Azure-prenumeration

Mer information finns i Skapa en avbildning och använda en användartilldelad hanterad identitet för att komma åt filer i Azure Storage. Du lär dig hur du skapar och konfigurerar den användartilldelade hanterade identiteten för åtkomst till ett lagringskonto.

Nästa steg

Översikt över Azure VM Image Builder