Delen via


Azure VM Image Builder voor Linux-VM's gebruiken om toegang te krijgen tot een bestaand virtueel Azure-netwerk

Van toepassing op: ✔️ Flexibele schaalsets voor Linux-VM's ✔️

In dit artikel wordt beschreven hoe u Azure VM Image Builder gebruikt om een eenvoudige, aangepaste Linux-installatiekopieën te maken die toegang heeft tot bestaande resources in een virtueel netwerk. De virtuele machine (VM) die u maakt, wordt geïmplementeerd in een nieuw of bestaand virtueel netwerk dat u opgeeft in uw abonnement. Wanneer u een bestaand virtueel Azure-netwerk gebruikt, vereist VM Image Builder geen openbare netwerkverbinding.

Vereisten

Variabelen en machtigingen instellen

Voor deze taak gebruikt u enkele gegevens herhaaldelijk. Maak enkele variabelen om die informatie op te slaan.

# set your environment variables here!!!!

# destination image resource group
imageResourceGroup=aibImageRG01

# location (see possible locations in main docs)
location=WestUS2

# your subscription
# get the current subID : 'az account show | grep id'
subscriptionID=$(az account show --query id --output tsv)

# name of the image to be created
imageName=aibCustomLinuxImg01

# image distribution metadata reference name
runOutputName=aibCustLinManImg01ro


# VNET properties (update to match your existing VNET, or leave as-is for demo)
# VNET name
vnetName=myexistingvnet01
# subnet name
subnetName=subnet01
# VNET resource group name
# NOTE! The VNET must always be in the same region as the Azure Image Builder service region.
vnetRgName=existingVnetRG
# Existing Subnet NSG Name or the demo will create it
nsgName=aibdemoNsg

Maak de resourcegroep.

az group create -n $imageResourceGroup -l $location

Netwerken configureren

Als u geen bestaand virtueel netwerk, subnet of netwerkbeveiligingsgroep (NSG) hebt, gebruikt u het volgende script om er een te maken.


# Create a resource group

az group create -n $vnetRgName -l $location

# Create VNET

az network vnet create \
    --resource-group $vnetRgName \
    --name $vnetName --address-prefix 10.0.0.0/16 \
    --subnet-name $subnetName --subnet-prefix 10.0.0.0/24

# Create base NSG to simulate an existing NSG

az network nsg create -g $vnetRgName -n $nsgName

az network vnet subnet update \
    --resource-group $vnetRgName \
    --vnet-name $vnetName \
    --name $subnetName \
    --network-security-group $nsgName
    
#  NOTE! The virtual network must always be in the same region as the Azure Image Builder service region.

Een NSG-regel toevoegen

Deze regel staat connectiviteit toe van de load balancer van VM Image Builder naar de proxy-VM. Poort 60001 is voor Linux en poort 60000 voor Windows. De proxy-VM maakt verbinding met de build-VM via poort 22 voor Linux of poort 5986 voor Windows.

az network nsg rule create \
    --resource-group $vnetRgName \
    --nsg-name $nsgName \
    -n AzureImageBuilderNsgRule \
    --priority 400 \
    --source-address-prefixes AzureLoadBalancer \
    --destination-address-prefixes VirtualNetwork \
    --destination-port-ranges 60000-60001 --direction inbound \
    --access Allow --protocol Tcp \
    --description "Allow Image Builder Private Link Access to Proxy VM"

Privéservicebeleid uitschakelen op het subnet

U doet dit als volgt:

az network vnet subnet update \
  --name $subnetName \
  --resource-group $vnetRgName \
  --vnet-name $vnetName \
  --disable-private-link-service-network-policies true 

Zie Azure VM Image Builder-netwerkopties voor meer informatie.

De voorbeeldsjabloon wijzigen en een rol maken

Nadat u netwerken hebt geconfigureerd, kunt u de voorbeeldsjabloon wijzigen en een rol maken. U doet dit als volgt:

# download the example and configure it with your vars

curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/quickquickstarts/1a_Creating_a_Custom_Linux_Image_on_Existing_VNET/existingVNETLinux.json -o existingVNETLinux.json
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleNetworking.json -o aibRoleNetworking.json
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json -o aibRoleImageCreation.json

sed -i -e "s/<subscriptionID>/$subscriptionID/g" existingVNETLinux.json
sed -i -e "s/<rgName>/$imageResourceGroup/g" existingVNETLinux.json
sed -i -e "s/<region>/$location/g" existingVNETLinux.json
sed -i -e "s/<imageName>/$imageName/g" existingVNETLinux.json
sed -i -e "s/<runOutputName>/$runOutputName/g" existingVNETLinux.json

sed -i -e "s/<vnetName>/$vnetName/g" existingVNETLinux.json
sed -i -e "s/<subnetName>/$subnetName/g" existingVNETLinux.json
sed -i -e "s/<vnetRgName>/$vnetRgName/g" existingVNETLinux.json

sed -i -e "s/<subscriptionID>/$subscriptionID/g" aibRoleImageCreation.json
sed -i -e "s/<rgName>/$imageResourceGroup/g" aibRoleImageCreation.json

sed -i -e "s/<subscriptionID>/$subscriptionID/g" aibRoleNetworking.json
sed -i -e "s/<vnetRgName>/$vnetRgName/g" aibRoleNetworking.json

Machtigingen instellen voor de resourcegroep

VM Image Builder gebruikt de gebruikersidentiteit die is opgegeven om de installatiekopieën in de Azure Compute Gallery te injecteren. In dit voorbeeld maakt u een Azure-roldefinitie waarmee de installatiekopieën naar de galerie kunnen worden gedistribueerd. De roldefinitie wordt vervolgens toegewezen aan de gebruikersidentiteit.

