Rendszerkép létrehozása és felhasználó által hozzárendelt felügyelt identitás használata az Azure Storage-fiók fájljainak eléréséhez

A következőkre vonatkozik: ✔️ Linux rendszerű virtuális gépek rugalmas méretezési ✔️ csoportjai

Ez a cikk bemutatja, hogyan hozhat létre testreszabott rendszerképet az Azure VM Image Builder használatával. A szolgáltatás egy felhasználó által hozzárendelt felügyelt identitással fér hozzá egy Azure-tárfiók fájljaihoz, és blokkolhatja a tárfiókhoz való hitelesítés nélküli hozzáférést.

Az Azure VM Image Builder támogatja a szkriptek használatát és a fájlok GitHubról, Azure Storage-fiókokból és más helyekről történő másolását. Ha a helyeket szeretné használni, azoknak külsőleg elérhetőnek kell lenniük a VM Image Builder számára.

Az alábbi példában két erőforráscsoportot fog létrehozni, egyet az egyéni rendszerképhez, a másikat pedig egy szkriptfájlt tartalmazó Azure Storage-fiók üzemeltetéséhez. Ez a példa egy valós forgatókönyvet szimulál, amelyben különböző tárfiókokban hozhat létre összetevőket vagy képfájlokat. Létre fog hozni egy felhasználó által hozzárendelt identitást, majd olvasási engedélyeket ad a szkriptfájlhoz, de nem engedélyezi a fájlhoz való nyilvános hozzáférést. Ezután a rendszerhéj-testreszabóval letölthet és futtathat egy szkriptet a tárfiókból.

Erőforráscsoport létrehozása

  1. Mivel néhány információt ismétlődően fog használni, hozzon létre néhány változót az információk tárolásához.

    # Image resource group name 
    imageResourceGroup=aibmdimsi
    # Storage resource group
    strResourceGroup=aibmdimsistor
    # Location 
    location=WestUS2
    # Name of the image to be created
    imageName=aibCustLinuxImgMsi01
    # Image distribution metadata reference name
    runOutputName=u1804ManImgMsiro
    
  2. Hozzon létre egy változót az előfizetés azonosítójához:

    subscriptionID=$(az account show --query id --output tsv)
    
  3. Hozzon létre erőforráscsoportokat a rendszerképhez és a szkripttárolóhoz is:

    # Create a resource group for the image template
    az group create -n $imageResourceGroup -l $location
    # Create a resource group for the script storage
    az group create -n $strResourceGroup -l $location
    
  4. Hozzon létre egy felhasználó által hozzárendelt identitást, és állítson be engedélyeket az erőforráscsoporthoz:

    A VM Image Builder a megadott felhasználói identitással injektálja a rendszerképet az erőforráscsoportba. Ebben a példában egy Azure-szerepkördefiníciót hoz létre a rendszerkép terjesztéséhez szükséges konkrét műveletekkel. A szerepkördefiníció ezután hozzá lesz rendelve a felhasználói identitáshoz.

    # Create a user-assigned identity for VM Image Builder to access the storage account where the script is located
    identityName=aibBuiUserId$(date +'%s')
    az identity create -g $imageResourceGroup -n $identityName
    
    # Get an identity ID
    imgBuilderCliId=$(az identity show -g $imageResourceGroup -n $identityName --query clientId -o tsv)
    
    # Get the user-identity URI, which is needed for the template
    imgBuilderId=/subscriptions/$subscriptionID/resourcegroups/$imageResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$identityName
    
    # Download the preconfigured role definition example
    curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json -o aibRoleImageCreation.json
    
    # Update the definition
    sed -i -e "s/<subscriptionID>/$subscriptionID/g" aibRoleImageCreation.json
    sed -i -e "s/<rgName>/$imageResourceGroup/g" aibRoleImageCreation.json
    
    # Create role definitions
    az role definition create --role-definition ./aibRoleImageCreation.json
    
    # Grant the role definition to the user-assigned identity
    az role assignment create \
        --assignee $imgBuilderCliId \
        --role "Azure Image Builder Service Image Creation Role" \
        --scope /subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup
    
  5. Hozza létre a tárfiókot, és másolja be a mintaszkriptet a GitHubról:

    # Script storage account
    scriptStorageAcc=aibstorscript$(date +'%s')
    
    # Script container
    scriptStorageAccContainer=scriptscont$(date +'%s')
    
    # Script URL
    scriptUrl=https://$scriptStorageAcc.blob.core.windows.net/$scriptStorageAccContainer/customizeScript.sh
    
    # Create the storage account and blob in the resource group
    az storage account create -n $scriptStorageAcc -g $strResourceGroup -l $location --sku Standard_LRS
    
    az storage container create -n $scriptStorageAccContainer --fail-on-exist --account-name $scriptStorageAcc
    
    # Copy in an example script from the GitHub repo 
    az storage blob copy start \
        --destination-blob customizeScript.sh \
        --destination-container $scriptStorageAccContainer \
        --account-name $scriptStorageAcc \
        --source-uri https://raw.githubusercontent.com/azure/azvmimagebuilder/master/quickquickstarts/customizeScript.sh
    
  6. Adjon engedélyt a VM Image Buildernek, hogy erőforrásokat hozzon létre a rendszerkép-erőforráscsoportban. Az --assignee érték a felhasználó identitásazonosítója.

    az role assignment create \
        --assignee $imgBuilderCliId \
        --role "Storage Blob Data Reader" \
        --scope /subscriptions/$subscriptionID/resourceGroups/$strResourceGroup/providers/Microsoft.Storage/storageAccounts/$scriptStorageAcc/blobServices/default/containers/$scriptStorageAccContainer 
    

