Citrix DaaS™

连接到 Microsoft Azure

创建和管理连接和资源 介绍了用于创建连接的向导。以下信息涵盖了特定于 Azure Resource Manager 云环境的详细信息。

注意:

在创建到 Microsoft Azure 的连接之前,您必须完成将 Azure 帐户设置为资源位置的设置。请参阅 Microsoft Azure Resource Manager 虚拟化环境

  • 创建服务主体和连接

  • 在创建连接之前,您必须设置连接用于访问 Azure 资源的服务主体。您可以通过两种方式创建连接:

  • 使用 Studio 同时创建服务主体和连接
  • 使用先前创建的服务主体创建连接

本部分向您展示如何完成以下任务:

注意事项

  • 在开始之前,请注意以下事项:

  • Citrix® 建议使用具有 Contributor(参与者)角色的服务主体。但是,请参阅最低权限部分以获取最低权限列表。
  • 首次创建连接时,Azure 会提示您授予必要的权限。对于将来的连接,您仍然需要进行身份验证,但 Azure 会记住您之前的同意,并且不会再次显示提示。
  • 首次通过 Azure 进行身份验证后,Citrix 拥有的多租户应用程序(ID: 08b70dc3-76c5-4611-ba7d-3312ba36cb2b)将代表经过身份验证的帐户被邀请到您的 Microsoft Entra ID。
  • 用于身份验证的帐户必须具有使用 Azure RBAC 在订阅中分配角色的权限。例如,订阅的所有者、基于角色的访问控制管理员或用户访问管理员。
  • 用于身份验证的帐户必须是订阅目录的成员。需要注意两种类型的帐户:“工作或学校”帐户和“个人 Microsoft 帐户”。有关详细信息,请参阅 CTX219211
  • 虽然您可以通过将现有 Microsoft 帐户添加为订阅目录的成员来使用它,但如果该用户之前被授予了对目录中某个资源的来宾访问权限,则可能会出现复杂情况。在这种情况下,他们可能在目录中有一个占位符条目,该条目未授予他们必要的权限,并且会返回错误。

  • 通过从目录中删除资源并明确地重新添加它们来纠正此问题。但是,请谨慎行事,因为它可能会对该帐户可以访问的其他资源产生意外影响。
  • 存在一个已知问题,即某些帐户在实际上是成员时被检测为目录来宾。此类配置通常发生在较旧的已建立的目录帐户中。解决方法:向目录添加一个帐户,该帐户将采用正确的成员身份值。
  • 资源组只是资源的容器,它们可以包含来自其自身区域以外的区域的资源。如果您期望资源组区域中显示的资源可用,这可能会令人困惑。
  • 确保您的网络和子网足够大,可以容纳所需的计算机数量。这需要一些远见,但 Microsoft 会根据地址空间容量提供指导,帮助您指定正确的值。

使用 Studio 创建服务主体和连接

重要:

此功能尚不适用于 Azure 中国订阅。

使用 Studio,您可以在单个工作流中同时创建服务主体和连接。服务主体授予连接访问 Azure 资源的权限。当您向 Azure 进行身份验证以创建服务主体时,应用程序会在 Azure 中注册。为注册的应用程序创建了一个密钥(称为 客户端密码应用程序密码)。注册的应用程序(在本例中为 连接)使用客户端密码向 Microsoft Entra ID 进行身份验证。

在开始之前,请确保您已满足以下先决条件:

  • 您的订阅的 Microsoft Entra 租户中有一个用户帐户。
  • 用于身份验证的帐户必须具有使用 Azure RBAC 在订阅中分配角色的权限。例如,订阅的所有者、基于角色的访问控制管理员或用户访问管理员。
  • 您具有用于身份验证的全局管理员、应用程序管理员或应用程序开发人员权限。创建主机连接后,可以撤销这些权限。有关角色的更多信息,请参阅 Microsoft Entra 内置角色

使用添加连接和资源向导同时创建服务主体和连接:

  1. 连接页面上,选择创建新连接Microsoft Azure 连接类型和您的 Azure 环境。

  2. 选择用于创建虚拟机的工具,然后选择下一步

  3. 连接详细信息页面上,选择应用程序客户端密码身份验证模式,然后创建服务主体并按如下方式设置连接名称:

    1. 输入您的 Azure 订阅 ID 和连接名称。输入订阅 ID 后,新建按钮将启用。

    注意:

    连接名称可以包含 1–64 个字符,并且不能只包含空格或字符 \/;:#.*?=<>|[]{}"'()'.

    1. 选择新建,然后输入 Microsoft Entra 帐户用户名和密码。
    2. 选择登录
    3. 选择接受以授予 Citrix DaaS™ 列出的权限。Azure 会创建一个服务主体,允许 Citrix DaaS 代表指定用户管理 Azure 资源。

    注意: > > Citrix DaaS 需要以下权限才能创建新的服务主体: > - 以您的身份访问 Azure 服务管理 - 读取和写入应用程序 - 登录并读取您的配置文件 - 维护对您已授予其访问权限的数据的访问

    1. 选择接受后,您将返回到连接详细信息页面。

注意:

成功向 Azure 进行身份验证后,新建使用现有按钮将消失。连接成功文本将显示一个绿色复选标记,表示已成功连接到您的 Azure 订阅。

