Criar catálogos usando imagens preparadas no Azure
-
Crie imagens preparadas e use-as para criar um catálogo de máquinas MCS usando:
- Studio
- Comandos PowerShell
As etapas principais para criar um catálogo de máquinas MCS usando a imagem preparada são:
- Crie a definição da imagem e as versões iniciais da imagem.
- Use a versão da imagem como uma imagem preparada para criar um catálogo.
Usar o Studio
Criar uma definição de imagem e uma versão inicial da imagem
Para criar uma definição de imagem e a versão inicial da imagem, faça o seguinte:
- No Studio, vá para o nó Imagens e clique em “Criar Definição de Imagem”. Clique em “Avançar” na página “Introdução”.
- Na página “Definição de Imagem”, especifique o tipo de SO e o tipo de sessão para a definição de imagem.
- Selecione um grupo de recursos existente ou crie um novo para armazenar os recursos da imagem. Para habilitar o compartilhamento de imagens, selecione “Colocar versões de imagem” na Galeria de Computação do Azure e, em seguida, escolha criar uma nova galeria ou usar uma existente para armazenar suas versões de imagem.
-
Na página “Imagem”, selecione “Recursos” (somente os recursos aplicáveis para a conexão definida são listados) e uma imagem mestre para usar como modelo para criar a versão da imagem. Você pode marcar a caixa de seleção “Usar um perfil de máquina” e selecionar um perfil de máquina.
Observação:
- Antes de selecionar uma imagem, verifique se a imagem mestre tem o VDA 2311 ou posterior instalado e se o driver MCSIO está instalado no VDA.
- Se você quiser usar uma imagem preparada do tipo VM confidencial para criar um catálogo MCS, crie uma imagem preparada usando a imagem mestre do tipo VM confidencial e um perfil de máquina do tipo VM confidencial. Consulte VMs confidenciais do Azure para obter informações sobre como preparar imagens mestre e perfis de máquina do tipo VM confidencial.
- Antes de selecionar uma imagem, verifique se a imagem mestre tem o VDA 2311 ou posterior instalado e se o driver MCSIO está instalado no VDA.
-
Na página “Tipos de Armazenamento e Licenças”, selecione o tipo de armazenamento e licença a ser usado como parte do processo de preparação da imagem.
Observação:
Se você selecionar um perfil de máquina na página “Imagem”, o tipo de licença do perfil de máquina será pré-selecionado com base na configuração do perfil.
- Na página “Especificação da Máquina”, selecione um tamanho de máquina. Se você selecionar um perfil de máquina na página “Imagem”, o tamanho da máquina do perfil de máquina será selecionado por padrão.
- Na página “NICs”, selecione ou adicione NICs para a imagem de preparação. Para cada NIC, selecione uma rede virtual associada.
- Na página “Configurações de Disco”, selecione a chave de criptografia gerenciada pelo cliente (CMEK). Se o perfil da máquina não tiver uma CMEK, mas a imagem mestre tiver, ele pré-selecionará a CMEK da imagem mestre.
- Na página “Descrição da Versão”, insira uma descrição para a versão inicial da imagem criada.
- Na página “Resumo”, verifique os detalhes da definição de imagem e da versão inicial da imagem criada. Insira um nome e uma descrição para a definição de imagem. Clique em “Concluir”.
Criar versões de imagem
As versões de imagem permitem o gerenciamento de diferentes iterações ou atualizações de uma imagem específica. Essa funcionalidade permite que você mantenha várias versões de uma imagem para diferentes finalidades.
Para criar versões de imagem a partir da versão inicial da imagem, faça o seguinte:
Observação:
A unidade de hospedagem de todas as versões da imagem deve ser a mesma.
- Vá para o nó Imagens, selecione uma versão de imagem ou uma definição de imagem e clique em “Criar Versão de Imagem”.
- Na página de definição de imagem, você pode alterar a unidade de hospedagem e selecionar novamente a imagem mestre e o perfil de máquina para essa versão de imagem.
- Se você quiser que a configuração da versão da imagem seja diferente da versão inicial da imagem configurada, configure as definições nas páginas “Tipos de Armazenamento e Licença”, “Especificação da Máquina”, “NICs” e “Configurações de Disco” da caixa de diálogo “Criar Versão de Imagem”.
- Adicione uma descrição para a versão da imagem. Clique em “Concluir”.

