Crear catálogos con imágenes preparadas en Azure
-
Crea imágenes preparadas y úsalas para crear un catálogo de máquinas MCS mediante:
- Studio
- Comandos de PowerShell
Los pasos clave para crear un catálogo de máquinas MCS con la imagen preparada son:
- Crea la definición de imagen y las versiones de imagen iniciales.
- Usa la versión de imagen como imagen preparada para crear un catálogo.
Usar Studio
Crear una definición de imagen y una versión de imagen inicial
Para crear una definición de imagen y la versión de imagen inicial, haz lo siguiente:
- Desde Studio, ve al nodo Imágenes y haz clic en Crear definición de imagen. Haz clic en Siguiente en la página Introducción.
- En la página Definición de imagen, especifica el Tipo de SO y el Tipo de sesión para la definición de imagen.
- Selecciona un grupo de recursos existente o crea uno nuevo para alojar los recursos de imagen. Para habilitar el uso compartido de imágenes, selecciona Colocar versiones de imagen en Azure Compute Gallery y, a continuación, elige crear una nueva galería o usar una existente para alojar sus versiones de imagen.
-
En la página Imagen, selecciona Recursos (solo se enumeran los recursos aplicables para la conexión establecida) y una imagen maestra para usar como plantilla para crear la versión de imagen. Puedes marcar la casilla Usar un perfil de máquina y seleccionar un perfil de máquina.
Nota:
- Antes de seleccionar una imagen, comprueba que la imagen maestra tenga VDA 2311 o posterior instalado y que el controlador MCSIO esté instalado en el VDA.
- Si quieres usar una imagen preparada de tipo VM confidencial para crear un catálogo de MCS, crea una imagen preparada con la imagen maestra de tipo VM confidencial y un perfil de máquina de tipo VM confidencial. Consulta Máquinas virtuales confidenciales de Azure para obtener información sobre cómo preparar imágenes maestras y perfiles de máquina de tipo VM confidencial.
- Antes de seleccionar una imagen, comprueba que la imagen maestra tenga VDA 2311 o posterior instalado y que el controlador MCSIO esté instalado en el VDA.
-
En la página Tipos de almacenamiento y licencias, selecciona el tipo de almacenamiento y licencia que se utilizará como parte del proceso de preparación de la imagen.
Nota:
Si seleccionas un perfil de máquina en la página Imagen, el tipo de licencia del perfil de máquina se selecciona previamente según la configuración del perfil.
- En la página Especificación de máquina, selecciona un tamaño de máquina. Si seleccionas un perfil de máquina en la página Imagen, el tamaño de máquina del perfil de máquina se selecciona de forma predeterminada.
- En la página NIC, selecciona o agrega NIC para la imagen de preparación. Para cada NIC, selecciona una red virtual asociada.
- En la página Configuración de disco, selecciona la clave de cifrado administrada por el cliente (CMEK). Si el perfil de máquina no tiene una CMEK, pero la imagen maestra sí, se selecciona previamente la CMEK de la imagen maestra.
- En la página Descripción de la versión, introduce una descripción para la versión de imagen inicial creada.
- En la página Resumen, comprueba los detalles de la definición de imagen y la versión de imagen inicial creada. Introduce un nombre y una descripción para la definición de imagen. Haz clic en Finalizar.
Crear versiones de imagen
Las versiones de imagen permiten la administración de diferentes iteraciones o actualizaciones de una imagen en particular. Esta funcionalidad te permite mantener varias versiones de una imagen para diferentes propósitos.
Para crear versiones de imagen a partir de la versión de imagen inicial, haz lo siguiente:
Nota:
La unidad de alojamiento de todas las versiones de imagen debe ser la misma.
- Ve al nodo Imágenes, selecciona una versión de imagen o una definición de imagen y haz clic en Crear versión de imagen.
- En la página de definición de imagen, puedes cambiar la unidad de alojamiento y volver a seleccionar la imagen maestra y el perfil de máquina para esa versión de imagen.
- Si quieres que la configuración de la versión de imagen sea diferente de la versión de imagen configurada inicialmente, configura los ajustes en las páginas Tipos de almacenamiento y licencias, Especificación de máquina, NIC y Configuración de disco del cuadro de diálogo Crear versión de imagen.
- Agrega una descripción para la versión de imagen. Haz clic en Finalizar.