1.  要通过 Citrix Cloud™ Connectors 将 API 请求路由到 Azure,请选中**通过 Citrix Cloud Connector 路由流量**复选框。当 Cloud Connector 没有直接 Internet 访问权限时,您可以选择**使用在 Citrix Cloud Connector 上配置的代理**以确保 Azure 连接通过 Citrix Cloud Connector 正常工作。

    或者,您可以使用 PowerShell 启用此功能。有关详细信息,请参阅[为 Azure 托管流量创建安全环境](/zh-cn/citrix-daas/install-configure/connections/connection-azure-resource-manager#create-a-secure-environment-for-azure-managed-traffic)。

    > **注意:**
    >
    > 仅当您的部署中有活动的 Citrix Cloud Connector 时,此选项才可用。目前,Connector 设备不支持此功能。

1.  选择**下一步**。

注意: > > 必须成功向 Azure 进行身份验证并同意授予所需的权限后,才能继续到下一页。

  1. 按如下方式配置连接资源:

    • 在“区域”页面上,选择一个区域。
    • 在“网络”页面上,执行以下操作:
      • 键入一个 1 到 64 个字符的资源名称,以帮助识别区域和网络组合。资源名称不能只包含空格或字符 \/;:#.*?=<>|[]{}"'()'
      • 选择一个虚拟网络/资源组对。(如果存在多个同名虚拟网络,将网络名称与资源组配对可提供唯一组合。)如果您在上一页选择的区域没有任何虚拟网络,请返回该页面并选择一个具有虚拟网络的区域。
  2. 在“摘要”页面上,查看设置摘要,然后选择“完成”以完成设置。

查看应用程序 ID

-  创建连接后,您可以查看该连接用于访问 Azure 资源的应用程序 ID。

-  在“**连接和资源**”列表中,选择连接以查看详细信息。“**详细信息**”选项卡显示应用程序 ID。

-  ![“添加连接和资源”页面上的应用程序 ID](/en-us/citrix-daas/media/application-id-console-new.png)

使用 PowerShell 创建服务主体

要使用 PowerShell 创建服务主体,请连接到您的 Azure Resource Manager 订阅,并使用以下部分中提供的 PowerShell cmdlet。

请确保您已准备好以下各项:

-  **SubscriptionId:** 用于预配 VDA 的订阅的 Azure Resource Manager `SubscriptionID`。
-  **ActiveDirectoryID:** 您在 Microsoft Entra ID 中注册的应用程序的租户 ID。
-  **ApplicationName:** 要在 Microsoft Entra ID 中创建的应用程序的名称。

-  详细步骤如下:

-  1.  连接到您的 Azure Resource Manager 订阅。

`Connect-AzAccount`

-  1.  选择要在其中创建服务主体的 Azure Resource Manager 订阅。

   -  `Get-AzSubscription -SubscriptionId $subscriptionId | Select-AzSubscription`

   -  1.  在您的 AD 租户中创建应用程序。

`$AzureADApplication = New-AzADApplication -DisplayName $ApplicationName`

   -  1.  创建服务主体。

   -  `New-AzADServicePrincipal -ApplicationId $AzureADApplication.AppId`

   -  1.  为服务主体分配角色。

`New-AzRoleAssignment -RoleDefinitionName Contributor -ServicePrincipalName $AzureADApplication.AppId –scope /subscriptions/$SubscriptionId` Property

   -  1.  从 PowerShell 控制台的输出窗口中,记下 ApplicationId。在创建主机连接时提供该 ID。

在 Azure 中获取应用程序机密

使用现有服务主体创建连接,您必须首先在 Azure 门户中获取服务主体的应用程序 ID 和机密。

-  详细步骤如下:

    -  1.  从 Studio 或使用 PowerShell 获取 **应用程序 ID**。
    -  1.  登录 Azure 门户。
    1. 在 Azure 中,选择 Microsoft Entra ID
    1. 在 Microsoft Entra ID 的应用注册中,选择您的应用程序。
    1. 转到证书和机密
  1. 单击客户端机密

Azure 门户中的应用程序机密

使用现有服务主体创建连接

如果您已有服务主体,则可以使用它通过 Studio 创建连接。

  • 请确保您已准备好以下各项:

  • SubscriptionId
  • ActiveDirectoryID(租户 ID)
  • 应用程序 ID
  • 应用程序机密 有关详细信息,请参阅获取应用程序机密

  • 机密过期日期

详细步骤如下:

  • 添加连接和资源向导中:
  1. 连接页面上,选择创建新连接Microsoft Azure 连接类型和您的 Azure 环境。
    1. 选择用于创建虚拟机的工具,然后选择下一步
  1. 连接详细信息页面上,选择应用程序客户端机密身份验证模式,然后输入您的 Azure 订阅 ID 和连接名称。

    注意:

    连接名称可包含 1–64 个字符,且不能仅包含空格或字符 \/;:#.*?=<>|[]{}"'()'`。

  2. 选择使用现有。在现有服务主体详细信息窗口中,输入现有服务主体的以下设置。输入详细信息后,保存按钮将启用。选择保存。在提供有效详细信息之前,您无法继续操作。

    • 订阅 ID。输入您的 Azure 订阅 ID。要获取订阅 ID,请登录 Azure 门户并导航到订阅 > 概述
    • Active Directory ID(租户 ID)。输入您在 Microsoft Entra ID 中注册的应用程序的目录(租户)ID。
    • 应用程序 ID。输入您在 Microsoft Entra ID 中注册的应用程序的应用程序(客户端)ID。
    • 应用程序机密。输入机密密钥(客户端机密)。注册的应用程序使用该密钥向 Microsoft Entra ID 进行身份验证。建议您定期更改密钥以确保安全。请务必保存该密钥,因为以后无法检索该密钥。
    • 机密过期日期。输入应用程序机密过期后的日期。在机密密钥过期前 14 天,控制台上会收到警报。但是,如果机密密钥过期,您会收到错误。

      注意:

      出于安全考虑,过期期限不能超过两年。

    • 身份验证 URL。此字段会自动填充且不可编辑。
    • 管理 URL。此字段会自动填充且不可编辑。
    • 存储后缀。此字段会自动填充且不可编辑。
    • 用于上传或下载磁盘或快照的 Azure Blob 存储终结点。此字段会自动填充且不可编辑。
    • Key Vault 服务。此字段会自动填充且不可编辑。
    • 服务总线后缀。此字段会自动填充且不可编辑。

      需要在 Azure 中创建 MCS 目录,才能访问以下终结点。访问这些终结点可优化您的网络与 Azure 门户及其服务之间的连接。

    • 身份验证 URL:https://login.microsoftonline.com
    • 管理 URL:https://management.azure.com。这是 Azure Resource Manager 提供程序 API 的请求 URL。管理终结点取决于环境。例如,对于 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}
  3. 选择“保存”后,您将返回到“连接详细信息”页面。选择“下一步”以继续到下一页。

  4. 按如下方式配置连接的资源:

    • 在“区域”页面上,选择一个区域。
    • 在“网络”页面上,执行以下操作:
      • 键入 1–64 个字符的资源名称,以帮助识别区域和网络组合。资源名称不能仅包含空格或字符 \/;:#.\*?=<>|\[]{}\"'\()'
      • 选择一个虚拟网络/资源组对。(如果您有多个同名虚拟网络,将网络名称与资源组配对可提供唯一的组合。)如果您在上一页选择的区域没有任何虚拟网络,请返回该页面并选择一个具有虚拟网络的区域。

Property

  1. 在“摘要”页面上,查看设置摘要,然后选择“完成”以完成设置。

管理服务主体和连接

-  本节详细介绍了如何管理服务主体和连接:

-  [配置 Azure 限制设置](#configure-azure-throttling-settings)
    -  [管理现有托管连接的服务主体](#manage-service-principal-of-an-existing-hosting-connection)
    -  [在 Azure 中启用映像共享](#enable-image-sharing-in-azure)
    -  [使用 Studio 将共享租户添加到连接](#add-shared-tenants-to-a-connection-using-studio)
    -  [使用 PowerShell 实施映像共享](#implement-image-sharing-using-powershell)
    -  [为 Azure 托管流量创建安全环境](#create-a-secure-environment-for-azure-managed-traffic)
    -  [管理应用程序机密和机密过期日期](#manage-the-application-secret-and-secret-expiration-date)

配置 Azure 限制设置

Azure Resource Manager 会限制对订阅和租户的请求,根据定义的限制路由流量,并根据提供程序的特定需求进行调整。有关详细信息,请参阅 Microsoft 站点上的限制 Resource Manager 请求。订阅和租户存在限制,管理许多计算机可能会出现问题。例如,包含许多计算机的订阅可能会遇到与电源操作相关的性能问题。

提示:

有关详细信息,请参阅使用 Machine Creation Services 提高 Azure 性能

为帮助缓解这些问题,Citrix DaaS 允许您删除 MCS 内部限制,以使用 Azure 中更多可用的请求配额。

在大型订阅(例如,包含 1,000 个 VM 的订阅)中打开或关闭 VM 时,我们建议使用以下最佳设置:

-  绝对同时操作数:500
    -  每分钟最大新操作数:2000
    -  最大操作并发数:500

    -  使用 Studio 为给定主机连接配置 Azure 操作:

    -  1.  在 Studio 中,选择左侧窗格中的“**托管**”。
    -  1.  选择一个与 Azure 相关的连接以对其进行编辑。
  1. 在“编辑连接”向导中,选择“高级”。
  2. 在“高级”页面上,使用配置选项指定同时操作数和每分钟最大新操作数,以及任何其他连接选项。

Azure 限制

MCS 默认支持 500 个最大并发操作。或者,您可以使用远程 PowerShell SDK 设置最大并发操作数。

使用 PowerShell 属性 MaximumConcurrentProvisioningOperations 指定最大并发 Azure 预配操作数。使用此属性时,请考虑:

  • MaximumConcurrentProvisioningOperations 的默认值为 500。
  • 使用 PowerShell 命令 Set-item 配置 MaximumConcurrentProvisioningOperations 参数。

管理现有托管连接的服务主体

使用服务主体创建托管连接后,您可以选择编辑托管连接以使其具有:

  • 新的服务主体
    • 使用另一个现有服务主体
  1. 在 Studio 中,从左侧窗格中选择“托管”。
  2. 选择连接,然后在操作栏中选择“编辑连接”。
  3. 从左侧窗格中选择“连接属性”。
  4. 在显示的“连接属性”页面上,单击“编辑连接设置”。您现在可以选择创建新的服务主体或使用另一个现有服务主体。

编辑设置

    -  单击“**创建服务主体**”以创建新的服务主体。按照提示登录到您的 Microsoft Entra 用户帐户。Citrix 使用多租户应用程序 ID `08b70dc3-76c5-4611-ba7d-3312ba36cb2b` 为现有主机连接创建新的服务主体并授予适当的权限。
    -  单击“**使用现有**”以将另一个现有服务主体用于该托管连接。

在 Azure 中启用映像共享

创建或更新计算机目录时,您可以从不同的 Azure 租户和订阅中选择共享映像(通过 Azure 计算库共享)。要在租户内部或跨租户启用映像共享,您必须在 Azure 中进行必要的设置:

    -  [在租户内共享映像(跨订阅)](#share-images-within-a-tenant-across-subscriptions)
    -  [跨租户共享映像](#share-images-across-tenants)

在租户内共享映像(跨订阅)

要在 Azure 计算库中选择属于不同订阅的映像,必须与该订阅的服务主体 (SPN) 共享该映像。

例如,如果存在一个服务主体 (SPN 1),它在 Studio 中的配置如下:

服务主体:SPN 1

订阅:subscription 1

    -  租户:tenant 1

    -  映像位于不同的订阅中,它在 Studio 中的配置如下:

订阅:subscription 2

租户:tenant 1

如果您想将 subscription 2 中的映像与 subscription 1 (SPN 1) 共享,请转到 subscription 2,并将资源组与 SPN1 共享。

必须使用 Azure 基于角色的访问控制 (RBAC) 与另一个 SPN 共享映像。Azure RBAC 是用于管理对 Azure 资源访问的授权系统。有关 Azure RBAC 的详细信息,请参阅 Microsoft 文档 什么是 Azure 基于角色的访问控制 (Azure RBAC)。要授予访问权限,您需要以“参与者”角色在资源组范围为服务主体分配角色。要分配 Azure 角色,您必须具有 Microsoft.Authorization/roleAssignments/write 权限,例如“用户访问管理员”或“所有者”。有关与另一个 SPN 共享映像的详细信息,请参阅 Microsoft 文档 使用 Azure 门户分配 Azure 角色

跨租户共享映像

要使用 Azure Compute Gallery 跨租户共享映像,请创建或更新应用程序注册,并使用此应用程序创建托管连接。

例如,如果有两个租户(Tenant 1 和 Tenant 2),并且您想与 Tenant 1 共享映像库,则:

  1. 为 Tenant 1 创建应用程序注册。有关详细信息,请参阅 创建应用程序注册

  2. 通过使用浏览器请求登录,授予 Tenant 2 对应用程序的访问权限。将 Tenant2 ID 替换为 Tenant 1 的租户 ID。将 Application \(client) ID 替换为您创建的应用程序注册的应用程序 ID。完成替换后,将 URL 粘贴到浏览器中,然后按照登录提示登录到 Tenant 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-->
    

    有关详细信息,请参阅 授予 Tenant 2 访问权限

  3. 授予应用程序对 Tenant 2 资源组的访问权限。以 Tenant 2 身份登录,并授予应用程序注册对包含库映像的资源组的访问权限。有关详细信息,请参阅 跨租户验证请求

使用 Studio 将共享租户添加到连接

在 Studio 中创建或更新计算机目录时,您可以从不同的 Azure 租户和订阅中选择共享映像(通过 Azure Compute Gallery 共享)。此功能要求您为关联的主机连接提供共享租户和订阅信息。

注意:

确保您已在 Azure 中配置了必要的设置,以启用跨租户的映像共享。有关详细信息,请参阅 跨租户共享映像

完成连接的以下步骤:

  1. 在 Studio 中,选择左侧窗格中的 Hosting
  2. 选择连接,然后在操作栏中选择 Edit Connection

    共享租户

  3. Shared Tenants 中,执行以下操作:
    1. 提供与连接订阅关联的应用程序 ID 和应用程序密钥。DaaS 使用此信息向 Microsoft Entra ID 进行身份验证。
    2. 添加与连接订阅共享 Azure Compute Gallery 的租户和订阅。每个租户最多可以添加八个共享租户和八个订阅。
  4. 完成后,选择 Apply 以应用所做的更改并保持窗口打开,或者选择 OK 以应用更改并关闭窗口。

使用 PowerShell 实现映像共享

本节将指导您完成使用 PowerShell 共享映像的过程:

    -  [从不同的订阅中选择映像](#select-an-image-from-a-different-subscription)
    -  [使用共享租户 ID 更新托管连接自定义属性](#update-hosting-connection-custom-properties-with-shared-tenant-ids)
-  [从不同的租户中选择映像](#select-an-image-from-a-different-tenant)

从不同的订阅中选择映像

您可以在同一 Azure 租户中选择属于不同共享订阅的 Azure Compute Gallery 中的映像,以使用 PowerShell 命令创建和更新 MCS 目录。

  1. 在托管单元根文件夹中,Citrix 会创建一个名为 sharedsubscription 的新共享订阅文件夹。
  2. 列出租户中的所有共享订阅。

    
    Get-ChildItem -Path "XDhyp:\HostingUnits\azres\sharedsubscription.folder"
    
    <!--NeedCopy-->
    
  3. 选择一个共享订阅,然后列出该共享订阅的所有共享资源组。

    
    Get-ChildItem -Path "XDhyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription"
    
    <!--NeedCopy-->
    
  4. 选择一个资源组,然后列出该资源组的所有库。

    
    Get-ChildItem -Path "XDhyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription\ xyz.resourcegroup"
    
    <!--NeedCopy-->
    
  5. 选择一个库,然后列出该库的所有映像定义。

    
    Get-ChildItem -Path "XDhyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription\xyz.resourcegroup\testgallery.gallery"
    
    <!--NeedCopy-->
    
  6. 选择一个映像定义,然后列出该映像定义的所有映像版本。

    
    Get-ChildItem -Path "XDhyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription\xyz.resourcegroup\sigtestdef.imagedefinition"
    
    <!--NeedCopy-->
    
  7. 使用以下元素创建和更新 MCS 目录:

    -  资源组
    -  库
    -  库映像定义
    -  库映像版本
    

使用共享租户 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-->

注意:

您可以添加多个租户。每个租户可以有多个订阅。

从其他租户选择映像

    -  您可以在 Azure Compute Gallery 中选择属于其他 Azure 租户的映像,以使用 PowerShell 命令创建和更新 MCS 目录。

    -  1.  在托管单元根文件夹中,Citrix 会创建一个名为 `sharedsubscription` 的新共享订阅文件夹。
    -  1.  列出所有共享订阅。

Property

```

-  Get-ChildItem XDHyp:\HostingUnits\azres\sharedsubscription.folder

<!--NeedCopy--> ```

    -  1.  选择一个共享订阅,然后列出该共享订阅的所有共享资源组。

```

Get-ChildItem XDHyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription

<!--NeedCopy--> ```

-  1.  选择一个资源组,然后列出该资源组的所有库。

```

Get-ChildItem XDHyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription\ xyz.resourcegroup

<!--NeedCopy--> ```
  1. 选择一个库,然后列出该库的所有映像定义。

    
    Get-ChildItem XDHyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription\xyz.resourcegroup\efg.gallery
    
    <!--NeedCopy-->
    
  2. 选择一个映像定义,然后列出该映像定义的所有映像版本。

    
        +  Get-ChildItem XDHyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription\xyz.resourcegroup\efg.gallery\hij.imagedefinition
    
    <!--NeedCopy-->
    
    +  1.  使用以下元素创建和更新 MCS 目录:
    
    • 资源组
    • 库映像定义
    • 库映像版本

为 Azure 管理的流量创建安全环境

MCS 允许网络流量(从 Citrix Cloud 到 Azure 管理程序 的 API 调用)通过您环境中的 Cloud Connector 进行路由。此实现有助于您锁定 Azure 订阅,以允许来自特定 IP 地址的网络流量。为此,请在 CustomProperties 中添加 ProxyHypervisorTrafficThroughConnector。设置自定义属性后,您可以配置 Azure 策略以对 Azure 托管磁盘进行专用磁盘访问。

如果您配置 Azure 策略以自动为每个新磁盘创建磁盘访问权限以使用专用终结点,则不能同时使用相同的磁盘访问对象上传或下载超过五个磁盘或快照,这是 Azure 强制执行的。如果您在资源组级别配置 Azure 策略,此限制适用于每个计算机目录;如果您在订阅级别配置 Azure 策略,则适用于所有计算机目录。 如果您未配置 Azure 策略以自动为每个新磁盘创建磁盘访问权限以使用专用终结点,则不会强制执行五个并发操作的限制。

注意: > 目前,Connector Appliance 不支持此功能。有关此功能的 Azure 限制,请参阅使用 Azure 专用链接限制托管磁盘的导入/导出访问

启用代理

    +  要在主机连接上启用代理,请按如下方式设置自定义属性:

    +  1.  使用 Remote PowerShell SDK 打开 PowerShell 窗口。有关详细信息,请参阅 <https://docs.citrix.com/en-us/citrix-daas/sdk-api.html#citrix-virtual-apps-and-desktops-remote-powershell-sdk/>。
    +  1.  运行以下命令:

```

    +  Add-PSSnapin citrix*.
    +  cd XDHyp:\Connections\
dir

<!--NeedCopy--> ```
  1. 将连接中的 CustomProperties 复制到记事本,然后将属性设置 <Property xsi:type=\"StringProperty\" Name=\"ProxyHypervisorTrafficThroughConnector\" Value=\"True\" /> 附加到 CustomProperties 以启用代理。例如:

    
    <CustomProperties xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.citrix.com/2014/xd/machinecreation">
    <Property xsi:type="StringProperty" Name="SubscriptionId" Value="4991xxxx-2xxx-4xxx-8xxx-ff59a830xxxx" />
    <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="5cxxxxx-9xxx-4xxx-8xxx-dffe3efdxxxx" />
    <Property xsi:type="StringProperty" Name="ProxyHypervisorTrafficThroughConnector" Value="True" />
    </CustomProperties>
    
    <!--NeedCopy-->
    
    1. 在 PowerShell 窗口中,为修改后的自定义属性分配一个变量。例如:
    
     $customProperty = '<CustomProperties xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.citrix.com/2014/xd/machinecreation">
     <Property xsi:type="StringProperty" Name="SubscriptionId" Value="4991xxxx-2xxx-4xxx-8xxx-ff59a830xxxx" />
    
     -  <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="5cxxxxx-9xxx-4xxx-8xxx-dffe3efdxxxx" />
     <Property xsi:type="StringProperty" Name="ProxyHypervisorTrafficThroughConnector" Value="True" />
     </CustomProperties>'
    
     <!--NeedCopy-->
    
  1. 运行 \$cred = Get-Credential。如果出现提示,请提供连接凭据。凭据是 Azure 应用程序 ID 和密钥。
  2. 运行 Set-Item -PSPath XDHyp:\Connections\<Connection\_Name> -CustomProperties \$customProperty -username \$cred.username -Securepassword \$cred.password

    重要提示:

    如果您收到一条消息,指出 SubscriptionId 缺失,请将自定义属性中的所有双引号 (“) 替换为反引号后跟双引号 (`”)。例如:

    ```

    <CustomProperties xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance” xmlns="http://schemas.citrix.com/2014/xd/machinecreation”> <Property xsi:type="StringProperty” Name="SubscriptionId” Value="4991xxxx-2xxx-4xxx-8xxx-ff59a830xxxx” /> <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="5cxxxxx-9xxx-4xxx-8xxx-dffe3efdxxxx” /> <Property xsi:type="StringProperty” Name="ProxyHypervisorTrafficThroughConnector” Value="True” />

  • </CustomProperties>

    ```

  1. 运行 dir 以验证更新的 CustomProperties 设置。
  • 在 Citrix Cloud Connectors 上使用系统代理重定向 Azure API 流量的选项

  • 要通过非透明代理路由所有外部流量,请使用自定义属性 UseSystemProxyForHypervisorTrafficOnConnectors 配置主机连接。这会将 Citrix Cloud Connectors 上的 Azure API 互联网流量通过系统代理重定向。

  • 执行 启用代理 中概述的相同步骤,以使用自定义属性配置主机连接。但是,请确保将属性设置 <Property xsi:type="StringProperty" Name="UseSystemProxyForHypervisorTrafficOnConnectors" Value="True" /> 附加到 CustomProperties 以启用代理。

<Property xsi:type="StringProperty" Name="UseSystemProxyForHypervisorTrafficOnConnectors" Value="True" />

<!--NeedCopy-->

示例:


<CustomProperties xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.citrix.com/2014/xd/machinecreation">
<Property xsi:type="StringProperty" Name="SubscriptionId" Value="4991xxxx-2xxx-4xxx-8xxx-ff59a830xxxx" />
<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="5cxxxxx-9xxx-4xxx-8xxx-dffe3efdxxxx" />
<Property xsi:type="StringProperty" Name="ProxyHypervisorTrafficThroughConnector" Value="True" />
<Property xsi:type="StringProperty" Name="UseSystemProxyForHypervisorTrafficOnConnectors" Value="True" />
</CustomProperties>

<!--NeedCopy-->

注意:

设置此属性后,Citrix Cloud Connector 上 netsh winhttp 设置中配置的代理将用于流向云服务提供商的出站流量。

管理应用程序机密和机密过期日期

请务必在机密过期之前更改连接的应用程序机密。您将在机密密钥过期之前在 Studio 上收到警报。

在 Azure 中创建应用程序机密

您可以通过 Azure 门户为连接创建应用程序机密。

  1. 选择 Microsoft Entra ID
  2. 在 Microsoft Entra ID 中的应用注册中,选择您的应用程序。
  3. 转到证书和机密
  4. 单击客户端机密 > 新建客户端机密

    创建应用程序机密

  5. 提供机密描述并指定持续时间。完成后,选择添加

    注意:

        -  请务必保存客户端机密,因为以后无法检索它。
    
  6. 复制客户端机密值和过期日期。
  7. 在 Studio 中,编辑相应的连接,并将应用程序机密机密过期日期字段中的内容替换为您复制的值。

更改机密过期日期

您可以使用 Studio 添加或修改正在使用的应用程序机密的过期日期。

  1. 添加连接和资源向导中,右键单击某个连接,然后单击编辑连接
  2. 连接属性页面上,单击机密过期日期以添加或修改正在使用的应用程序机密的过期日期。

更改机密过期日期

使用 Azure 托管标识创建主机连接

您可以使用 Azure 托管标识创建到 Microsoft Azure Resource Manager 的主机连接。Azure 托管标识提供了一种安全且可扩展的方式来访问 Azure 服务,而无需管理凭据。此方法消除了与存储、轮换和管理机密相关的风险。

身份验证模式”有三个选项:

  • AppClientSecret
  • SystemAssignedManagedIdentity
  • UserAssignedManagedIdentity

开始之前

在使用 Azure 托管标识创建主机连接之前,必须执行以下步骤:

  1. 在 Azure VM 中安装 Citrix Cloud Connector™。
  2. 在该 Cloud Connector VM 上启用 Azure 托管标识。

    • 对于用户分配的托管标识:

      1. 在 Azure 门户上,创建用户分配的托管标识。有关信息,请参阅创建和分配用户分配的托管标识
      2. 将 Azure 角色分配给托管标识。请参阅所需的 Azure 权限
      3. 创建 Azure VM 作为 Cloud Connector,并将用户分配的标识添加到其中。
    • 对于系统分配的托管标识:

      1. 打开 Azure 门户并转到您的 VM。
      2. 在 VM 的设置中选择“标识”边栏选项卡。
      3. 系统分配选项卡下,将状态设置为
      4. 单击保存
      5. 授予所需的 Azure 权限

      注意:

      如果您在 Cloud Connector VM 上启用系统分配的托管标识并使用它创建主机连接,即使在 Cloud Connector VM 上禁用它之后,您仍然可以使用系统分配的托管标识创建主机连接。即使在标识被禁用 24 小时后,主机连接的创建也可能成功。发生这种情况是因为托管标识令牌由底层 Azure 基础结构缓存。有关详细信息,请参阅托管标识令牌是否已缓存?

使用 Studio 通过 Azure 托管标识创建主机连接

在“添加连接和资源”向导中:

  1. 连接页面上:
    1. 选择创建新连接、Microsoft Azure 连接类型和您的 Azure 环境。
    2. 选择用于创建虚拟机的工具,然后选择下一步
    1. 连接详细信息页面上,选择身份验证模式
    • 对于用户分配的托管标识,输入以下设置。输入详细信息后,选择下一步以继续到以下页面。在提供有效详细信息之前,您无法继续此页面。

      • 订阅 ID:输入您的 Azure 订阅 ID。要获取您的订阅 ID,请登录 Azure 门户并导航到订阅 > 概述
      • Active Directory ID(租户 ID):输入您在 Microsoft Entra ID 中注册的应用程序的目录(租户)ID。
      • 客户端 ID:输入您在 Azure 门户中创建的托管标识的客户端 ID。
      • 身份验证 URL:此字段会自动填充且不可编辑。
      • 管理 URL:此字段会自动填充且不可编辑。
      • 存储后缀:此字段会自动填充且不可编辑。
    • 对于系统分配的托管标识,输入以下设置。输入详细信息后,选择下一步以继续到以下页面。在提供有效详细信息之前,您无法继续此页面。

      • 订阅 ID:输入您的 Azure 订阅 ID。要获取您的订阅 ID,请登录 Azure 门户并导航到订阅 > 概述
      • Active Directory ID(租户 ID):输入您在 Microsoft Entra ID 中注册的应用程序的目录(租户)ID。
      • 身份验证 URL:此字段会自动填充且不可编辑。
      • 管理 URL:此字段会自动填充且不可编辑。
      • 存储后缀:此字段会自动填充且不可编辑。

使用 PowerShell 通过 Azure 托管标识创建主机连接

您可以使用新的自定义属性 AuthenticationMode 创建此主机连接。AuthenticationMode 具有三个选项:AppClientSecretSystemAssignedManagedIdentityUserAssignedManagedIdentity。以下是身份验证模式选项的说明:

-  `AppClientSecret`:这是默认值。这需要应用程序 ID 和密钥。
-  `UserAssignedManagedIdentity`:这需要通过用户名提供客户端 ID。
-  `SystemAssignedManagedIdentity`:这不需要任何输入。即使您提供了客户端 ID,它也将被忽略。

Property

注意:

使用 PowerShell 时,参数 ProxyHypervisorTrafficThroughConnector 必须为 true 才能使用托管标识。

  1. 打开 PowerShell 窗口。
  2. 运行 asnp citrix* 以加载 Citrix 特定的 PowerShell 模块。
  3. 创建主机连接。例如:

    • 对于用户分配的托管标识:

      
       $UserName = "should be the Client ID of the user-assigned managed identity"
       $Password = "It can be any string.Not used"
      
       $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="' + $SubscriptionId + '" />'`
       +  '<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="' + $TenantId + '" />'`
       +  '<Property xsi:type="StringProperty" Name="ProxyHypervisorTrafficThroughConnector" Value="True" />'`
       +  '<Property xsi:type="StringProperty" Name="AuthenticationMode" Value="UserAssignedManagedIdentity" />'`
       +  '</CustomProperties>'
      
       New-Item -ConnectionType "Custom" `
       -CustomProperties $CustomProperties `
       -HypervisorAddress @($HypervisorAddress) `
       -Path @("XDHyp:\Connections\$($ConnectionName)") `
       -Metadata $Metadata `
       -Persist `
       -PluginId "AzureRmFactory" `
       -Scope @() `
       -Password $Password `
       -UserName $UserName `
       -ZoneUid $zoneUid
      
       <!--NeedCopy-->
      
    • 对于系统分配的托管标识:

      
       $UserName = "It can be any string. Not used"
       $Password = "It can be any string. Not used"
       $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="' + $SubscriptionId + '" />'`
       +  '<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="' + $TenantId + '" />'`
       +  '<Property xsi:type="StringProperty" Name="ProxyHypervisorTrafficThroughConnector" Value="True" />'`
       +  '<Property xsi:type="StringProperty" Name="AuthenticationMode" Value="SystemAssignedManagedIdentity" />'`
       +  '</CustomProperties>'
      
       New-Item -ConnectionType "Custom" `
       -CustomProperties $CustomProperties `
       -HypervisorAddress @($HypervisorAddress) `
       -Path @("XDHyp:\Connections\$($ConnectionName)") `
       -Metadata $Metadata `
       -Persist `
       -PluginId "AzureRmFactory" `
       -Scope @() `
       -Password $Password `
       -UserName $UserName `
       -ZoneUid $zoneUid
      
       <!--NeedCopy-->
      

管理现有托管连接的 Azure 托管标识

使用 Studio

创建托管连接后,您可以选择更新现有托管连接以包含:

  • 系统分配的托管标识
  • 用户分配的托管标识
  • 新的用户分配的托管标识
  1. 在 Studio 中,从左侧窗格中选择托管
  2. 选择连接,然后在操作栏中选择编辑连接
  3. 在出现的连接属性页面上,单击编辑身份验证模式。您现在可以选择更新身份验证模式。

    • 单击用户分配的托管标识以将用户分配的托管标识用于该托管连接。按照提示填写客户端 ID。
    • 单击系统分配的托管标识以将系统分配的托管标识用于该托管连接。

使用 PowerShell

您还可以使用 PowerShell 更新现有主机连接,以使用系统分配的标识或用户分配的托管标识。例如,运行以下 PowerShell 命令:

  1. 打开 PowerShell 窗口。
  2. 运行 asnp citrix* 以加载 Citrix 特定的 PowerShell 模块。
  3. 运行以下命令:

    
    $connName = "ConnectionName"
    $conn = get-item XDHyp:\Connections\$connName
    $conn.CustomProperties
    
    <!--NeedCopy-->
    
  4. ProxyHypervisorTrafficThroughConnector 更改为 True,并添加自定义属性 AuthenticationMode,将其设置为 SystemAssignedManagedIdentityUserAssignedManagedIdentity。例如:

    ```
    
    -  $customProps = '<CustomProperties xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.citrix.com/2014/xd/machinecreation"><Property xsi:type="StringProperty" Name="SubscriptionId" Value="subscriptionId" /><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="tenantId" /><Property xsi:type="StringProperty" Name="AzureAdDeviceManagement" Value="false" /><Property xsi:type="StringProperty" Name="ProxyHypervisorTrafficThroughConnector" Value="true" /><Property xsi:type="StringProperty" Name="AuthenticationMode" Value="SystemAssignedManagedIdentity" /></CustomProperties>'
    
      <!--NeedCopy--> ```
    
  5. 运行 $cred = Get-Credential。在此处输入任何内容。

  6. 运行 Set-Item -PSPath XDHyp:\Connections\$connName -CustomProperties $CustomProperties -username $cred.username -Securepassword $cred.password

Azure 扩展区域

Azure 扩展区域是现有 Azure 区域的小型扩展,使组织能够将工作负载运行得更靠近其用户,从而提高性能和合规性。Azure 上的 MCS 现在支持在扩展区域中预配和电源管理 VM。

要了解有关 Azure 扩展区域的更多信息,请参阅 Microsoft 文档:Azure 扩展区域文档

用例

此功能适用于持久性和非持久性目录:

  • 仅电源管理的 VM:您可以将现有的扩展区域 VM 导入到仅电源管理的目录中,并使用 Citrix MCS 对其进行电源管理。

  • MCS 预配的 VM:您可以将新的 VM 预配到扩展区域中,并使用 MCS 对其进行管理。此功能还包括对映像管理工作流的支持。

限制

目前使用 Azure 扩展区域存在一些限制。其中许多限制是由于当前的 Azure 约束造成的:

  • 不支持专用主机。
  • 不支持容量预留。
  • 不支持邻近放置组。
  • 不支持 Spot VM。
  • 扩展区域中不支持可用区域。
  • 仅支持 StandardSSD_LRSPremium_LRS 存储类型。
  • 目前,您无法使用 UseSharedImageGallery 功能将主映像保存到扩展区域中的 Azure 计算库(或共享映像库)中。因此,也不支持临时 OS 磁盘。
  • 如果您使用 Azure 计算库映像版本作为主映像,请确保在尝试使用它之前,复制已在扩展区域中完全完成。在复制完成之前尝试使用映像版本可能会导致部署失败。

先决条件

在使用扩展区域之前,请确保已完成以下先决条件步骤:

  1. 准备 Citrix 资源:

    1. 在您的扩展区域中创建虚拟网络。
    2. 根据需要创建主映像和快照。

所需权限

要在扩展区域中创建目录,您的服务主体必须具有以下权限:Microsoft.EdgeZones/extendedZones/read

有关最低所需权限的更多信息,请参阅最低权限

配置步骤

  1. 在扩展区域中创建托管单元

    扩展区域使用 .extendedzone 类型,并在 Citrix MCS 清单中与区域一起列出。要预配到扩展区域中,您必须创建与该扩展区域关联的新托管单元。

    示例:要在洛杉矶扩展区域中创建托管单元

    
    $RootPath = "XDHyp:\Connections\MyConnectionName\Los Angeles.extendedzone"
    
    $NetworkPath = "XDHyp:\Connections\MyConnectionName\Los Angeles.extendedzone\virtualprivatecloud.folder\MyResourceGroup.resourcegroup\MyExtendedZoneNetwork.virtualprivatecloud\MyExtendedZoneSubnet.network"
    
    $HostingUnitPath = "XDHyp:\HostingUnits\MyHostingUnitName"
    
    New-Item -HypervisorConnectionName MyConnectionName -NetworkPath @($NetworkPath) -Path @($HostingUnitPath) -RootPath $RootPath -StoragePath @()
    
    <!--NeedCopy-->
    
  2. 在扩展区域中创建 MCS 目录

    创建托管单元后,使用 Studio 或 PowerShell 继续创建目录。确保您的目录引用扩展区域托管单元。

故障排除

如果遇到问题,请检查以下各项:

  1. 确保您的订阅已注册扩展区域。
    1. 确认您的订阅已在 Microsoft.EdgeZones 资源提供程序中注册。
    2. 确保每个扩展区域都已单独注册。
  2. 验证您的服务主体是否具有新权限。

    1. 您的服务主体必须具有 Microsoft.EdgeZones/extendedZones/read 权限。

如果缺少注册或权限,扩展区域中的清单项可能会显示为“未知扩展区域”。

注意:

如果在父区域中使用来自扩展区域的主映像创建目录,则仍需要扩展区域的注册和权限。

使用预创建的网络安全组

创建一个“全部拒绝”网络安全组用于映像准备,而不是请求 Citrix 创建和修改 NSG。使用 PowerShell 命令 Set-Item 编辑托管单元的自定义属性,以包含参数 NsgForPreparation 来提供“全部拒绝”网络安全组。

先决条件

为服务主体配置以下所需权限:

  • Microsoft.Network/networkSecurityGroups/join/action:将网络安全组关联到子网或网络接口
  • Microsoft.Network/networkSecurityGroups/read:获取网络安全组
  • Microsoft.Network/networkSecurityGroups/securityRules/read:获取规则

添加预创建的“全部拒绝”网络安全组

要添加预创建的“全部拒绝”网络安全组,请在托管单元上按如下方式设置自定义属性:

  1. 使用远程 PowerShell SDK 打开 PowerShell 窗口。
  2. 运行以下命令:

    
    Add-PSSnapin citrix*.
    cd XDHyp:\HostingUnits\
    Dir
    
    <!--NeedCopy-->
    
  3. 选择一个托管单元以检索详细信息:

    
    Get-Item "XDHyp:\HostingUnits\<hostingunitname>"
    
    <!--NeedCopy-->
    
  4. 将 CustomProperties 复制到记事本,并追加属性设置 <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-->
    
  5. 在 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-->
    
  6. 运行 $cred = Get-Credential。如果出现提示,请提供连接凭据。凭据是 Azure 应用程序 ID 和密钥。
  7. 运行以下命令。

    
    Set-Item -PSPath XDHyp:\HostingUnits\<hostingunitname> -CustomProperties $customProperty -username $cred.username -Securepassword $cred.password
    
    <!--NeedCopy-->
    

    重要提示:

    如果您收到一条消息,指出 SubscriptionId 缺失,请将自定义属性中的所有双引号 (“) 替换为反引号后跟双引号 (`”)。

  8. 运行 dir 以验证更新的 CustomProperties 设置。

注意:

更新需要一分钟以上才能反映。

检索网络安全组详细信息

要检索网络安全组详细信息,首先检索包含网络安全组的资源组,然后根据资源组名称检索网络安全组。

  1. 检索包含网络安全组的资源组。例如:

    
    Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 5 -AdditionalDataFilter '{"containedresourcetypes": ["networksecuritygroup"]}'
    
    <!--NeedCopy-->
    
  2. 根据资源组名称检索网络安全组。例如:

    
    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”]}’

    ```

  • 筛选带有 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 所需的最低权限一般权限

最低权限

最低权限提供更好的安全控制。但是,如果仅授予最低权限,则需要额外权限的新功能将无法运行。本节按操作列出了最低权限。

创建主机连接

使用从 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",
"Microsoft.EdgeZones/extendedZones/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",
"Microsoft.Compute/capacityReservationGroups/deploy/action"

<!--NeedCopy-->

根据以下功能的最低权限,您需要以下额外权限:

  • 如果主映像是与托管连接位于同一区域的存储帐户中的 VHD:

    
     "Microsoft.Storage/storageAccounts/read",
     "Microsoft.Storage/storageAccounts/listKeys/action",
    
     <!--NeedCopy-->
    
  • 如果主映像是来自 Azure 计算库(以前称为共享映像库)的 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-->

成本管理

以下是检索 VM 定价所需的最低权限:


"Microsoft.Consumption/pricesheets/read"

<!--NeedCopy-->

以下是检索 VM 成本所需的最低权限:


"Microsoft.CostManagement/query/read"

<!--NeedCopy-->

注意:

要查看 Azure 计算机目录的成本洞察选项卡,您必须拥有成本管理 > 管理 > 读取成本权限(云管理员的默认权限)。有关成本洞察选项卡的信息,请参阅查看目录详细信息

常规权限

参与者角色拥有管理所有资源的完全访问权限。这组权限不会阻止您获取新功能。

以下权限集提供了最佳的未来兼容性,尽管它包含的权限比当前功能集所需的权限更多:


"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.Compute/capacityReservationGroups/capacityReservations/read",
"Microsoft.Consumption/pricesheets/read",
"Microsoft.Network/networkSecurityGroups/join/action",
"Microsoft.Network/networkSecurityGroups/read",
"Microsoft.Network/networkSecurityGroups/securityRules/read",
"Microsoft.Compute/capacityReservationGroups/deploy/action",
"Microsoft.EdgeZones/extendedZones/read"

<!--NeedCopy-->

配置所需的 Azure 主机连接权限

您可以使用 ARM 模板轻松配置服务主体或 Azure 中与主机连接关联的用户帐户执行所有 MCS 操作所需的全部最低权限。此 ARM 模板可自动执行以下操作:

  • 创建具有操作所需最低权限的 Azure 角色。
  • 将此角色分配给订阅级别上的现有 Azure 服务主体。

您可以使用 Azure 门户或 PowerShell 命令部署此 ARM 模板。有关详细信息,请参阅适用于 Citrix Virtual Apps and Desktops 操作的 ARM 模板

验证主机连接上的权限

您可以验证主机连接上的权限,以执行与创建和管理 MCS 计算机目录相关的任务。此实施可帮助您提前找出不同场景(例如创建、删除和更新 VM、VM 的电源管理)所需的缺失权限,从而避免在关键时刻受阻。

您可以使用 PowerShell 命令 Test-HypHypervisorConnection 验证主机连接上的权限。该命令的结果将捕获为一个列表,其中列表中的每个项目都分为三个部分。

  • 类别:用户可以执行的用于创建和管理 MCS 计算机目录的操作或任务。
  • 纠正措施:管理员必须执行的步骤,以解决用户缺失权限的差异。
  • 缺失权限:某个类别缺失权限的列表。

要验证权限,请执行以下操作:

  1. 创建到 Azure 的主机连接。
  2. 从 Delivery Controller™ 主机打开 PowerShell 窗口。
  3. 运行 asnp citrix* 以加载 Citrix 特定的 PowerShell 模块。
  4. 运行以下命令以验证您是否具有测试连接所需的权限。

    
    Test-HypHypervisorConnection -LiteralPath "XDHyp:\Connections\AzureCon"
    
    <!--NeedCopy-->
    

    SPN 所需的角色级别权限:

    • Microsoft.Authorization/roleDefinitions/read(在订阅级别或资源组级别,如果提供了资源组)
    • Microsoft.Authorization/roleAssignments/read(在订阅级别或资源组级别,如果提供了资源组)

    SPN 所需的 API 级别权限:

    Microsoft.Graph:

    • Application.Read.All
    • Directory.Read.All
    • ServicePrincipalEndpoint.Read.All
  5. 添加查找权限所需的缺失权限后,运行以下命令以验证您是否具有各个类别的权限。

    示例:

    要在订阅级别测试连接,需要更高级别的授权:

    
    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 权限

后续步骤

更多信息