Connection to Microsoft Azure
注意:
Since July 2023, Microsoft has renamed Azure Active Directory (Azure AD) to Microsoft Entra ID. In this document, any reference to Azure Active Directory, Azure AD, or AAD now refers to Microsoft Entra ID.
(/zh-cn/citrix-virtual-apps-desktops/2411/install-configure/connections.html)介绍了创建连接的向导。以下信息涵盖了 Azure Resource Manager 云环境特有的详细信息。
注意:
在创建到 Microsoft Azure 的连接之前,您必须完成将 Azure 帐户设置为资源位置的设置。请参阅(/zh-cn/citrix-virtual-apps-desktops/2411/install-configure/install-prepare/azure.html)。
创建服务主体和配置连接
在创建连接之前,您必须设置连接用于访问 Azure 资源的服务主体。您可以通过两种方式创建连接:
- 使用 Web Studio 同时创建服务主体和连接
- 使用先前已创建的服务主体来创建连接
本部分向您展示如何完成以下任务:
注意事项
- Citrix® 建议使用具有贡献者角色的服务主体。但是,请参阅 (#minimum-permissions) 部分以获取最低权限列表。
- 首次创建连接时,Azure 会提示您授予必要的权限。对于将来的连接,您仍然需要进行身份验证,但 Azure 会记住您之前的同意,并且不会再次显示提示。
- 用于身份验证的帐户必须具有使用 Azure RBAC 在订阅中分配角色的权限。例如,订阅的所有者、基于角色的访问控制管理员或用户访问管理员。
- 用于身份验证的帐户必须是订阅目录的成员。需要注意两种类型的帐户:“工作或学校”帐户和“个人 Microsoft 帐户”。有关详细信息,请参阅 CTX219211。
-
尽管您可以通过将现有 Microsoft 帐户添加为订阅目录的成员来使用它,但如果用户之前被授予对目录某个资源的来宾访问权限,则可能会出现复杂情况。在这种情况下,他们可能在目录中有一个占位符条目,该条目未授予他们必要的权限,并且会返回错误。
通过从目录中删除资源并显式地重新添加它们来纠正此问题。但是,请谨慎使用此选项,因为它可能对帐户可以访问的其他资源产生意外影响。
- 存在一个已知问题,即某些帐户在实际是成员时被检测为目录来宾。这种配置通常发生在较早建立的目录帐户中。解决方法:向目录添加一个帐户,该帐户将采用正确的成员资格值。
- 资源组只是资源的容器,它们可以包含来自其自身区域以外区域的资源。如果您期望资源组区域中显示的资源可用,这可能会造成混淆。
- 确保您的网络和子网足够大,可以容纳您所需的计算机数量。这需要一些远见,但 Microsoft 会帮助您指定正确的值,并提供有关地址空间容量的指导。
使用 Web Studio 创建服务主体和连接
重要提示:
此功能尚不适用于 Azure 中国订阅。
使用 Web Studio,您可以在单个工作流中创建服务主体和连接。服务主体授予连接访问 Azure 资源的权限。当您向 Azure 进行身份验证以创建服务主体时,会在 Azure 中注册一个应用程序。为注册的应用程序创建一个密钥(称为客户端密钥或应用程序密钥)。注册的应用程序(在本例中为连接)使用客户端密钥向 Azure AD 进行身份验证。
开始之前,请确保您已满足以下先决条件:
- 您在订阅的 Azure Active Directory 租户中拥有一个用户帐户。
- 用于身份验证的帐户必须具有使用 Azure RBAC 在订阅中分配角色的权限。例如,订阅的所有者、基于角色的访问控制管理员或用户访问管理员。
- 您拥有用于身份验证的全局管理员、应用程序管理员或应用程序开发人员权限。创建主机连接后,可以撤销这些权限。有关角色的更多信息,请参阅 Azure AD 内置角色。
使用添加连接和资源向导一起创建服务主体和连接:
- 在连接页面上,选择创建新连接、Microsoft Azure连接类型和您的 Azure 环境。
- 选择用于创建虚拟机的工具,然后选择下一步。
-
在连接详细信息页面上,输入您的 Azure 订阅 ID 和连接名称。输入订阅 ID 后,创建新按钮将启用。
注意:
连接名称可包含 1–64 个字符,且不能仅包含空格或字符
\/;:#.*?=<>|[]{}"'()'。 - 选择创建新,然后输入 Azure Active Directory 帐户用户名和密码。
- 选择登录。
- 选择接受以授予 思杰虚拟应用和桌面™ 列出的权限。思杰虚拟应用和桌面 会创建一个服务主体,允许它代表指定用户管理 Azure 资源。
-
选择接受后,您将返回向导中的连接页面。
注意:
成功向 Azure 进行身份验证后,创建新和使用现有按钮将消失。此时将显示连接成功文本和绿色复选标记,表示已成功连接到您的 Azure 订阅。
-
在“连接详细信息”页面上,选择“下一步”。
注意:
在您成功通过 Azure 身份验证并同意授予所需权限之前,您无法继续访问下一页。
-
配置连接所需的资源。这些资源包括区域和网络。
- 在“区域”页面上,选择一个区域。
- 在“网络”页面上,执行以下操作:
- 键入一个 1-64 个字符的资源名称,以帮助识别区域和网络组合。资源名称不能只包含空格,也不能包含字符
\/;:#.*?=<>|[]{}"'()'。 - 选择一个虚拟网络/资源组对。(如果您有多个同名虚拟网络,将网络名称与资源组配对可提供唯一的组合。)如果您在上一页选择的区域没有任何虚拟网络,请返回该页面并选择一个具有虚拟网络的区域。
- 键入一个 1-64 个字符的资源名称,以帮助识别区域和网络组合。资源名称不能只包含空格,也不能包含字符
- 在“摘要”页面上,查看设置摘要,然后选择“完成”以完成设置。
查看应用程序 ID
创建连接后,您可以查看连接用于访问 Azure 资源的应用程序 ID。
在“添加连接和资源”列表中,选择连接以查看详细信息。“详细信息”选项卡显示应用程序 ID。
使用 PowerShell 创建服务主体
要使用 PowerShell 创建服务主体,请连接到您的 Azure 资源管理器 订阅,并使用以下部分中提供的 PowerShell cmdlet 命令。
请确保您已准备好以下各项:
-
订阅 ID: Azure 资源管理器
SubscriptionID,用于您要预配 VDA 的订阅。 - ActiveDirectoryID:您在 Azure 活动目录中注册的应用程序的租户 ID。
- 应用程序名称:要在 Azure AD 中创建的应用程序的名称。
详细步骤如下所示:
连接到您的 Azure 资源管理器订阅。
`Connect-AzAccount`
-
选择要在其中创建服务主体的 Azure Resource Manager 订阅。
Get-AzSubscription -SubscriptionId $subscriptionId | Select-AzSubscription -
在您的 AD 租户中创建应用程序。
$AzureADApplication = New-AzADApplication -DisplayName $ApplicationName -
创建服务主体。
New-AzADServicePrincipal -ApplicationId $AzureADApplication.AppId -
为服务主体分配角色。
New-AzRoleAssignment -RoleDefinitionName Contributor -ServicePrincipalName $AzureADApplication.AppId –scope /subscriptions/$SubscriptionId -
从 PowerShell 控制台的输出窗口中,记下 ApplicationId。在创建主机连接时提供该 ID。
在 Azure 中获取应用程序机密
要使用现有服务主体创建连接,您必须首先在 Azure 门户中获取服务主体的应用程序 ID 和密钥。
详细步骤如下所示:
- 从 Web Studio 界面或通过 PowerShell 命令行工具获取 应用程序 ID。
- 登录到 Azure 门户。
- 在 Azure 中,选择 Azure 活动目录。
- 在 Azure AD 的 应用注册 中,选择您的应用程序。
- 转到 证书和密码。
- 单击 客户端密码。
通过使用现有的服务主体来创建连接
如果您已有服务主体,则可以使用它通过 Web Studio 创建连接。
请确保您已准备好以下各项:
- 订阅 ID
- 活动目录 ID(租户 ID)
- 应用程序 ID
-
应用程序机密
有关详细信息,请参阅获取应用程序机密。
- 机密过期日期
详细步骤如下所示:
在添加连接和资源向导中:
-
在连接页面上,选择创建新连接、Microsoft Azure连接类型以及您的 Azure 环境。
-
选择用于创建虚拟机的工具,然后选择下一步。
-
在连接详细信息页面上,输入您的 Azure 订阅 ID 以及连接名称。
注意:
连接名称可以包含 1–64 个字符,不能只包含空格,也不能包含字符
\/;:#.*?=<>|[]{}"'()'。 -
选择使用现有。在现有服务主体详细信息窗口中,输入现有服务主体的以下设置。输入详细信息后,保存按钮将启用。选择保存。在提供有效详细信息之前,您无法继续操作。
- 订阅 ID。输入您的 Azure 订阅 ID。要获取您的订阅 ID,请登录 Azure 门户并导航到订阅 > 概述。
- Active Directory ID(租户 ID)。输入您在 Azure AD 中注册的应用程序的目录(租户)ID。
- 应用程序 ID。输入您在 Azure AD 中注册的应用程序的应用程序(客户端)ID。
- 应用程序机密。创建机密密钥(客户端机密)。注册的应用程序使用该密钥向 Azure AD 进行身份验证。我们建议您定期更改密钥以确保安全。请务必保存该密钥,因为以后无法检索该密钥。
-
机密过期日期。输入应用程序机密过期后的日期。在机密密钥过期前 14 天,您会在托管节点中特定主机连接上看到警告图标。但是,如果机密密钥过期,您将收到错误。
注意:
出于安全目的,过期期限不得超过自当前日期起的两年。
- 身份验证 URL。此字段自动填充且不可编辑。
- 管理 URL。此字段自动填充且不可编辑。
- 存储后缀。此字段自动填充且不可编辑。
- 用于上传或下载磁盘或快照的 Azure Blob 存储端点。此字段自动填充且不可编辑。
- Key Vault 服务。此字段自动填充且不可编辑。
-
服务总线后缀。此字段自动填充且不可编辑。
在 Azure 中创建 MCS 目录需要访问以下端点。访问这些端点可优化您的网络与 Azure 门户及其服务之间的连接。
- 身份验证 URL:
https://login.microsoftonline.com - 管理统一资源定位符:
https://management.azure.com。这是 Azure 资源管理器提供程序应用程序编程接口的请求统一资源定位符。管理的端点取决于环境。例如,对于 Azure Global,它是https://management.azure.com,对于 Azure US Government,它是https://management.usgovcloudapi.net。 - 存储后缀:
https://*.core.windows.net。此 (*) 是存储后缀的通配符。例如,https://demo.table.core.windows.net。 - 用于上传或下载磁盘或快照的 Azure Blob 存储端点:
https://*.storage.azure.net。此 (*) 是 Blob 存储导入和导出操作的通配符。例如,https://md-impexp-xxxxx.z[00-50].blob.storage.azure.net。 - Key Vault 服务:
https://*.vault.azure.net。此 (*) 是 Key Vault 名称的通配符。例如,https://<your-key-vault-name>.vault.azure.net。 - 服务总线后缀:
https://*.servicebus.windows.net。此 (*) 是在全局 Azure 云中创建的命名空间的通配符。例如,https://{serviceNamespace}.servicebus.windows.net/{path}。
- 身份验证 URL:
- 选择“保存”后,您将返回到“连接详细信息”页面。选择“下一步”以继续到下一页。
-
配置用于此连接的资源。这些资源包括区域和网络。
- 在“区域”页面上,选择一个区域。
- 在“网络”页面上,执行以下操作:
- 键入 1-64 个字符的资源名称,以帮助识别区域和网络组合。资源名称不能只包含空格或字符
\/;:#.*?=<>|[]{}"'()'。 - 选择一个虚拟网络/资源组对。(如果存在多个同名虚拟网络,将网络名称与资源组配对可提供唯一组合。)如果您在上一页选择的区域没有任何虚拟网络,请返回该页面并选择一个具有虚拟网络的区域。
- 键入 1-64 个字符的资源名称,以帮助识别区域和网络组合。资源名称不能只包含空格或字符
- 在“摘要”页面上,查看设置摘要,然后选择“完成”以完成设置。
对服务主体和连接进行管理
本节详细介绍了如何管理服务主体和连接:
配置 Azure 限制设置
Azure Resource Manager 会限制订阅和租户的请求,根据定义的限制路由流量,并根据提供商的特定需求量身定制。有关详细信息,请参阅 Microsoft 网站上的 限制 Resource Manager 请求。订阅和租户存在限制,管理大量计算机可能会出现问题。例如,包含大量计算机的订阅可能会遇到与电源操作相关的性能问题。
提示:
有关详细信息,请参阅 使用机器创建服务提高 Azure 性能。
为帮助缓解这些问题,您可以移除 MCS 内部限制,以使用更多来自 Azure 的可用请求配额。
在大型订阅(例如,包含 1,000 个虚拟机的订阅)中打开或关闭虚拟机电源时,我们建议使用以下最佳设置:
- 绝对同时操作数:500
- 每分钟最大新操作数:2000
- 最大并发操作数:500
使用 Web Studio 配置针对给定 Azure 连接的 Azure 操作:
- 在 Web Studio 中,选择左侧窗格中的托管。
- 选择要使用的连接。
- 在编辑连接向导中,选择高级。
- 在高级页面上,使用配置选项指定同时操作的数量和每分钟最大新操作数,以及任何其他连接选项。

MCS 默认支持 500 个最大并发操作。或者,您可以使用远程 PowerShell SDK 设置最大并发操作数。
使用 PowerShell 属性 MaximumConcurrentProvisioningOperations 指定并发 Azure 预配操作的最大数量。使用此属性时,请考虑:
-
MaximumConcurrentProvisioningOperations的默认值为 500。 - 使用 PowerShell 命令
Set-item配置MaximumConcurrentProvisioningOperations参数。
在 Azure 中启用映像共享
创建或更新计算机目录时,您可以从不同的 Azure 租户和订阅中选择共享映像(通过 Azure 计算库共享)。要在租户内部或跨租户启用映像共享,您必须在 Azure 中进行必要的设置:
在租户内共享映像(跨订阅)
要在 Azure 计算库中选择属于其他订阅的映像,必须与该订阅的服务主体 (SPN) 共享该映像。
例如,如果存在服务主体 (SPN 1),它在 Studio 中配置为:
服务主体:SPN 1
订阅:订阅 1
租户:租户 1
映像位于不同的订阅中,它在 Studio 中配置为:
订阅:订阅 2
租户: 租户 1
如果您想将订阅 2 中的映像与订阅 1 (SPN 1) 共享,请转到订阅 2,并将资源组与 SPN1 共享。
必须使用 Azure 基于角色的访问控制 (RBAC) 与另一个 SPN 共享映像。Azure RBAC 是用于管理对 Azure 资源访问的授权系统。有关 Azure RBAC 的详细信息,请参阅 Microsoft 文档 什么是 Azure 基于角色的访问控制 (Azure RBAC)。要授予访问权限,您需要以“参与者”角色在资源组范围向服务主体分配角色。要分配 Azure 角色,您必须具有 Microsoft.Authorization/roleAssignments/write 权限,例如“用户访问管理员”或“所有者”。有关与另一个 SPN 共享映像的详细信息,请参阅 Microsoft 文档 使用 Azure 门户分配 Azure 角色。
有关使用 PowerShell 命令从不同订阅中选择映像的信息,请参阅 从不同订阅中选择映像。
跨租户共享映像
要使用 Azure 计算库跨租户共享映像,请创建应用程序注册。
例如,如果有两个租户(租户 1 和租户 2)并且您想与租户 1 共享您的映像库,则:
-
为租户 1 创建应用程序注册。有关详细信息,请参阅 创建应用程序注册。
-
通过请求使用浏览器登录,授予租户 2 对应用程序的访问权限。将
Tenant2 ID替换为租户 1 的租户 ID。将Application (client) ID替换为您创建的应用程序注册的应用程序 ID。完成替换后,将 URL 粘贴到浏览器中,然后按照登录提示登录到租户 2。例如:https://login.microsoftonline.com/<Tenant 2 ID>/oauth2/authorize?client_id=<Application (client) ID>&response_type=code&redirect_uri=https%3A%2F%2Fwww.microsoft.com%2F <!--NeedCopy-->有关详细信息,请参阅 授予租户 2 访问权限。
-
授予应用程序对租户 2 资源组的访问权限。以租户 2 身份登录,并授予应用程序注册对包含库映像的资源组的访问权限。有关详细信息,请参阅 跨租户验证请求。
要使用 PowerShell 命令从不同租户的映像创建目录,请执行以下操作:
使用 Web Studio 将共享租户添加到连接
在 Web Studio 中创建或更新计算机目录时,您可以从不同的 Azure 租户和订阅(通过 Azure 计算库共享)中选择共享映像。此功能要求您为关联的主机连接提供共享租户和订阅信息。
注意:
请确保您已在 Azure 中配置了必要的设置以启用跨租户的映像共享。有关详细信息,请参阅跨租户共享映像。
请按照以下步骤操作以建立连接:
- 在 Web Studio 中,选择左侧窗格中的托管。
-
选择连接,然后在操作栏中选择编辑连接。

-
在共享租户中,执行以下操作:
- 提供与连接订阅关联的应用程序 ID 和应用程序密钥。Citrix Virtual Apps and Desktops 使用此信息向 Azure AD 进行身份验证。
- 添加与连接订阅共享 Azure 计算库的租户和订阅。每个租户最多可以添加 8 个共享租户和 8 个订阅。
- 完成后,选择应用以应用所做的更改并保持窗口打开,或者选择确定以应用更改并关闭窗口。
使用 PowerShell 实现映像共享
本节将指导您完成使用 PowerShell 共享映像的过程:
- 从其他订阅中选择映像
- 使用共享租户 ID 更新托管连接自定义属性
- 从不同的租户中选择映像(#select-an-image-from-a-different-tenant)
选择一个属于不同订阅的映像
您可以在同一 Azure 租户中选择属于不同共享订阅的 Azure 计算库中的映像,以使用 PowerShell 命令创建和更新 MCS 目录。
- 在托管单元根文件夹中,Citrix 会创建一个名为
sharedsubscription的新共享订阅文件夹。 -
列出租户中的所有共享订阅。
Get-ChildItem -Path "XDhyp:\HostingUnits\azres\sharedsubscription.folder" <!--NeedCopy--> -
选择一个共享订阅,然后列出该共享订阅的所有共享资源组。
Get-ChildItem -Path "XDhyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription" <!--NeedCopy--> -
选择一个资源组,然后列出该资源组的所有库。
Get-ChildItem -Path "XDhyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription\ xyz.resourcegroup" <!--NeedCopy--> -
选择一个库,然后列出该库的所有映像定义。
Get-ChildItem -Path "XDhyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription\xyz.resourcegroup\testgallery.gallery" <!--NeedCopy--> -
选择一个映像定义,然后列出该映像定义的所有映像版本。
Get-ChildItem -Path "XDhyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription\xyz.resourcegroup\sigtestdef.imagedefinition" <!--NeedCopy--> -
使用以下元素创建和更新 MCS 目录:
- 资源群组
- 库
- 图库映像的定义
- 图库映像的版本
有关如何使用远程 PowerShell SDK 创建目录的信息,请参阅https://developer-docs.citrix.com/projects/citrix-virtual-apps-desktops-sdk/en/latest/creating-a-catalog/。
使用共享租户 ID 更新托管连接自定义属性
使用 Set-Item 更新托管连接自定义属性,其中包含共享租户 ID 和订阅 ID。在 CustomProperties 中添加属性 SharedTenants。Shared Tenants 的格式为:
[{"Tenant":"94367291-119e-457c-bc10-25337231f7bd","Subscriptions":["7bb42f40-8d7f-4230-a920-be2781f6d5d9"]},{"Tenant":"50e83564-c4e5-4209-b43d-815c45659564","Subscriptions":["06ab8944-6a88-47ee-a975-43dd491a37d0"]}]
<!--NeedCopy-->
例如:
Set-Item -CustomProperties "<CustomProperties xmlns=`"http://schemas.citrix.com/2014/xd/machinecreation`" xmlns:xsi=`"http://www.w3.org/2001/XMLSchema-instance`">
<Property xsi:type=`"StringProperty`" Name=`"SubscriptionId`" Value=`"123`" />
<Property xsi:type=`"StringProperty`" Name=`"ManagementEndpoint`" Value=`"https://management.azure.com/`" />
<Property xsi:type=`"StringProperty`" Name=`"AuthenticationAuthority`" Value=`"https://login.microsoftonline.com/`" />
<Property xsi:type=`"StringProperty`" Name=`"StorageSuffix`" Value=`"core.windows.net`" />
<Property xsi:type=`"StringProperty`" Name=`"TenantId`" Value=`"123abc`" />
<Property xsi:type=`"StringProperty`" Name=`"SharedTenants`" Value=`"`[ { 'Tenant':'123abc', 'Subscriptions':['345', '567'] } ]`"` />
</CustomProperties>"
-LiteralPath @("XDHyp:\Connections\aazure") -PassThru -UserName "advc345" -SecurePassword
$psd
<!--NeedCopy-->
注意:
您可以添加多个租户。每个租户可以有多个订阅。
选择一个来自不同租户的映像
您可以使用 PowerShell 命令选择属于不同 Azure 租户的 Azure 计算库中的映像,以创建和更新 MCS 目录。
- 在托管单元根文件夹中,Citrix 会创建一个名为
sharedsubscription的新共享订阅文件夹。 -
列出所有共享订阅。
Get-ChildItem XDHyp:\HostingUnits\azres\sharedsubscription.folder <!--NeedCopy--> -
选择一个共享订阅,然后列出该共享订阅的所有共享资源组。
Get-ChildItem XDHyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription <!--NeedCopy--> -
选择一个资源组,然后列出该资源组的所有库。
Get-ChildItem XDHyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription\ xyz.resourcegroup <!--NeedCopy--> -
选择一个库,然后列出该库的所有映像定义。
Get-ChildItem XDHyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription\xyz.resourcegroup\efg.gallery <!--NeedCopy--> -
选择一个映像定义,然后列出该映像定义的所有映像版本。
Get-ChildItem XDHyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription\xyz.resourcegroup\efg.gallery\hij.imagedefinition <!--NeedCopy--> -
使用以下元素创建和更新 MCS 目录:
- 资源的组
- 图库
- 图库映像定义
- 图库映像版本
有关如何使用远程 PowerShell SDK 创建目录的信息,请参阅 https://developer-docs.citrix.com/projects/citrix-virtual-apps-desktops-sdk/en/latest/creating-a-catalog/。
管理应用程序机密和机密过期日期
请务必在机密过期之前更改连接的应用程序机密。在机密密钥过期前 14 天,您会在 Hosting 节点中的特定主机连接上看到警告图标。但是,如果机密密钥过期,您将收到错误。
在 Azure 中创建应用程序机密
您可以通过 Azure 门户为连接创建应用程序机密。
- 选择 Azure 活动目录。
- 在 Azure AD 的 应用注册 中,选择您的应用程序。
- 转到 证书和机密。
- 单击 客户端机密 > 新建客户端机密。
-
提供机密的描述并指定持续时间。完成后,选择 Add。
注意:
请务必保存客户端机密,因为以后无法检索它。
- 复制客户端密钥值和过期日期。
- 在 Web Studio 中,编辑相应的连接,并将“应用程序密钥”和“密钥过期日期”字段中的内容替换为您复制的值。
更改密钥的过期日期
您可以使用 Web Studio 添加或修改正在使用的应用程序密钥的过期日期。
注意:
在密钥过期前 14 天,您会在“托管”节点中的特定主机连接上看到一个警告图标。
- 在“添加连接和资源”向导中,右键单击一个连接,然后单击“编辑连接”。
- 在“连接属性”页面上,单击“密钥过期日期”以添加或修改正在使用的应用程序密钥的过期日期。
使用预创建的网络安全组
创建一个“全部拒绝”网络安全组用于映像准备,而不是请求 Citrix 创建和修改 NSG。使用 PowerShell 命令 Set-Item 编辑托管单元的自定义属性,以包含参数 NsgForPreparation 来提供“全部拒绝”网络安全组。
先决条件
Configure the following permissions required for a service principal:
-
Microsoft.Network/networkSecurityGroups/join/action:将网络安全组关联到子网或网络接口 -
Microsoft.Network/networkSecurityGroups/read:获取网络安全组 -
Microsoft.Network/networkSecurityGroups/securityRules/read:获取规则
添加预创建的“拒绝所有”网络安全组
要添加预创建的“拒绝所有”网络安全组,请在托管单元上按如下方式设置自定义属性:
- 使用远程 PowerShell 软件开发工具包打开 PowerShell 窗口。
-
运行以下命令:
Add-PSSnapin citrix*. cd XDHyp:\HostingUnits\ Dir <!--NeedCopy--> -
选择一个托管单元以检索详细信息:
Get-Item "XDHyp:\HostingUnits\<hostingunitname>" <!--NeedCopy--> -
将自定义属性复制到记事本,并附加属性设置
<Property xsi:type="StringProperty” Name="NsgForPreparation” Value="{ResourceGroupName}/{NetworkSecurityGroupName}"/>。例如:<CustomProperties xmlns=`"http://schemas.citrix.com/2014/xd/machinecreation`" xmlns:xsi=`"http://www.w3.org/2001/XMLSchema-instance`"><Property xsi:type=`"StringProperty`" Name=`"NsgForPreparation`" Value=`{ResourceGroupName}/{NetworkSecurityGroupName}`"/></CustomProperties> <!--NeedCopy--> -
在 PowerShell 窗口中,将变量分配给修改后的自定义属性。例如:
$customProperty = "<CustomProperties xmlns=`"http://schemas.citrix.com/2014/xd/machinecreation`" xmlns:xsi=`"http://www.w3.org/2001/XMLSchema-instance`"><Property xsi:type=`"StringProperty`" Name=`"NsgForPreparation`" Value=`"{ResourceGroupName}/{NetworkSecurityGroupName}`"/></CustomProperties>" <!--NeedCopy--> - 运行
$cred = Get-Credential。如果出现提示,请提供连接凭据。凭据是 Azure 应用程序 ID 和密钥。 -
运行以下命令。
Set-Item -PSPath XDHyp:\HostingUnits\<hostingunitname> -CustomProperties $customProperty -username $cred.username -Securepassword $cred.password <!--NeedCopy-->重要:
如果收到一条消息,指出 SubscriptionId 缺失,请将自定义属性中的所有双引号 (“) 替换为反引号后跟双引号 (`”)。
- 运行
dir以验证更新的CustomProperties设置。
注意:
更新需要一分钟以上才能生效。
检索网络安全组详细信息
要检索网络安全组的详细信息,您需要首先检索包含该网络安全组的资源组,然后根据资源组的名称来检索网络安全组。
-
获取包含相关网络安全组的资源组。例如:
Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 5 -AdditionalDataFilter '{"containedresourcetypes": ["networksecuritygroup"]}' <!--NeedCopy--> -
然后根据资源组的名称检索网络安全组。例如:
Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType securitygroup -MaxRecords 5 -AdditionalDataFilter '{"location": ["eastus", "westus"], "resourcegroup":["resourcegroupname"]}' <!--NeedCopy-->
过滤掉空的资源组
在创建计算机目录期间选择主映像、计算机配置文件或准备好的映像时,使用 PowerShell 命令 Get-HypInventoryItem 筛选空资源组。
示例:
-
检索页面中的最大记录数:
Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 5 <!--NeedCopy--> -
检索页面中的最大记录数,并筛选以查找具有特定资源的资源容器。
Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 5 -AdditionalDataFilter '{"containedresourcetypes": ["vm", "manageddisk", "snapshot", "imageversion", "storageaccount"]}' <!--NeedCopy--> -
通过跳过直接指示页面进行检索,并筛选以查找具有特定资源的资源容器。
Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 5 -skip 20 -AdditionalDataFilter '{"containedresourcetypes": ["vm", "manageddisk", "snapshot", "imageversion", "storageaccount"]}' <!--NeedCopy--> -
使用令牌检索下一页,并筛选以查找具有特定资源的资源容器。
Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 5 -AdditionalDataFilter '{"containedresourcetypes": ["vm", "manageddisk", "snapshot", "imageversion", "storageaccount"]}' -ContinuationToken 'ew0KICAiJGlkIjogIjEiLA0KICAiTWF4Um93cyI6IDUsDQogICJSb3dzVG9Ta2lwIjogMjUsDQogICJLdXN0b0NsdXN0ZXJVcmwiOiAiaHR0cHM6Ly9hcmctbmV1LTEzLXNmLmFyZy5jb3JlLndpbmRvd3MubmV0Ig0KfQ==' <!--NeedCopy--> -
检索所有带有 Citrix 内部标签的资源组,并使用
MaxRecords限制最大记录数。Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 5 <!--NeedCopy--> -
筛选带有 Citrix 内部标签的计算机配置文件(主映像),并使用
MaxRecords限制最大记录数。Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 5 -AdditionalDataFilter '{"containedresourcetypes": ["vm", "templatespecversion"]}' <!--NeedCopy--> -
筛选带有 Citrix 内部标签的准备好的映像,并使用
MaxRecords限制最大记录数。Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 5 -AdditionalDataFilter '{"containedresourcetypes": ["manageddisk", "snapshot", "imageversion"]}' <!--NeedCopy--> -
筛选带有 Citrix 内部标签的计算机配置文件(准备好的映像),并使用
MaxRecords限制最大记录数。Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 5 -AdditionalDataFilter '{"containedresourcetypes": ["vm", "templatespecversion"]}' <!--NeedCopy--> -
筛选带有 Citrix 内部标签的映像,并使用
MaxRecords和位置限制最大记录数。Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 5 -AdditionalDataFilter '{"containedresourcetypes": ["manageddisk", "snapshot", "imageversion", "storageaccount"], "location": ["eastus", "westus"]}' <!--NeedCopy--> -
检索所有资源组,不考虑标签
CitrixResource。Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 50 -AdditionalDataFilter '{"containedresourcetypes": ["manageddisk", "snapshot", "imageversion", "storageaccount"]}' -Force $true <!--NeedCopy-->
连接到 Azure 主权气隙云环境
Azure Sovereign Airgap 云环境适用于必须位于隔离网络域中的绝密工作负载。在创建主机连接时,您可以使用自定义属性 DisableInstanceDiscovery 连接到 Azure Sovereign Airgap 云环境。
<Property xsi:type="StringProperty" Name="DisableInstanceDiscovery" Value="true" />
<!--NeedCopy-->
See Create-HostingConnection.ps1 for more information on creating an Azure host connection.
所需的 Azure 权限
本节包含 Azure 所需的最低和通用权限。
所需的最低权限
最低权限可提供更好的安全控制。但是,由于仅使用最低权限,需要额外权限的新功能将无法运行。
如何创建主机连接
使用从 Azure 获取的信息添加新的主机连接。
"Microsoft.Network/virtualNetworks/read",
"Microsoft.Compute/virtualMachines/read",
"Microsoft.Compute/disks/read",
"Microsoft.Resources/providers/read",
"Microsoft.Resources/subscriptions/locations/read",
"Microsoft.Resources/tenants/read",
"Microsoft.Network/networkSecurityGroups/join/action",
"Microsoft.Network/networkSecurityGroups/read",
"Microsoft.Network/networkSecurityGroups/securityRules/read"
<!--NeedCopy-->
VM 的电源管理
打开或关闭计算机实例的电源。
"Microsoft.Compute/virtualMachines/read",
"Microsoft.Resources/subscriptions/resourceGroups/read",
"Microsoft.Compute/virtualMachines/deallocate/action",
"Microsoft.Compute/virtualMachines/start/action",
"Microsoft.Compute/virtualMachines/restart/action",
"Microsoft.Insights/diagnosticsettings/delete",
"Microsoft.Insights/diagnosticsettings/read",
"Microsoft.Insights/diagnosticsettings/write",
<!--NeedCopy-->
创建、更新或删除 VM
创建计算机目录,然后添加、删除、更新计算机,并删除计算机目录。
以下是当主映像为托管磁盘,或者快照与托管连接位于同一区域时,所需要具备的最低权限列表。
"Microsoft.Resources/subscriptions/resourceGroups/read",
"Microsoft.Resources/deployments/validate/action",
"Microsoft.Resources/tags/read",
"Microsoft.Resources/tags/write",
"Microsoft.Compute/virtualMachines/read",
"Microsoft.Compute/virtualMachines/write",
"Microsoft.Compute/virtualMachines/delete",
"Microsoft.Compute/virtualMachines/deallocate/action",
"Microsoft.Compute/snapshots/read",
"Microsoft.Compute/snapshots/write",
"Microsoft.Compute/snapshots/delete",
"Microsoft.Compute/snapshots/beginGetAccess/action",
"Microsoft.Compute/snapshots/endGetAccess/action",
"Microsoft.Compute/disks/read",
"Microsoft.Compute/disks/write",
"Microsoft.Compute/disks/delete",
"Microsoft.Compute/disks/beginGetAccess/action",
"Microsoft.Compute/disks/endGetAccess/action",
"Microsoft.Compute/locations/publishers/artifacttypes/types/versions/read",
"Microsoft.Compute/skus/read",
"Microsoft.Compute/virtualMachines/extensions/read",
"Microsoft.Compute/virtualMachines/extensions/write",
"Microsoft.Features/providers/features/read",
"Microsoft.Network/virtualNetworks/read",
"Microsoft.Network/virtualNetworks/subnets/join/action",
"Microsoft.Network/virtualNetworks/subnets/read",
"Microsoft.Network/networkSecurityGroups/read",
"Microsoft.Network/networkSecurityGroups/write",
"Microsoft.Network/networkSecurityGroups/delete",
"Microsoft.Network/networkSecurityGroups/join/action",
"Microsoft.Network/networkInterfaces/read",
"Microsoft.Network/networkInterfaces/write",
"Microsoft.Network/networkInterfaces/delete",
"Microsoft.Network/networkInterfaces/join/action",
"Microsoft.Network/locations/usages/read",
"Microsoft.Compute/capacityReservationGroups/capacityReservations/read"
<!--NeedCopy-->
除了以下功能所需的最低权限外,您还需要以下额外权限:
-
如果主映像是位于与托管连接相同区域的存储帐户中的 VHD:
"Microsoft.Storage/storageAccounts/read", "Microsoft.Storage/storageAccounts/listKeys/action", <!--NeedCopy--> -
如果主映像是来自共享映像库的 ImageVersion:
"Microsoft.Compute/galleries/read", "Microsoft.Compute/galleries/images/read", "Microsoft.Compute/galleries/images/versions/read", <!--NeedCopy--> -
如果主映像是托管磁盘,则快照或 VHD 位于与托管连接区域不同的区域:
"Microsoft.Storage/storageAccounts/read", "Microsoft.Storage/storageAccounts/listKeys/action", "Microsoft.Storage/storageAccounts/write", "Microsoft.Storage/storageAccounts/delete", "Microsoft.Storage/checknameavailability/read", "Microsoft.Storage/locations/usages/read", "Microsoft.Storage/skus/read", <!--NeedCopy--> -
如果您使用 Citrix 管理的资源组:
"Microsoft.Resources/subscriptions/resourceGroups/write", "Microsoft.Resources/subscriptions/resourceGroups/delete", <!--NeedCopy--> -
如果您将主映像放置在共享租户或订阅中的 Azure 计算库(以前称为共享映像库)中:
"Microsoft.Compute/galleries/write", "Microsoft.Compute/galleries/images/write", "Microsoft.Compute/galleries/images/versions/write", "Microsoft.Compute/galleries/read", "Microsoft.Compute/galleries/images/read", "Microsoft.Compute/galleries/images/versions/read", "Microsoft.Compute/galleries/delete", "Microsoft.Compute/galleries/images/delete", "Microsoft.Compute/galleries/images/versions/delete", "Microsoft.Resources/subscriptions/read", <!--NeedCopy--> -
如果您使用 Azure 专用主机支持:
"Microsoft.Compute/hostGroups/read", "Microsoft.Compute/hostGroups/write", "Microsoft.Compute/hostGroups/hosts/read", <!--NeedCopy--> -
如果您将服务器端加密 (SSE) 与客户管理密钥 (CMK) 结合使用:
"Microsoft.Compute/diskEncryptionSets/read", <!--NeedCopy--> -
如果您使用 ARM 模板(计算机配置文件)部署 VM:
"Microsoft.Resources/deployments/write", "Microsoft.Resources/deployments/operationstatuses/read", "Microsoft.Resources/deployments/read", "Microsoft.Resources/deployments/delete", "Microsoft.Insights/DataCollectionRuleAssociations/Read", "Microsoft.Insights/dataCollectionRules/read", <!--NeedCopy--> -
如果您使用 Azure 模板规范作为计算机配置文件:
"Microsoft.Resources/templateSpecs/read", "Microsoft.Resources/templateSpecs/versions/read", <!--NeedCopy-->
使用非托管磁盘创建、更新和删除计算机
以下是当主映像为 VHD 且使用管理员提供的资源组时所需的最低权限列表:
"Microsoft.Resources/subscriptions/resourceGroups/read",
"Microsoft.Resources/tags/read",
"Microsoft.Resources/tags/write",
"Microsoft.Storage/storageAccounts/delete",
"Microsoft.Storage/storageAccounts/listKeys/action",
"Microsoft.Storage/storageAccounts/read",
"Microsoft.Storage/storageAccounts/write",
"Microsoft.Storage/checknameavailability/read",
"Microsoft.Storage/locations/usages/read",
"Microsoft.Storage/skus/read",
"Microsoft.Compute/virtualMachines/deallocate/action",
"Microsoft.Compute/virtualMachines/delete",
"Microsoft.Compute/virtualMachines/read",
"Microsoft.Compute/virtualMachines/write",
"Microsoft.Resources/deployments/validate/action",
"Microsoft.Network/networkInterfaces/delete",
"Microsoft.Network/networkInterfaces/join/action",
"Microsoft.Network/networkInterfaces/read",
"Microsoft.Network/networkInterfaces/write",
"Microsoft.Network/networkSecurityGroups/delete",
"Microsoft.Network/networkSecurityGroups/join/action",
"Microsoft.Network/networkSecurityGroups/read",
"Microsoft.Network/networkSecurityGroups/write",
"Microsoft.Network/virtualNetworks/subnets/read",
"Microsoft.Network/virtualNetworks/read",
"Microsoft.Network/virtualNetworks/subnets/join/action",
"Microsoft.Network/locations/usages/read",
<!--NeedCopy-->
一般性权限
参与者角色拥有管理所有资源的完全访问权限。这组权限不会阻止您获得新功能。
以下权限集提供了面向未来的最佳兼容性,尽管它确实包含了比当前功能集所需更多的权限:
"Microsoft.Compute/diskEncryptionSets/read",
"Microsoft.Compute/disks/beginGetAccess/action",
"Microsoft.Compute/disks/delete",
"Microsoft.Compute/disks/endGetAccess/action",
"Microsoft.Compute/disks/read",
"Microsoft.Compute/disks/write",
"Microsoft.Compute/galleries/delete",
"Microsoft.Compute/galleries/images/delete",
"Microsoft.Compute/galleries/images/read",
"Microsoft.Compute/galleries/images/versions/delete",
"Microsoft.Compute/galleries/images/versions/read",
"Microsoft.Compute/galleries/images/versions/write",
"Microsoft.Compute/galleries/images/write",
"Microsoft.Compute/galleries/read",
"Microsoft.Compute/galleries/write",
"Microsoft.Compute/hostGroups/hosts/read",
"Microsoft.Compute/hostGroups/read",
"Microsoft.Compute/hostGroups/write",
"Microsoft.Compute/snapshots/beginGetAccess/action",
"Microsoft.Compute/snapshots/delete",
"Microsoft.Compute/snapshots/endGetAccess/action",
"Microsoft.Compute/snapshots/read",
"Microsoft.Compute/snapshots/write",
"Microsoft.Compute/virtualMachines/deallocate/action",
"Microsoft.Compute/virtualMachines/delete",
"Microsoft.Compute/virtualMachines/read",
"Microsoft.Compute/virtualMachines/restart/action",
"Microsoft.Compute/virtualMachines/start/action",
"Microsoft.Compute/virtualMachines/write",
"Microsoft.Compute/locations/publishers/artifacttypes/types/versions/read",
"Microsoft.Compute/skus/read",
"Microsoft.Compute/virtualMachines/extensions/read",
"Microsoft.Compute/virtualMachines/extensions/write",
"Microsoft.Network/networkInterfaces/delete",
"Microsoft.Network/networkInterfaces/join/action",
"Microsoft.Network/networkInterfaces/read",
"Microsoft.Network/networkInterfaces/write",
"Microsoft.Network/networkSecurityGroups/delete",
"Microsoft.Network/networkSecurityGroups/join/action",
"Microsoft.Network/networkSecurityGroups/read",
"Microsoft.Network/networkSecurityGroups/write",
"Microsoft.Network/virtualNetworks/subnets/read",
"Microsoft.Network/virtualNetworks/read",
"Microsoft.Network/virtualNetworks/subnets/join/action",
"Microsoft.Network/locations/usages/read",
"Microsoft.Resources/deployments/operationstatuses/read",
"Microsoft.Resources/deployments/read",
"Microsoft.Resources/deployments/validate/action",
"Microsoft.Resources/deployments/write",
"Microsoft.Resources/deployments/delete",
"Microsoft.Resources/subscriptions/resourceGroups/read",
"Microsoft.Resources/subscriptions/resourceGroups/write",
"Microsoft.Resources/subscriptions/resourceGroups/delete",
"Microsoft.Resources/providers/read",
"Microsoft.Resources/subscriptions/locations/read",
"Microsoft.Resources/subscriptions/read",
"Microsoft.Resources/tags/read",
"Microsoft.Resources/tags/write",
"Microsoft.Resources/tenants/read",
"Microsoft.Resources/templateSpecs/read",
"Microsoft.Resources/templateSpecs/versions/read",
"Microsoft.Storage/storageAccounts/delete",
"Microsoft.Storage/storageAccounts/listKeys/action",
"Microsoft.Storage/storageAccounts/read",
"Microsoft.Storage/storageAccounts/write",
"Microsoft.Storage/checknameavailability/read",
"Microsoft.Storage/locations/usages/read",
"Microsoft.Storage/skus/read",
"Microsoft.Features/providers/features/read",
"Microsoft.Insights/DataCollectionRuleAssociations/Read",
"Microsoft.Insights/dataCollectionRules/read",
"Microsoft.Insights/diagnosticsettings/delete",
"Microsoft.Insights/diagnosticsettings/read",
"Microsoft.Insights/diagnosticsettings/write",
"Microsoft.Network/networkSecurityGroups/join/action",
"Microsoft.Network/networkSecurityGroups/read",
"Microsoft.Network/networkSecurityGroups/securityRules/read",
"Microsoft.Compute/capacityReservationGroups/capacityReservations/read"
<!--NeedCopy-->
验证主机连接上的权限
您可以验证主机连接上的权限,以执行与创建和管理 MCS 计算机目录相关的任务。此实现可帮助您提前找出不同场景(例如创建、删除和更新 VM、VM 的电源管理)所需的缺失权限,从而避免在关键时刻受阻。
您可以使用 PowerShell 命令 Test-HypHypervisorConnection 验证主机连接上的权限。该命令的结果将捕获为一个列表,列表中的每个项目都分为三个部分。
- 类别:用户可以执行的用于创建和管理 MCS 计算机目录的操作或任务。
- 纠正措施:管理员必须执行的步骤,以解决用户权限缺失的差异。
- 缺失权限:某个类别缺失的权限列表。
要验证权限,请执行以下操作:
- 创建到 Azure 的主机连接。
- 请从交付控制器主机打开 PowerShell 窗口。
- 运行
asnp citrix*以加载 思杰 特定的 PowerShell 模块。 -
运行以下命令以验证您是否具有测试连接所需的权限。
Test-HypHypervisorConnection -LiteralPath "XDHyp:\Connections\AzureCon" <!--NeedCopy-->SPN 所需的角色级别权限:
- Microsoft.Authorization/roleDefinitions/read (at subscription level or the resource group level if resource group is provided)
- Microsoft.Authorization/roleAssignments/read ( at subscription level or the resource group level if resource group is provided)
SPN 所需的 API 级别权限:
微软图形:
- 应用程序.读取.所有
- 目录.读取所有
- 服务主体终结点.读取所有
-
在添加了查找您的权限所需的缺失权限之后,请运行以下命令以验证您是否在不同类别中拥有相应的权限。
示例:
要测试一个在需要更高级别授权的订阅级别的连接:
Test-HypHypervisorConnection -LiteralPath XDHyp:\Connections\ AzureCon -SecurePassword $password -UserName 922e65d5-38ae-4cf5-xxxx-xxxxxxxxx <!--NeedCopy-->示例:
要测试一个在不需要高级别授权的资源组级别的连接:
Test-HypHypervisorConnection -LiteralPath XDHyp:\Connections\testles -CustomProperties $customProperties | Format-List <!--NeedCopy-->注意:
CustomProperties 参数用于提供资源组级别,因为资源组是连接特定信息。
示例:
要在资源组级别测试具有更高级别授权的连接:
Test-HypHypervisorConnection -LiteralPath XDHyp:\Connections\testles -SecurePassword $password -UserName 922e65d5-38ae-4cf5-832b-54122196b7dd -CustomProperties $customProperties <!--NeedCopy-->
有关权限的信息,请参阅所需的 Azure 权限。
接下来去哪里
- 如果您处于初始部署过程中,请参阅 创建计算机目录
- 有关 Azure 的特定信息,请参阅 创建 Microsoft Azure 目录