Nota:
Si la creación de la versión de imagen falla por algún motivo, la ficha Solucionar problemas en la parte inferior proporciona una opción Reintentar.
Compartir imagen preparada
Para compartir imágenes preparadas entre diferentes unidades de alojamiento para Azure, sigue estos pasos:
- Haz clic con el botón derecho en una versión de imagen y selecciona Administrar uso compartido de imágenes. Aparecerán todas las unidades de alojamiento de tu entorno de Azure. Los recursos desde los que se crea la versión de imagen están inhabilitados para cualquier acción.
- Selecciona las unidades de alojamiento con las que quieres compartir la imagen y haz clic en Guardar. La columna Estado de uso compartido muestra En curso.
- Haz clic en la ficha Recursos para obtener más detalles sobre el estado de uso compartido.
Nota:
Cuando el estado de uso compartido de la versión de imagen está en curso, la opción Eliminar versión de imagen o Administrar uso compartido de imágenes está inhabilitada.
Crear un catálogo de máquinas desde el nodo Imágenes
Usa la opción Crear catálogo en el nodo Imágenes para crear un catálogo utilizando la versión de la imagen.
Alternativamente, puedes seleccionar la versión al crear un catálogo en el nodo Catálogos de máquinas, vinculando a la opción de imagen preparada en el flujo de trabajo de creación de catálogos. Consulta Crear un catálogo de máquinas desde el nodo Catálogos de máquinas
Para crear un catálogo de máquinas MCS desde el nodo Imágenes, haz lo siguiente:
- Selecciona una versión de imagen y haz clic en Crear catálogo. Haz clic en Siguiente en la página Introducción.
- En la página Experiencia de escritorio, selecciona la experiencia de escritorio requerida.
- Desde la página Imagen hasta la página Configuración de disco, la configuración está preseleccionada según la versión de imagen seleccionada.
- En la página Grupo de recursos, puedes elegir crear un nuevo grupo de recursos o usar un grupo de recursos existente para colocar los recursos de este catálogo.
- Completa la configuración en las páginas siguientes.
- En la página Resumen, verifica los detalles del catálogo de máquinas. Introduce un nombre y una descripción para el catálogo de máquinas. Haz clic en Finalizar.
- Ve al nodo Catálogos de máquinas para ver el catálogo de máquinas creado.
Crear un catálogo de máquinas desde el nodo Catálogos de máquinas
Para crear un catálogo de máquinas MCS desde el nodo Catálogos de máquinas, haz lo siguiente:
- 1. Haz clic en **Catálogos de máquinas** en el panel de navegación izquierdo.
- 1. Haz clic en **Crear catálogo de máquinas**. Aparece la página **Configuración del catálogo de máquinas**. Haz clic en **Siguiente** en las páginas **Introducción** y **Tipo de máquina**.
- En la página Administración de máquinas, selecciona la siguiente configuración:
-
- Selecciona Máquinas con administración de energía (por ejemplo, máquinas virtuales o PC blade).
- Selecciona Tecnología de aprovisionamiento de Citrix. Luego, selecciona Citrix Machine Creation Services™.
- En el campo Recursos, se enumeran los recursos que pertenecen a diferentes zonas. Selecciona cualquier recurso de red de Azure y haz clic en Siguiente.
- Selecciona Máquinas con administración de energía (por ejemplo, máquinas virtuales o PC blade).
-
-
En la página Imagen:
Para el tipo de imagen preparada, sigue los pasos:
- Selecciona Imagen preparada.
- En Imagen preparada, selecciona una versión de imagen de una definición de imagen. Si es necesario, agrega una nota para la versión de imagen preparada seleccionada.
- Haz clic en el nombre de la versión de la imagen. Para ver más detalles sobre la versión de imagen seleccionada, haz clic en el número de versión, que está subrayado.
-
- Si la versión de imagen seleccionada está configurada con un perfil de máquina, selecciona un perfil de máquina. Si la versión de imagen seleccionada no está configurada con un perfil de máquina, no puedes elegir usar un perfil de máquina.
-
- Configura los ajustes en las páginas siguientes.
- En la página Configuración de disco, si la imagen preparada seleccionada utiliza un conjunto de cifrado de disco, no puedes quitar el conjunto de cifrado, pero puedes cambiar la clave por otra clave de cifrado.
- En la página Grupo de recursos, puedes elegir crear un nuevo grupo de recursos o usar un grupo de recursos existente para colocar los recursos de este catálogo.
- Completa la configuración en las páginas siguientes.
- En la página Resumen, verifica los detalles del catálogo de máquinas. Introduce un nombre y una descripción para el catálogo de máquinas. Haz clic en Finalizar.
Usar PowerShell
Crear una imagen preparada
Los comandos detallados de PowerShell para crear una especificación de versión de imagen preparada son los siguientes:
-
Verifica los nombres de definición de imagen disponibles usando el comando
Test-ProvImageDefinitionNameAvailable. Por ejemplo,Test-ProvImageDefinitionNameAvailable -ImageDefinitionName <string[]> <!--NeedCopy-->-
- Crea una definición de imagen usando el comando
New-ProvImageDefinition. Por ejemplo,
- Crea una definición de imagen usando el comando
New-ProvImageDefinition -ImageDefinitionName image1 -OsType Windows -VdaSessionSupport MultiSession <!--NeedCopy--> -
-
Crea una nueva configuración para la definición de imagen en la conexión de alojamiento especificada usando el comando
Add-ProvImageDefinitionConnection.Las
CustomPropertiesparaAdd-ProvImageDefinitionConnectionpueden incluir lo siguiente. Si no usas los parámetros, se utilizan los valores predeterminados.-
ResourceGroups: El grupo de recursos que tiene los discos base. -
UseSharedImageGallery: Indicador del tipo de discos base. Usatruepara ACG (uso compartido de imágenes) yfalsepara instantánea. -
ImageGallery: El nombre de la galería cuando el disco base es una versión de imagen ACG.
Por ejemplo,
-
En caso de instantánea y grupo de recursos proporcionado por el cliente:
$CustomerOwnRsourceGroupProperties = @" <CustomProperties xmlns="http:// schemas.citrix.com/2014/xd/machinecreation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Property xsi:type="StringProperty" Name="ResourceGroups" Value="yangj_image" /> </CustomProperties> "@ <!--NeedCopy--> -
En caso de ACG y grupo de recursos y galería de imágenes proporcionados por el cliente:
$CustomerOwnAllProperties = @" <CustomProperties xmlns="http://schemas.citrix.com/2014/xd/machinecreation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Property xsi:type="StringProperty" Name="UseSharedImageGallery" Value="true" /> <Property xsi:type="StringProperty" Name="ResourceGroups" Value="rg" /> - <Property xsi:type="StringProperty" Name="ImageGallery" Value="gallery" /> </CustomProperties> "@ <!--NeedCopy--> -
In case of ACG and customer provided resource group only:
$CustomerOwnResourceGroupProperties = @" <CustomProperties xmlns="http://schemas.citrix.com/2014/xd/machinecreation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Property xsi:type="StringProperty" Name="UseSharedImageGallery" Value="true" /> <Property xsi:type="StringProperty" Name="ResourceGroups" Value="rg" /> </CustomProperties> "@ <!--NeedCopy--> -
In case of ACG and resource group and image gallery managed by Citrix:
$CustomerOwnResourceGroupNothingProperties = @" <CustomProperties xmlns="http://schemas.citrix.com/2014/xd/machinecreation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Property xsi:type="StringProperty" Name="UseSharedImageGallery" Value="true" /> </CustomProperties> "@ <!--NeedCopy-->
Add-ProvImageDefinitionConnection -ImageDefinitionName image1 -HypervisorConnectionName Azure28 [-CustomProperties $CustomProperties] <!--NeedCopy--> -
-
Create an image version using the
New-ProvImageVersioncommand. For example,New-ProvImageVersion -ImageDefinitionName image1 -Description "version 1" <!--NeedCopy--> -
Add a master image version spec to the image version using the
Add-ProvImageVersionSpeccommand. For example,Add-ProvImageVersionSpec -ImageDefinitionName image1 -ImageVersionNumber 1 -HostingUnitName azure -MasterImagePath "XDHyp:\HostingUnits\azure\image.folder\azureresourcegroup.resourcegroup\win2022-snapshot.snapshot" <!--NeedCopy-->Note:
You can add only one master image version spec to one image version for a hosting unit.
-
Create a prepared image version spec from the master image version spec using the
New-ProvImageVersionSpeccommand.The CustomProperties for
New-ProvImageVersionSpeccan include the following. If you do not use the parameters, then default values are used:-
PreparedImageStorageType: The storage type to use for the prepared image. Defaults toStandard_LRS, can also bePremium_LRSorStandard_ZRS.Standard_ZRSprovides zone redundancy for the image.
New-ProvImageVersionSpec -SourceImageVersionSpecUid c6e7384c-b2f8-46d6-9519-29a2c57ed3cb -NetworkMapping @{"0"="XDHyp:\HostingUnits\azure\virtualprivatecloud.folder\azureresourcegroup.resourcegroup\azure-vnet-eastus.virtualprivatecloud\dev.network"} -ServiceOffering"XDHyp:\HostingUnits\azure\serviceoffering.folder\Standard_B2ms.serviceoffering" -CustomProperties "<CustomProperties xmlns=`"http://schemas.citrix.com/2014/xd/machinecreation`" xmlns:xsi=`"http://www.w3.org/2001/XMLSchema-instance`"></CustomProperties>" -RunAsynchronously <!--NeedCopy--> -
-
You can also share a prepared image version spec with another hosting unit in all hosting connections by using the
Add-ProvImageVersionSpecHostingUnitcommand.The CustomProperties for
Add-ProvImageVersionSpecHostingUnitcan include the following. If you do not use the parameters, then values from the source prepared image spec are used:-
PreparedImageStorageType: The storage type to use for the prepared image.
Add-ProvImageVersionSpecHostingUnit -ImageVersionSpecUid xxxxxxx -HostingUnitName AzureWest <!--NeedCopy-->Note:
One hosting unit and preparation type can have only one prepared instance.
-
Example of the complete set of Powershell commands to create image definition, image version, and prepared image version spec:
New-ProvImageDefinition -ImageDefinitionName image1 -OsType Windows -VdaSessionSupport MultiSession
- $ImageDefinitionCustomProperties = @" <CustomProperties xmlns="http://schemas.citrix.com/2014/xd/machinecreation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Property xsi:type="StringProperty" Name="UseSharedImageGallery" Value="true" /> <Property xsi:type="StringProperty" Name="ResourceGroups" Value="rg" /> <Property xsi:type="StringProperty" Name="ImageGallery" Value="gallery" /> </CustomProperties> "@
Add-ProvImageDefinitionConnection -ImageDefinitionName image1 -HypervisorConnectionName Azure28 -CustomProperties $ImageDefinitionCustomProperties
$imageVersion = New-ProvImageVersion -ImageDefinitionName image1 -Description "version 1"
- $SourceImageVersionSpec = Add-ProvImageVersionSpec -ImageVersionUid $imageVersion.ImageVersionUid ` -HostingUnitUid $hostingunit.HostingUnitUid ` -MasterImagePath "XDHyp:\HostingUnits\azure28\image.folder\abc.resourcegroup\def-snapshot.snapshot"
- $ImageVersionSpecCustomProperties = @'
- <CustomProperties xmlns="http://schemas.citrix.com/2014/xd/machinecreation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <Property xsi:type="StringProperty" Name="PreparedImageStorageType" Value="Premium_LRS" />
- <Property xsi:type="StringProperty" Name="LicenseType" Value="Windows_Client" />
- </CustomProperties>
'@
New-ProvImageVersionSpec -NetworkMapping @{"0" = "XDHyp:\HostingUnits\azure28\virtualprivatecloud.folder\East US.region\virtualprivatecloud.folder\studio-mcs-infrastructure.resourcegroup\studio-mcs-vnet-eastus.virtualprivatecloud\mcs-dev.network" } -CustomProperties $ImageVersionSpecCustomProperties -ServiceOffering "XDHyp:\HostingUnits\azure28\serviceoffering.folder\Standard_B2s.serviceoffering" -SourceImageVersionSpecUid $SourceImageVersionSpec.ImageVersionSpecUid
$TargetCustomProperties = @'
<CustomProperties xmlns="http://schemas.citrix.com/2014/xd/machinecreation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Property xsi:type="StringProperty" Name="PreparedImageStorageType" Value="Standard_ZRS" />
</CustomProperties>
'@
Add-ProvImageVersionSpecHostingUnit -ImageVersionSpecUid xxxxxxx -HostingUnitName AzureWest –TargetCustomProperties $TargetCustomProperties
$PreparedImageVersionSpec = Get-ProvImageVersionSpec -ImageVersionUid $imageVersion.ImageVersionUid | Where SourceImageVersionSpecUid-eq $SourceImageVersionSpec.ImageVersionSpecUid
<!--NeedCopy-->
Note:
- All image version specs in an image definition must belong to the same hosting unit.
- An image version can have only one master image version spec and one prepared image version spec.
- All image version specs must either have a machine profile or none of the image version specs must have a machine profile.
Create a catalog using a prepared image version spec
Create an MCS machine catalog from the prepared image version spec using the New-ProvScheme command. For example,
New-ProvScheme -ProvisioningSchemeName <string> -ImageVersionSpecUid <Guid> -HostingUnitUid <Guid> -IdentityPoolUid <Guid> [-VMCpuCount <int>] [-VMMemoryMB <int>] [-UseWriteBackCache] [-NetworkMapping <Hashtable>] [-CleanOnBoot] [-Scope <string[]>] [-Metadata <Hashtable>] [-ServiceOffering <string>] [-SecurityGroup <string[]>] [-TenancyType <string>] [-MachineProfile <string>] [-CustomProperties <string>] [-ResetAdministratorPasswords] [-UseFullDiskCloneProvisioning] [-RunAsynchronously] [-PurgeJobOnSuccess] [-ProvisioningSchemeType <ProvisioningSchemeType>]
[-ImageAssignmentNote <string>]
<!--NeedCopy-->
Or,
- New-ProvScheme -ProvisioningSchemeName <string> -ImageVersionSpecUid <Guid> -HostingUnitName <string> -IdentityPoolName <string> [-VMCpuCount <int>] [-VMMemoryMB <int>] [-UseWriteBackCache] [-NetworkMapping <Hashtable>] [-CleanOnBoot] [-Scope <string[]>] [-Metadata <Hashtable>] [-ServiceOffering <string>] [-SecurityGroup <string[]>] [-TenancyType <string>] [-MachineProfile <string>] [-CustomProperties <string>] [-ResetAdministratorPasswords] [-UseFullDiskCloneProvisioning] [-RunAsynchronously] [-PurgeJobOnSuccess] [-ProvisioningSchemeType <ProvisioningSchemeType>]
[-ImageAssignmentNote <string>]
<!--NeedCopy-->
If you want to use an ACG image version spec, then set UseSharedImageGallery as true. For example,
$provSchemeCustomProperties= @"
<CustomProperties xmlns="http://schemas.citrix.com/2014/xd/machinecreation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Property xsi:type="StringProperty" Name="UseSharedImageGallery" Value="true" />
<Property xsi:type="StringProperty" Name="StorageAccountType" Value="StandardSSD_LRS" />
</CustomProperties>
"@
New-ProvScheme -ProvisioningSchemeName assignimage -ImageVersionSpecUid $PreparedImageVersionSpec.ImageVersionSpecUid `
-HostingUnitUid $hostingunit.HostingUnitUid `
-IdentityPoolUid $IdentityPool.IdentityPoolUid `
-CleanOnBoot -Scope @() -SecurityGroup @() `
-ServiceOffering "XDHyp:\HostingUnits\azure28\serviceoffering.folder\Standard_B2s.serviceoffering" `
-NetworkMapping @{"0"="XDHyp:\HostingUnits\azure28\virtualprivatecloud.folder\East US.region\virtualprivatecloud.folder\studio-mcs-infrastructure.resourcegroup\studio-mcs-vnet-eastus.virtualprivatecloud\mcs-dev.network"} `
-CustomProperties $provSchemeCustomProperties
<!--NeedCopy-->
Example of the complete set of Powershell commands to create a catalog:
$Catalog = New-BrokerCatalog -AllocationType "Random" -IsRemotePC $False -MinimumFunctionalLevel "L7_20" -Name "azurecatalog" -PersistUserChanges "Discard" -ProvisioningType "MCS" -Scope @() -SessionSupport "MultiSession"
$IdentityPool = New-AcctIdentityPool -AllowUnicode -Domain "azure.local" -IdentityPoolName "azurecatalog" -IdentityType "ActiveDirectory" -NamingScheme "azure##" -NamingSchemeType "Numeric" -Scope @()
$PreparedImageVersionSpec = Get-ProvImageVersionSpec -ImageDefinitionName image1 -ImageVersionNumber 1 -Filter "PreparationType -eq 'Mcs'"
$Task = New-ProvScheme -ProvisioningSchemeName azurecatalog -ImageVersionSpecUid $PreparedImageVersionSpec.ImageVersionSpecUid -HostingUnitName azure -IdentityPoolName azurecatalog -CleanOnBoot -Scope @() -SecurityGroup @() -ServiceOffering "XDHyp:\HostingUnits\azure\serviceoffering.folder\Standard_B2s.serviceoffering" -NetworkMapping @{"0"="XDHyp:\HostingUnits\azure\virtualprivatecloud.folder\azureresourcegroup.resourcegroup\azure-vnet-eastus.virtualprivatecloud\dev.network"} -CustomProperties "<CustomProperties xmlns=`"http://schemas.citrix.com/2014/xd/machinecreation`" xmlns:xsi=`"http://www.w3.org/2001/XMLSchema-instance`"> <Property xsi:type="StringProperty" Name="UseSharedImageGallery" Value="true" /><Property xsi:type=`"StringProperty`" Name=`"StorageAccountType`" Value=`"StandardSSD_LRS`" /></CustomProperties>" -RunAsynchronously
Get-ProvTask -TaskId $Task.TaskId
$ProvScheme = Get-ProvScheme -ProvisioningSchemeName azurecatalog
Set-BrokerCatalog -Name $Catalog.Name -ProvisioningSchemeId $ProvScheme.ProvisioningSchemeUid
<!--NeedCopy-->
Create Microsoft Entra joined and Microsoft Intune enrolled catalogs with prepared images
You can now use prepared images to create Microsoft Entra joined and Microsoft Intune enrolled catalogs. This feature is applicable to single and multi-session persistent and non-persistent type MCS catalogs. This implementation significantly reduces the storage and time costs, and simplifies the VM deployment and image update process.
Examples
-
To create a Microsoft Entra catalog using a prepared image.
New-ProvScheme -ProvisioningSchemeName <name> -ImageVersionSpecUid <preparedVersionSpecUid> -HostingUnitUid <hostingUnitUid> -IdentityPoolUid <IdentityPoolUid> [-CleanOnBoot] -NetworkMapping @{"0"="XDHyp:\HostingUnits\<hostingunitName>\<region>.region\virtualprivatecloud.folder\<resourcegroupName>.resourcegroup\<vnetName>.virtualprivatecloud\<sunNetName>.network"} -ServiceOffering <serviceofferingPath> [-MachineProfile <machineProfilePath>] [-CustomProperties <>] <!--NeedCopy--> -
To create a Microsoft Entra catalog enrolled in Microsoft Intune using a prepared image:
New-ProvScheme -ProvisioningSchemeName <name> -ImageVersionSpecUid <preparedVersionSpecUid> -HostingUnitUid <hostingUnitUid> -IdentityPoolUid <IdentityPoolUid> [-CleanOnBoot] -NetworkMapping @{"0"="XDHyp:\HostingUnits\<hostingunitName>\<region>.region\virtualprivatecloud.folder\<resourcegroupName>.resourcegroup\<vnetName>.virtualprivatecloud\<sunNetName>.network"} -ServiceOffering <serviceofferingPath> [-MachineProfile <machineProfilePath>] [-CustomProperties <>] <!--NeedCopy-->
Share prepared images across Azure subscriptions or tenants
To share a prepared image across subscriptions or tenants on the Azure platform, follow this example:
- Service principal: SPN 1
- Subscription: Subscription 1
- Tenant: Tenant 1
You want to share this image with:
- Service principal: SPN 2
- Subscription: Subscription 2
- Tenant: Tenant 2 (can be the same as Tenant 1)
To successfully share and use the image, you must grant SPN 2 the following permissions in Subscription 1—at the gallery, resource group, or subscription scope:
Microsoft.Resources/subscriptions/readMicrosoft.Compute/galleries/images/read-
Microsoft.Compute/galleries/images/versions/readNote:
Any service principal that has any permission on a subscription or resource automatically inherits the
Microsoft.Resources/subscriptions/readpermission.
Alternatively, assign the Compute Gallery Image Reader built-in role to SPN 2.
For step-by-step guidance, see this Microsoft article.
Share encrypted prepared image across regions, subscriptions, and tenants
Azure Compute Gallery (ACG) images can be encrypted with a Disk Encryption Set (DES). With ACG sharing feature, you can share an encrypted prepared image across regions, subscriptions and tenants for Azure. The target resource needs to pick a DES in its region from the subscription where the prepared image belongs. You can thereafter create a machine catalog in the resource where the encrypted prepared image is shared.
The key steps to share an encrypted prepared image are:
- Create Disk Encryption Set (DES) in each region: See the microsoft documentation Use the Azure portal to enable server-side encryption with customer-managed keys for managed disks.
- Create an image definition for the Azure host connection and image versions in Azure Compute Gallery (ACG) and specify the DES to encrypt the prepared image : See Create an image definition and initial image version.
- Share the encrypted prepared image across regions, subscriptions, and tenants: You can use Studio or PowerShell commands.
You can now create a machine catalog in the resource where the encrypted prepared image is shared. For more information on creating the catalog, see Create a prepared image machine catalog in Azure.
Note:
- If the primary region is not encrypted, the shared regions also cannot have DES.
- If two host units target the same region, they have the same DES.
Share the encrypted image across regions, subscriptions, and tenants using Studio
- Right-click an image version and select Manage Image Share. The resources with region and disk encryption set are listed.
-
Select the resources that you want to share with the image version. The resources where the image version is created from is disabled for any actions. Select a DES from the drop-down menu if DES is not configured for a resource.
Note:
Resources within the same region must use the same encryption key.