# create user assigned identity for image builder
identityName=aibBuiUserId$(date +'%s')
az identity create -g $imageResourceGroup -n $identityName

# get identity id
imgBuilderCliId=$(az identity show -g $imageResourceGroup -n $identityName --query clientId -o tsv)

# get the user identity URI, needed for the template
imgBuilderId=/subscriptions/$subscriptionID/resourcegroups/$imageResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$identityName

# update the template
sed -i -e "s%<imgBuilderId>%$imgBuilderId%g" existingVNETLinux.json

# make role name unique, to avoid clashes in the same Azure Active Directory domain
imageRoleDefName="Azure Image Builder Image Def"$(date +'%s')
netRoleDefName="Azure Image Builder Network Def"$(date +'%s')

# update the definitions
sed -i -e "s/Azure Image Builder Service Image Creation Role/$imageRoleDefName/g" aibRoleImageCreation.json
sed -i -e "s/Azure Image Builder Service Networking Role/$netRoleDefName/g" aibRoleNetworking.json

In plaats van VM Image Builder een lagere granulariteit en verhoogde bevoegdheden te verlenen, kunt u twee rollen maken. De ene rol geeft de opbouwfunctie machtigingen om een installatiekopieën te maken en de andere kan de build-VM en load balancer verbinden met uw virtuele netwerk.

# create role definitions
az role definition create --role-definition ./aibRoleImageCreation.json
az role definition create --role-definition ./aibRoleNetworking.json

# grant role definition to the user assigned identity
az role assignment create \
    --assignee $imgBuilderCliId \
    --role "$imageRoleDefName" \
    --scope /subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup

az role assignment create \
    --assignee $imgBuilderCliId \
    --role "$netRoleDefName" \
    --scope /subscriptions/$subscriptionID/resourceGroups/$vnetRgName

Zie Azure VM Image Builder-machtigingen configureren met behulp van de Azure CLI of Azure VM Image Builder-machtigingen configureren met behulp van PowerShell voor meer informatie.

De installatiekopie maken

Verzend de configuratie van de installatiekopieën naar VM Image Builder.

az resource create \
    --resource-group $imageResourceGroup \
    --properties @existingVNETLinux.json \
    --is-full-object \
    --resource-type Microsoft.VirtualMachineImages/imageTemplates \
    -n existingVNETLinuxTemplate01

# Wait approximately 1-3 mins (validation, permissions etc.)

Start de build van de installatiekopieën.

az resource invoke-action \
     --resource-group $imageResourceGroup \
     --resource-type  Microsoft.VirtualMachineImages/imageTemplates \
     -n existingVNETLinuxTemplate01 \
     --action Run 

# Wait approximately 15 mins

Het kan even duren voordat de installatiekopieën zijn gemaakt en naar beide regio's zijn gerepliceerd. Wacht tot dit onderdeel is voltooid voordat u verdergaat met het maken van een virtuele machine.

Een virtuele machine maken

Maak een VM op basis van de installatiekopieënversie die is gemaakt door VM Image Builder.

az vm create \
  --resource-group $imageResourceGroup \
  --name aibImgVm0001 \
  --admin-username aibuser \
  --image $imageName \
  --location $location \
  --generate-ssh-keys

Gebruik Secure Shell (SSH) om toegang te krijgen tot de VM.

ssh aibuser@<publicIpAddress>

U ziet dat de afbeelding is aangepast met een Bericht van de dag zodra uw SSH-verbinding tot stand is gebracht.

*******************************************************
**            This VM was built from the:            **
**      !! AZURE VM IMAGE BUILDER Custom Image !!    **
**         You have just been Customized :-)         **
*******************************************************

Resources opschonen

Als u de versie van de installatiekopieën opnieuw wilt aanpassen om een nieuwe versie van dezelfde installatiekopieën te maken, slaat u de volgende stappen over en gaat u verder met Azure VM Image Builder gebruiken om een andere versie van de installatiekopieën te maken.

Hieronder wordt de gemaakte installatiekopieën verwijderd, samen met alle andere bronbestanden. Zorg ervoor dat u klaar bent met deze implementatie voordat u de resources verwijdert.

Wanneer u galerieresources verwijdert, moet u alle versies van de installatiekopieën verwijderen voordat u de definitie van de installatiekopieën kunt verwijderen die is gebruikt om ze te maken. Als u een galerie wilt verwijderen, moet u eerst alle installatiekopieën in de galerie hebben verwijderd.

Verwijder de VM Image Builder-sjabloon:

az resource delete \
    --resource-group $imageResourceGroup \
    --resource-type Microsoft.VirtualMachineImages/imageTemplates \
    -n existingVNETLinuxTemplate01

Machtigingentoewijzingen, rollen en identiteit verwijderen:

az role assignment delete \
    --assignee $imgBuilderCliId \
    --role $imageRoleDefName \
    --scope /subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup

az role assignment delete \
    --assignee $imgBuilderCliId \
    --role $netRoleDefName \
    --scope /subscriptions/$subscriptionID/resourceGroups/$vnetRgName


az role definition delete --name "$imageRoleDefName"
az role definition delete --name "$netRoleDefName"

az identity delete --ids $imgBuilderId

Verwijder de resourcegroep:

az group delete -n $imageResourceGroup

Als u een virtueel netwerk hebt gemaakt voor deze quickstart, kunt u het virtuele netwerk verwijderen als het niet meer wordt gebruikt.

Volgende stappen

Azure Compute-galerieën