连接到微软 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.

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

注意:

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

创建服务主体账户和连接配置

在创建连接之前,您必须设置连接用于访问 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 内置角色

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

  1. 连接页面上,选择创建新连接Microsoft Azure连接类型和您的 Azure 环境。
  2. 选择用于创建虚拟机的工具,然后选择下一步
  3. 连接详细信息页面上,输入您的 Azure 订阅 ID 和连接名称。输入订阅 ID 后,创建新按钮将启用。

    注意:

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

  4. 选择创建新,然后输入 Azure Active Directory 帐户用户名和密码。
  5. 选择登录
  6. 选择接受,以授予 Citrix Virtual Apps and Desktops™ 列出的权限。该产品会创建一个服务主体,允许它代表指定用户管理 Azure 资源。
  7. 选择接受后,您将返回向导中的连接页面。

    注意:

    成功通过 Azure 身份验证后,创建新使用现有按钮将消失。此时将显示连接成功文本和绿色复选标记,表示已成功连接到您的 Azure 订阅。

  8. 在“连接详细信息”页面上,选择“下一步”。

    注意:

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

  9. 配置连接所需的资源。这些资源包括区域和网络两部分。

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

查看应用程序 ID

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

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

使用 PowerShell 创建服务主体

要使用 PowerShell 创建服务主体,请连接到您的 Azure 资源管理器订阅,并使用以下部分中提供的 PowerShell cmdlet 命令。

确保已准备好以下各项:

  • SubscriptionId:您要预配 VDA 的订阅所对应的 Azure 资源管理器 SubscriptionID
  • ActiveDirectoryID:您在 Azure 活动目录中注册的应用程序的租户 ID。
  • 应用程序名称: 要在 Azure AD 中创建的应用程序的名称。

详细的步骤如下所示:

连接到您的 Azure 资源管理器订阅。

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

    Get-AzSubscription -SubscriptionId $subscriptionId | Select-AzSubscription

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

    $AzureADApplication = New-AzADApplication -DisplayName $ApplicationName

  3. 创建服务主体。

    New-AzADServicePrincipal -ApplicationId $AzureADApplication.AppId

  4. 为服务主体分配角色。

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

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

在 Azure 中获取应用程序机密

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

详细的步骤如下所示:

  1. 从 Web 工作室 或使用 PowerShell 获取应用程序 ID
  2. 登录到 Azure 门户。
  3. 在 Azure 中,选择 Azure 活动目录
  4. 在 Azure AD 的应用注册中,选择您的应用程序。
  5. 转到证书和机密
  6. 单击客户端机密

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

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

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

  • 订阅 ID
  • 活动目录 ID(租户 ID)
  • 应用程序 ID
  • 应用程序机密

    有关详细信息,请参阅获取应用程序机密

  • 机密过期日期

详细的步骤如下所示:

添加连接和资源向导中:

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

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

  3. 连接详细信息页面上,输入您的 Azure 订阅 ID 和连接名称。

    注意:

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

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

    • 订阅 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
      • Management URL: https://management.azure.com. This is a request URL for Azure Resource Manager provider APIs. The endpoint for management depends on the environment. For example, for Azure Global, it is https://management.azure.com, and for Azure US Government, it is 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}
  5. 选择 保存 后,您将返回到 连接详细信息 页面。选择 下一步 以继续到下一页。
  6. 您需要为该连接配置相关资源。这些资源主要包括区域和网络。

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

对服务主体和连接进行管理

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

配置 Azure 限制设置

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

提示:

有关详细信息,请参阅 使用机器创建服务提高 Azure 性能

为帮助缓解这些问题,您可以移除 MCS 内部限制,以使用更多来自 Azure 的可用请求配额。

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

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

请使用 Web Studio 为指定的 Azure 连接配置 Azure 操作:

  1. 在 Web Studio 中,在左侧窗格中选择托管
  2. 请选择连接。
  3. 编辑连接向导中,选择高级
  4. 高级页面上,使用配置选项指定并发操作数和每分钟最大新操作数,以及任何其他连接选项。