- Click Save.
-
Click the Resources tab for more details about the sharing status.
Note:
- When the status of the image version sharing is in progress, the option to Delete Image Version or Manage Image Share is disabled.
- When a resource is successfully shared, the DES is not editable.
Share the encrypted image across regions, subscriptions, and tenants using PowerShell
Use the command Add-ProvImageVersionSpecHostingUnit and add the parameter CustomProperties. In CustomProperties, configure the DES for the target resource. When sharing the prepared encrypted image, each resource picks a DES in its region from the subscription which the prepared image belongs to. For example,
$CustomProperties = "<CustomProperties xmlns=`"http://schemas.citrix.com/2014/xd/machinecreation`" xmlns:xsi=`"http://www.w3.org/2001/XMLSchema-instance`">"
"<Property xsi:type=`"StringProperty`" Name=`"DiskEncryptionSetId`" Value=`"/subscriptions/xxxxxx-7152-46c4-b061-xxxxxx70c/resourceGroups/resourcegroup1/providers/Microsoft.Compute/diskEncryptionSets/desid1`" />"+
"</CustomProperties>"
Add-ProvImageVersionSpecHostingUnit -ImageVersionSpecUid <Guid> -HostingUnitUid <Guid> -CustomProperties $CustomProperties
<!--NeedCopy-->