Observação:
Se a criação da versão da imagem falhar por qualquer motivo, a guia “Solução de Problemas” na parte inferior fornece uma opção “Tentar Novamente”.
Compartilhar imagem preparada
Para compartilhar imagens preparadas entre diferentes unidades de hospedagem para o Azure, siga estas etapas:
- Clique com o botão direito do mouse em uma versão de imagem e selecione “Gerenciar Compartilhamento de Imagem”. Todas as unidades de hospedagem em seu ambiente Azure aparecerão. Os recursos de onde a versão da imagem é criada são desabilitados para quaisquer ações.
- Selecione as unidades de hospedagem com as quais você deseja compartilhar a imagem e clique em “Salvar”. A coluna “Status do Compartilhamento” mostra “Em andamento”.
- Clique na guia “Recursos” para obter mais detalhes sobre o status do compartilhamento.
Observação:
Quando o status do compartilhamento da versão da imagem está em andamento, a opção “Excluir Versão da Imagem” ou “Gerenciar Compartilhamento de Imagem” é desabilitada.
Criar um catálogo de máquinas a partir do nó Imagens
Use a opção Criar catálogo no nó Imagens para criar um catálogo usando a versão da imagem.
Como alternativa, você pode selecionar a versão ao criar um catálogo no nó Catálogos de Máquinas, vinculando à opção de imagem preparada no fluxo de trabalho de criação de catálogo. Consulte Criar um catálogo de máquinas a partir do nó Catálogos de Máquinas
Para criar um catálogo de máquinas MCS a partir do nó Imagens, faça o seguinte:
- Selecione uma versão da imagem e clique em Criar catálogo. Clique em Avançar na página Introdução.
- Na página Experiência da Área de Trabalho, selecione a experiência da área de trabalho necessária.
- Da página Imagem para a página Configurações de Disco, as configurações são pré-selecionadas com base na versão da imagem selecionada.
- Na página Grupo de Recursos, você pode optar por criar um novo grupo de recursos ou usar um grupo de recursos existente para colocar os recursos deste catálogo.
- Conclua as configurações nas páginas seguintes.
- Na página Resumo, verifique os detalhes do catálogo de máquinas. Insira um nome e uma descrição para o catálogo de máquinas. Clique em Concluir.
- Vá para o nó Catálogos de Máquinas para ver o catálogo de máquinas criado.
Criar um catálogo de máquinas a partir do nó Catálogos de Máquinas
Para criar um catálogo de máquinas MCS a partir do nó Catálogos de Máquinas, faça o seguinte:
- 1. Clique em **Catálogos de Máquinas** no painel de navegação esquerdo.
- 1. Clique em **Criar Catálogo de Máquinas**. A página **Configuração do Catálogo de Máquinas** é exibida. Clique em **Avançar** nas páginas **Introdução** e **Tipo de Máquina**.
- Na página Gerenciamento de Máquinas, selecione as seguintes configurações:
-
- Selecione Máquinas com gerenciamento de energia (por exemplo, máquinas virtuais ou PCs blade).
- Selecione Tecnologia de provisionamento Citrix. Em seguida, selecione Citrix Machine Creation Services™.
- No campo Recursos, os recursos pertencentes a diferentes zonas são listados. Selecione qualquer recurso de rede do Azure e clique em Avançar.
- Selecione Máquinas com gerenciamento de energia (por exemplo, máquinas virtuais ou PCs blade).
-
- Na página Imagem:
Para o tipo de imagem preparada, siga as etapas:
- Selecione Imagem preparada.
- Em Imagem preparada, selecione uma versão de imagem de uma definição de imagem. Se necessário, adicione uma nota para a versão de imagem preparada selecionada.
- Clique no nome da versão da imagem. Para ver mais detalhes sobre a versão da imagem selecionada, clique no número da versão, que está sublinhado.
-
- Se a versão da imagem selecionada estiver configurada com um perfil de máquina, selecione um perfil de máquina. Se a versão da imagem selecionada não estiver configurada com um perfil de máquina, você não poderá optar por usar um perfil de máquina.
-
- Configure as configurações nas páginas seguintes.
- Na página Configurações de Disco, se a imagem preparada selecionada usar um conjunto de criptografia de disco, você não poderá remover o conjunto de criptografia, mas poderá alterar a chave para outra chave de criptografia.
- Na página Grupo de Recursos, você pode optar por criar um novo grupo de recursos ou usar um grupo de recursos existente para colocar os recursos deste catálogo.
- Conclua as configurações nas páginas seguintes.
- Na página Resumo, verifique os detalhes do catálogo de máquinas. Insira um nome e uma descrição para o catálogo de máquinas. Clique em Concluir.
Usar PowerShell
Criar uma imagem preparada
Os comandos detalhados do PowerShell para criar uma especificação de versão de imagem preparada são os seguintes:
-
Verifique os nomes de definição de imagem disponíveis usando o comando
Test-ProvImageDefinitionNameAvailable. Por exemplo,Test-ProvImageDefinitionNameAvailable -ImageDefinitionName <string[]> <!--NeedCopy-->- Crie uma definição de imagem usando o comando
New-ProvImageDefinition. Por exemplo,
New-ProvImageDefinition -ImageDefinitionName image1 -OsType Windows -VdaSessionSupport MultiSession <!--NeedCopy--> - Crie uma definição de imagem usando o comando
-
Crie uma nova configuração para a definição de imagem na conexão de Hospedagem especificada usando o comando
Add-ProvImageDefinitionConnection.As
CustomPropertiesparaAdd-ProvImageDefinitionConnectionpodem incluir o seguinte. Se você não usar os parâmetros, os valores padrão serão usados.-
ResourceGroups: O grupo de recursos que possui os discos base. -
UseSharedImageGallery: Indicador para o tipo de discos base. Usetruepara ACG (compartilhamento de imagem) efalsepara snapshot. -
ImageGallery: O nome da galeria quando o disco base é uma versão de imagem ACG.
Por exemplo,
-
No caso de snapshot e grupo de recursos fornecido pelo 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-->
No caso de ACG e grupo de recursos e galeria de imagens fornecidos pelo 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-->