微软 Azure 节流

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. 为租户 1 创建应用程序注册。有关更多信息,请参阅 创建应用程序注册

  2. 通过使用浏览器请求登录,授予租户 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 访问权限

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

要使用 PowerShell 命令从不同租户的映像创建目录,请执行以下操作:

  1. 使用共享租户 ID 更新托管连接自定义属性
  2. 从不同租户中选择映像

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

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

注意:

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

对于连接,请完成以下步骤:

  1. 在 Web Studio 中,在左侧窗格中选择托管
  2. 选择连接,然后在操作栏中选择编辑连接

    共享租户

  3. 共享租户中,执行以下操作:

    • 提供与连接订阅关联的应用程序 ID 和应用程序密钥。Citrix Virtual Apps and Desktops 使用此信息向 Azure AD 进行身份验证。
    • 添加与连接订阅共享 Azure 计算库的租户和订阅。每个租户最多可以添加 8 个共享租户和 8 个订阅。
  4. 完成后,选择应用以应用所做的更改并保持窗口打开,或者选择确定以应用更改并关闭窗口。

使用 PowerShell 实现映像共享

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

选择一个来自不同订阅的映像

您可以在同一 Azure 租户中选择属于不同共享订阅的 Azure 计算库中的映像,以使用 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 目录:

    • 资源群组
    • 图库映像定义
    • 图库映像版本

    有关如何使用远程 PowerShell SDK 创建目录的信息,请参阅 https://developer-docs.citrix.com/projects/citrix-virtual-apps-desktops-sdk/en/latest/creating-a-catalog/

使用共享租户 ID 更新托管连接自定义属性

使用 Set-Item 更新托管连接自定义属性,其中包含共享租户 ID 和订阅 ID。在 CustomProperties 中添加属性 SharedTenantsShared 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 目录。

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

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

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

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

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

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

    • 资源群组
    • 图库映像定义
    • 图库映像版本

    有关如何使用远程 PowerShell SDK 创建目录的信息,请参阅 https://developer-docs.citrix.com/projects/citrix-virtual-apps-desktops-sdk/en/latest/creating-a-catalog/

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

请务必在机密过期之前更改连接的应用程序机密。在机密密钥过期前 14 天,您会在托管节点中的特定主机连接上看到一个警告图标。但是,如果机密密钥过期,您将收到错误。

在 Azure 中创建应用程序机密

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

  1. 选择 Azure 活动目录
  2. 在 Azure AD 的应用注册中,选择您的应用程序。
  3. 转到证书和机密
  4. 单击客户端机密 > 新建客户端机密
  5. 提供机密的描述并指定持续时间。完成后,选择添加

    注意:

    请务必保存客户端机密,因为以后无法检索它。

  6. 复制客户端密钥值和过期日期。
  7. 在 Web Studio 中,编辑相应的连接,并将 应用程序密钥密钥过期日期 字段中的内容替换为您复制的值。

修改密钥的过期日期

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

注意:

在密钥过期前 14 天,您会在 托管 节点中特定主机连接上看到一个警告图标。但是,如果密钥过期,您将收到错误。

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

使用预先创建的网络安全组

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

先决条件

请配置服务主体所需的各项权限,具体如下:

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

添加预创建的 Deny-All 网络安全组

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

  1. 使用远程 PowerShell 软件开发工具包打开 PowerShell 窗口。
  2. 运行以下命令:

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

    Get-Item "XDHyp:\HostingUnits\<hostingunitname>"
    <!--NeedCopy-->
    
  4. 将自定义属性复制到记事本中,并添加属性设置 <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"]}'
     <!--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 主权气隙云环境适用于必须位于隔离网络域中的绝密工作负载。在创建主机连接时,您可以使用自定义属性 DisableInstanceDiscovery 连接到 Azure 主权气隙云环境。

<Property xsi:type="StringProperty" Name="DisableInstanceDiscovery" Value="true" />
<!--NeedCopy-->

要了解如何创建 Azure 主机连接,请参阅 Create-HostingConnection.ps1 以获取更多信息。

所需的 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-->
    
  • 如果您使用带客户管理密钥 (CMK) 的服务器端加密 (SSE):

     "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-->