A példa módosítása

Töltse le a példa JSON-fájlt, és konfigurálja a korábban létrehozott változókkal.

curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/quickquickstarts/7_Creating_Custom_Image_using_MSI_to_Access_Storage/helloImageTemplateMsi.json -o helloImageTemplateMsi.json
sed -i -e "s/<subscriptionID>/$subscriptionID/g" helloImageTemplateMsi.json
sed -i -e "s/<rgName>/$imageResourceGroup/g" helloImageTemplateMsi.json
sed -i -e "s/<region>/$location/g" helloImageTemplateMsi.json
sed -i -e "s/<imageName>/$imageName/g" helloImageTemplateMsi.json
sed -i -e "s%<scriptUrl>%$scriptUrl%g" helloImageTemplateMsi.json
sed -i -e "s%<imgBuilderId>%$imgBuilderId%g" helloImageTemplateMsi.json
sed -i -e "s%<runOutputName>%$runOutputName%g" helloImageTemplateMsi.json

A rendszerkép létrehozása

  1. Küldje el a képkonfigurációt a VM Image Builder szolgáltatásnak:

    az resource create \
        --resource-group $imageResourceGroup \
        --properties @helloImageTemplateMsi.json \
        --is-full-object \
        --resource-type Microsoft.VirtualMachineImages/imageTemplates \
        -n helloImageTemplateMsi01
    
  2. Indítsa el a rendszerkép összeállítását:

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

A buildelés körülbelül 15 percet vehet igénybe.

Virtuális gép létrehozása

  1. Virtuális gép létrehozása a rendszerképből:

    az vm create \
    --resource-group $imageResourceGroup \
    --name aibImgVm00 \
    --admin-username aibuser \
    --image $imageName \
    --location $location \
    --generate-ssh-keys
    
  2. A virtuális gép létrehozása után indítsa el vele a Secure Shell (SSH) munkamenetet.

    ssh aibuser@<publicIp>
    

Az SSH-kapcsolat létrejötte után "A nap üzenete" üzenetet kell kapnia, amely szerint a rendszerkép testre lett szabva:


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

Az erőforrások törlése

Ha már nincs szüksége a folyamat során létrehozott erőforrásokra, az alábbi kód futtatásával törölheti őket:


az role definition delete --name "$imageRoleDefName"
```azurecli-interactive
az role assignment delete \
    --assignee $imgBuilderCliId \
    --role "$imageRoleDefName" \
    --scope /subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup
az identity delete --ids $imgBuilderId
az resource delete \
    --resource-group $imageResourceGroup \
    --resource-type Microsoft.VirtualMachineImages/imageTemplates \
    -n helloImageTemplateMsi01
az group delete -n $imageResourceGroup
az group delete -n $strResourceGroup

További lépések

Ha problémákat tapasztal a VM Image Builder használatával, tekintse meg az Azure VM Image Builder hibaelhárítását.