在 Azure 非机密环境中验证主机连接

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

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

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

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

  1. 创建到 Azure 的主机连接。
  2. 从交付控制器™ 主机打开 PowerShell 窗口。
  3. 请运行 asnp citrix* 命令,以便加载 Citrix 专用的 PowerShell 模块。
  4. 运行以下命令以验证您是否具有测试连接所需的权限。

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

    SPN 所需的角色级别权限:

    • Microsoft.Authorization/roleDefinitions/read (此权限在订阅级别生效,或者在提供了资源组的情况下,此权限在资源组级别生效。)
    • Microsoft.Authorization/roleAssignments/read ( at subscription level or the resource group level if resource group is provided)

    SPN 所需的 API 级别权限:

    微软图形:

    • 应用程序.读取.所有
    • 目录.读取.所有
    • 服务主体终结点.读取.所有
  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 权限

在 Azure 密钥环境中验证主机连接

您可以使用 PowerShell 命令 Test-HypHypervisorConnection 验证主机连接在 Azure 秘密环境中是否具有所需的权限。

但是,要成功获取验证结果,请创建或更新现有主机连接以使其具有自定义属性 AuthenticationObjectId。此属性存储与托管连接绑定的服务主体的对象 ID。

注意:

从 Azure 门户获取服务主体的对象 ID。请勿使用应用程序的 ID。

Create or update a host connection to include AuthenticationObjectId

使用 New-Item 创建主机连接并将 AuthenticationObjectId 添加为自定义属性。示例:

New-Item -ConnectionType 'Azure' -HypervisorAddress @('http://hypervisorhost1.example.com','http://hypervisorhost2.example.com')`
    -LoggingId $loggingId -Path @('XDHyp:\\Connections\\Example') -Persist -Scope @() `
    -Password 'Password' -UserName 'root' -CustomProperties <Property xsi:type="StringProperty" Name="AuthenticationObjectId" Value="Object ID of the service principal"/>
<!--NeedCopy-->

使用 Set-Item 更新现有主机连接以添加 AuthenticationObjectId 作为自定义属性。执行此操作的步骤如下:

  1. 使用远程 PowerShell 软件开发工具包打开 PowerShell 窗口。
  2. 运行以下命令:

    Add-PSSnapin citrix*.
    cd XDHyp:\Connections\
    dir
    <!--NeedCopy-->
    
  3. 将连接中的 CustomProperties 复制到记事本,并将属性设置 <Property xsi:type="StringProperty" Name="AuthenticationObjectId" Value="Object ID of the service principal"/> 附加到 CustomProperties
  4. 在 PowerShell 窗口中,为修改后的自定义属性分配一个变量。
  5. 运行 $cred = Get-Credential。如果出现提示,请提供连接凭据。凭据是 Azure 应用程序 ID 和密钥。
  6. 运行 Set-Item -PSPath XDHyp:\Connections\<Connection_Name> -CustomProperties $customProperty -username $cred.username -Securepassword $cred.password
  7. 运行 dir 以验证更新的 CustomProperties 设置。

    Set-Item -PSPath XDHyp:\Connections\$connName -CustomProperties <Property xsi:type="StringProperty" Name="AuthenticationObjectId" Value="Object ID of the service principal"/> -username $cred.username -Securepassword $cred.password
    <!--NeedCopy-->
    

验证主机连接的权限是否正确

为了验证所需角色和权限的主机连接,请运行以下命令:

  • 如果您在订阅级别分配了角色和权限,请注意:

     Test-HypHypervisorConnection -LiteralPath XDHyp:\Connections\<Your-HostingConnection>
     <!--NeedCopy-->
    
  • 如果您在资源组级别分配了角色和权限:

     Test-HypHypervisorConnection -LiteralPath XDHyp:\Connections\<Your-HostingConnection>  -CustomProperties $CustomProperties
    
     $CustomProperties = '<CustomProperties xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.citrix.com/2014/xd/machinecreation">'`
     + '<Property xsi:type="StringProperty" Name="ResourceGroups" Value="ExampleResourceGroup" />'`
     + '</CustomProperties>'
     <!--NeedCopy-->
    

接下来去哪里

更多信息