Microsoft Azure Resource Manager 虚拟化环境
使用 Microsoft Azure Resource Manager 在您的部署中预配虚拟机时,请按本指导原则进行操作。
请熟悉以下内容:
- Azure Active Directory: https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-create-new-tenant
- 同意框架: https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app
- 服务主体: https://docs.microsoft.com/en-us/azure/active-directory/develop/app-objects-and-service-principals
限制
使用 Azure Resource Manager 时,请注意以下限制:
- 本产品不支持 Windows 虚拟桌面 (WVD) 环境中的 VDA。对于 WVD 支持,请使用 Citrix Virtual Apps and Desktops 服务或适用于 Azure 的 Citrix Virtual Apps and Desktops Standard 服务。
Azure 按需预配
使用 MCS 在 Azure Resource Manager 中创建计算机目录时,Azure 按需预配功能:
- 降低存储成本
- 加快目录创建过程
- 加快虚拟机 (VM) 电源操作过程
对于管理员,在创建主机连接和 MCS 计算机目录的 Studio 过程中,按需预配并没有引入任何差异。不同之处在于如何以及何时在 Azure 中创建和管理资源,以及 VM 在 Azure 门户中的可见性。
MCS 创建目录时,VM 是在预配过程中在 Azure 中创建的。
在采用 Azure 按需预配的情况下,仅在完成预配后,当 Citrix Virtual Apps and Desktops 启动打开电源操作时才创建 VM。仅当 VM 运行时才在 Azure 门户中可见。(在 Studio 中,无论 VM 是否正在运行,都可见。)
创建 MCS 目录时,Azure 门户将显示资源组、网络安全组、存储帐户、网络接口、基础映像和身份磁盘。在 Citrix Virtual Apps and Desktops 为 VM 启动打开电源操作之前,Azure 门户不会显示 VM。然后,在 Studio 中,VM 的状态变为开。
- 对于池计算机,仅当存在 VM 时才会有操作系统磁盘和写回缓存。如果经常关闭计算机(例如,工作时间以外),池计算机会节省大量存储空间。
- 对于专用计算机,在首次打开 VM 时创建操作系统磁盘。它一直保留在存储空间中,直至删除该计算机。
启动 VM 的电源关闭操作会导致 Azure 删除该 VM。该 VM 不再显示在 Azure 门户中。在 Studio 中,VM 的状态更改为关。
在按需预配之前创建的目录
如果您有在 Citrix Virtual Apps and Desktops 支持 Azure 按需预配功能(2017 年年中)之前创建的计算机目录,这些目录中的 VM 在 Azure 门户中可见,而无论其是否正在运行。这些 VM 不能转换为按需计算机。
要利用按需预配的性能增强和存储成本优势,请使用 MCS 创建目录。
Azure 托管磁盘
Azure 托管磁盘是一个可以与 MCS 创建的计算机目录配合使用的弹性磁盘存储系统,作为使用常规存储帐户的替换选项。
托管磁盘功能隐藏了创建和管理存储帐户的复杂性。它为创建和管理磁盘提供了一个简单且高度可用的解决方案。可以使用托管磁盘作为主映像以及 VM。使用托管磁盘可以缩短计算机目录的创建和更新时间。有关详细信息,请参阅了解托管磁盘。
默认情况下,计算机目录使用托管磁盘。创建目录时,可以覆盖此默认值。
使用托管磁盘
在 Studio 中创建计算机目录时,目录创建向导的主映像页面将列出托管磁盘,以及 VM 和 VHD。并非所有 Azure 区域都支持托管磁盘功能。托管磁盘显示在对目录的主机连接可见的任何区域的列表中。
映像和目录位于相同的区域中时,将优化目录创建时间。
托管磁盘功能当前不支持在 Azure 区域之间复制磁盘。如果选择不在 MCS 在其中预配目录的区域中映像,则会将该映像复制到常规存储帐户中的 VHD。该映像出现在目录的区域中,然后转换回托管磁盘。
在目录创建向导的存储和许可证类型页面上,可以选中用于使用常规存储帐户来代替托管磁盘的复选框。在不支持托管磁盘的 Azure 区域中预配时,不能选择此复选框。
创建到 Azure Resource Manager 的连接
连接和资源一文中介绍了有关用于创建连接的向导的信息。以下信息涵盖与 Azure Resource Manager 连接有关的详细信息。
注意事项:
- 必须已为服务主体授予对订阅的参与者角色。
- 在创建第一个连接时,Azure 会提示您为其授予必要的权限。对于将来的连接,您仍然必须进行身份验证,但是 Azure 会记住您以前同意的情况,并且不会再显示提示。
- 用于身份验证的帐户必须具有使用 Azure RBAC 在订阅中分配角色的权限。例如,订阅的所有者、基于角色的访问控制管理员或用户访问管理员。
- 用于身份验证的帐户必须是订阅目录的成员。需要注意两种类型的帐户:“工作或学校”和“个人 Microsoft 帐户”。有关详细信息,请参阅 CTX219211。
-
可以通过将现有 Microsoft 帐户添加为订阅目录的成员来使用该帐户。但是,如果以前向用户授予了对该目录的资源的来宾访问权限,则可能会出现复杂问题。在这种情况下,未授予必要权限的目录中存在一个占位符条目,并返回错误。
要解决访问权限问题,请从目录中删除资源并明确重新添加这些资源。但是,请谨慎使用此方法,因为它会对帐户可以访问的其他资源产生意外影响。
- 有一个已知问题,即某些帐户实际上是成员时,会被检测为目录来宾。检测到的作为来宾的帐户通常与较旧的已建立的目录帐户一起出现。解决方法:向目录中添加一个帐户,该帐户采用适当的成员身份值。
- 资源组只是资源的容器,它们包含来自自己所在区域以外的区域的资源。如果您希望资源显示在资源组的区域中,资源组可能会造成混淆。
- 请确保您的网络和子网足够大,可以容纳您需要的计算机数量。网络大小需要一些先见之明,但 Microsoft 会帮助您指定合适的值,并提供有关地址空间容量的指导。
可以通过两种方法建立与 Azure Resource Manager 的主机连接:
- 通过向 Azure Resource Manager 进行身份验证以创建服务主体。
- 使用之前创建的服务主体的详细信息连接到 Azure Resource Manager。
通过向 Azure Resource Manager 进行身份验证以创建服务主体
开始之前,请务必:
- 在订阅的 Azure Active Directory 租户中具有一个用户帐户。
- 用于身份验证的帐户必须具有使用 Azure RBAC 在订阅中分配角色的权限。例如,订阅的所有者、基于角色的访问控制管理员或用户访问管理员。
在站点设置或添加连接和资源向导中:
- 在连接页面上,选择 Microsoft Azure 连接类型。然后,选择您的 Azure 云环境。
- 在连接详细信息页面上,输入 Azure 订阅 ID 和连接的名称。连接名称可以包含 1-64 个字符,不能仅包含空格,也不能包含非字母数字字符。输入订阅 ID 和连接名称后,将启用新建按钮。
- 输入 Azure Active Directory 帐户用户名和密码。
- 单击登录。
- 单击接受以将列出的权限授予 Citrix Virtual Apps and Desktops。Citrix Virtual Apps and Desktops 会创建一个允许它代表指定的用户管理 Azure Resource Manager 资源的服务主体。
- 单击接受后,您会返回到 Studio 中的连接页面。成功向 Azure 进行身份验证时,新建和使用现有按钮将被替换为已连接,同时出现绿色的复选标记指明已成功连接至您的 Azure 订阅。
- 指明可以使用哪些工具来创建虚拟机,然后单击下一步。在成功进行 Azure 身份验证和接受授予所需权限之前,您无法越过向导中的此页面。
-
资源由区域和网络组成。
- 在区域页面上,选择一个区域。
- 在网络页面上,键入 1-64 字符的资源名称以帮助确定 Studio 中的区域和网络组合。资源名称不能仅包含空格,也不能包含非字母数字字符。
- 选择一个虚拟网络和资源组对。由于您可以拥有多个具有相同名称的虚拟网络,因此,将网络名称与资源组配对可提供唯一的组合。如果在上一页上选择一个没有任何虚拟网络的区域,则将返回到该页面。选择具有虚拟网络的区域。
- 完成向导。
使用之前创建的服务主体的详细信息连接到 Azure Resource Manager
要手动创建服务主体,请连接到 Azure Resource Manager 订阅并使用以下部分中提供的 PowerShell cmdlet。
必备条件:
-
$SubscriptionId: 您希望预配 VDA 的订阅的 Azure Resource Manager
SubscriptionID
。 -
$AADUser: 订阅的 AD 租户的 Azure AD 用户帐户。让
$AADUser
成为您的订阅的协管理员。 - $ApplicationName: 要在 Azure AD 中创建的应用程序的名称。
- $ApplicationPassword: 应用程序的密码。创建主机连接时,请使用此密码作为应用程序机密。
要创建服务主体,请执行以下操作:
-
连接到您的 Azure Resource Manager 订阅。
Login-AzureRmAccount
-
选择您要创建服务主体的 Azure Resource Manager 订阅。
Select-AzureRmSubscription -SubscriptionID $SubscriptionId
-
在您的 AD 租户中创建应用程序。
$AzureADApplication = New-AzureRmADApplication -DisplayName $ApplicationName -HomePage "https://localhost/$ApplicationName" -IdentifierUris https://$ApplicationName -Password $ApplicationPassword
-
创建服务主体。
New-AzureRmADServicePrincipal -ApplicationId $AzureADApplication.ApplicationId
-
向服务主体分配角色。
New-AzureRmRoleAssignment -RoleDefinitionName Contributor -ServicePrincipalName $AzureADApplication.ApplicationId –scope /subscriptions/$SubscriptionId
-
在 PowerShell 控制台的输出窗口中,记下 ApplicationId。请在创建主机连接时提供该 ID。
在站点设置或添加连接和资源向导中:
- 在连接页面上,选择 Microsoft Azure 连接类型和您的 Azure 环境。
- 在连接详细信息页面上,输入 Azure 订阅 ID 和连接的名称。(连接名称可以包含 1-64 个字符,不能仅包含空格,也不能包含非字母数字字符。
- 单击使用现有。提供订阅 ID、订阅名称、身份验证 URL、管理 URL、存储后缀、Active Directory ID 或租户 ID、应用程序 ID 以及现有服务主体的应用程序机密。输入详细信息后,将会启用确定按钮。单击确定。
- 指明可以使用哪些工具来创建虚拟机,然后单击下一步。您提供的服务主体详细信息用于连接到 Azure 订阅。(在提供使用现有选项的有效详细信息之前,您无法越过向导中的此页面。)
-
资源由区域和网络组成。
- 在区域页面上,选择一个区域。
- 在网络页面上,键入 1-64 字符的资源名称以帮助确定 Studio 中的区域和网络组合。资源名称不能仅包含空格,也不能包含非字母数字字符。
- 选择一个虚拟网络和资源组对。(由于您可能有不止一个具有相同名称的虚拟网络,将网络名称与资源组配对可提供唯一的组合。)如果在上一个不具有任何虚拟网络的页面中选择了一个区域,则需要返回至该页面并选择一个具有虚拟网络的区域。
- 完成向导。
使用 Azure Resource Manager 主映像创建计算机目录
此信息用于补充创建计算机目录中的指导信息。
主映像将作为用于在计算机目录中创建 VM 的模板。创建计算机目录之前,请在 Azure Resource Manager 中创建一个主映像。有关主映像的常规信息,请参阅“创建计算机目录”一文。
当您在 Studio 中创建计算机目录时:
- 操作系统和计算机管理页面不包含 Azure 特定的信息。请按照创建计算机目录中的指导进行操作。
- 在主映像页面上,选择一个资源组。导航浏览所有容器,一直浏览到要用作主映像的 Azure VHD。该 VHD 必须已经安装了 Citrix VDA。如果该 VHD 连接到某个 VM,该 VM 必须被停止。
-
只有在使用 Azure Resource Manager 主映像时,才会显示存储和许可证类型页面。
选择一个存储类型:标准或高级。该存储类型影响在向导的虚拟机页面上提供哪些计算机大小。两个存储类型都会在单一数据中心中对您的数据进行多重同步复制。有关 Azure 存储类型和存储复制的详细信息,请参阅以下内容:
- https://docs.microsoft.com/en-us/azure/storage/common/storage-introduction
- https://docs.microsoft.com/en-us/azure/virtual-machines/premium-storage-performance
- https://docs.microsoft.com/en-us/azure/storage/common/storage-redundancy
选择是否使用现有的本机 Windows 服务器许可证。使用现有的本地 Windows Server 映像执行此操作可利用 Azure Hybrid Use Benefits (HUB)。更多详细信息,请访问 https://azure.microsoft.com/pricing/hybrid-use-benefit/。
HUB 将在 Azure 中运行 VM 的成本降低到基准计算费率。它免收 Azure 库中额外的 Windows Server 许可证的价格。请将您的本地 Windows Server 映像交至 Azure 以使用 HUB。不支持 Azure 库映像。当前不支持本机 Windows 客户端许可证。
检查预配的虚拟机是否成功利用 HUB。运行 PowerShell 命令
Get-AzureRmVM -ResourceGroup MyResourceGroup -Name MyVM
并检查许可证类型是否为Windows_Server
。更多说明,请访问 https://docs.microsoft.com/en-us/azure/virtual-machines/windows/hybrid-use-benefit-licensing/。 -
在虚拟机页面上,指出要创建的 VM 数量;必须至少指定一个。选择计算机大小。创建完计算机目录之后,您将无法更改计算机大小。如果以后需要不同的大小,请删除该目录,然后创建使用相同主映像的目录,并指定所需的计算机大小。
虚拟机名称不能包含非 ASCII 字符和特殊字符。
-
(使用 MCS 时)在资源组页面上,选择是创建资源组还是使用现有组。
如果选择创建资源组,请单击下一步。
如果选择使用现有资源组,请从可用的预配资源组列表中选择组。请选择足够的组以容纳您要在目录中创建的计算机。如果您选择的组太少,Studio 将显示一条消息。如果您计划以后向目录添加更多 VM,则您可能希望选择的数量多于所需的最低数量。创建目录后,无法向目录添加更多资源组。
有关详细信息,请参阅 Azure 资源组 (#azure-resource-groups)。
- 网卡、计算机帐户和摘要页面不包含 Azure 特定的信息。请按照创建计算机目录中的指导进行操作。
完成向导。
删除计算机目录
删除 Azure Resource Manager 计算机目录会导致删除关联的计算机和资源组,即使您指示应保留这些计算机和资源组亦如此。
Azure 资源组
Azure 预配资源组提供了一种预配向用户提供应用程序和桌面的 VM 的方法。请在 Studio 中创建 MCS 计算机目录时添加现有的空 Azure 资源组,或者创建新资源组。
有关 Azure 资源组的信息,请参阅 Microsoft 文档。
要求
-
每个资源组最多可以容纳 240 个 VM。要创建目录的区域中必须有足够的可用空资源组。如果要在创建计算机目录时使用现有资源组,请选择足够的可用组以容纳在目录中创建的计算机数量。例如,如果在目录创建向导中指定 500 台计算机,则至少选择 3 个可用的预配资源组。
创建目录后,无法向计算机目录添加资源组。因此,请考虑添加足够的资源组以容纳以后可能向目录添加的计算机。
- 在与主机连接相同的区域中创建空资源组。
- 如果要为每个 MCS 目录创建资源组,请配置与主机连接关联的 Azure 服务主体。此主体必须具有创建和删除资源组的权限。如果您希望使用现有的空资源组,则与主机连接关联的 Azure 服务主体对这些空资源组必须具有“参与者”权限。
- 使用新建选项在 Studio 中创建主机连接时,创建的服务主体具有订阅作用域参与权限。或者,可以使用使用现有选项来创建连接,并提供现有订阅作用域服务主体的详细信息。使用新建选项在 Studio 中创建服务主体。该主体具有创建和删除新资源组或向现有空资源组预配所需的权限。
-
必须使用 PowerShell 创建窄作用域服务主体。此外,使用窄范围服务主体时,必须使用 PowerShell 或 Azure 门户为 MCS 预配 VM 的每个目录创建空资源组。
如果您对主机连接使用窄作用域服务主体,并且在目录创建向导的主映像页面上没有看到您的主映像资源组,可能是因为您使用的窄作用域服务主体没有列出主映像资源组的权限
Microsoft.Resources/subscriptions/resourceGroups/read
。关闭向导,为服务主体更新权限(请参阅博客文章了解相关说明),然后重新启动向导。Azure 中的更新显示在 Studio 中最多可能需要 10 分钟。
关于 Azure 服务主体
要在 Azure Resource Manager 中预配计算机,必须向插件授予对 Azure 订阅的访问权限。这些权限是通过已为相关 Azure 资源分配权限的服务主体授予的。服务主体与用户帐户的基本用途相同。它为插件提供 Azure Active Directory 标识,该标识提供身份验证凭据和 Azure 资源的权限。与用户帐户一样,服务主体也使用基于角色的访问控制 (RBAC) 进行配置。
根据权限的定义方式,我们将服务主体分类为:
-
订阅范围服务主体;或
-
窄范围服务主体
订阅范围服务主体
订阅范围服务主体对订阅中的所有资源具有贡献者权限,这使其易于创建和管理。Citrix Studio 可自动创建订阅范围服务主体的过程,也可以在 PowerShell 中手动创建这些主体。这些主体允许 Azure Resource Manager 插件创建 Azure 资源组并完全自动化资源的管理。缺点是插件对订阅中与插件负责管理的资源无关的资源具有权限。
使用贡献者角色将允许插件创建、删除、读取和写入订阅中的所有资源。权限不扩展到任何 Azure Active Directory 中的对象,也不允许订阅范围服务主体授予其他用户或服务主体访问资源的权限。
窄范围服务主体
窄范围服务主体允许 Azure Resource Manager 插件访问由您定义的一组有限的资源。Azure 需要订阅范围权限才能创建资源组。使用窄范围服务主体时,插件无法创建资源组。除了服务主体之外,您还需要为要预配的计算机的每个目录提供资源组池。
Citrix Studio 不支持创建窄范围服务主体或目录。这两个任务都必须使用 PowerShell 执行。但是,一旦创建了目录,就可以像 Studio 中的任何其他目录一样对其进行管理,包括添加和删除计算机。如果在某个时候要将现有的窄范围服务主体用于新的资源组池,则必须使用 PowerShell 向服务主体显式添加权限。
定义 Azure 订阅访问要求
下面各部分内容中的技术和示例演示了常规要求,需要根据您的特定情况进行更改。
在以下情况下,请考虑使用订阅范围服务主体:
-
您需要获得最简单的管理体验。
-
您希望避免使用 PowerShell 并在 Citrix Studio 中管理所有对象。
-
您的 Azure 订阅专用于单个 Citrix Virtual Apps and Desktops 服务。
-
您正在执行 Citrix Virtual Apps and Desktops 安装的概念证明。
-
您的 Citrix Virtual Apps and Desktops 管理员在 Azure 订阅范围内具有贡献者访问权限。
在以下情况下,请考虑使用窄范围服务主体:
-
您的 Azure 订阅托管多个不相关的服务。
-
您的 Azure 管理员具有不同的订阅权限,具体取决于其角色。
-
贵公司有安全标准,要求在细粒度级别进行访问控制。
-
您有一个用于创建窄范围服务主体的现有过程。
提示:
您可以创建作为主订阅的一部分计费的子订阅,并且引用主订阅中的默认 Azure Active Directory。此配置为控制对不相关资源的访问提供了另一种机制。
规划窄范围服务主体目录
在创建窄范围服务主体目录之前,请确定托管初始虚拟机数量和将来的虚拟机数量需要多少资源组。由于 Machine Creation Services 中的限制,创建目录后无法添加资源组。
为每个资源组池预配一个目录
Azure Resource Manager 插件在每个资源组中创建必要的基础结构。资源组由存储帐户、安全组、网络接口、虚拟机等组成,向目录中添加计算机时,将根据需要按需创建存储帐户。这意味着目录的大小可以增加到由资源组池大小和 Azure 订阅配额设置的上限。创建存储帐户后,在删除目录之前不会删除该帐户。由于可以删除任何虚拟机,因此最终可能会出现空存储帐户。这种情况很少见,因为虚拟机往往会在可用存储帐户之间随机分配。必须通过检查存储帐户的内容以特意清空存储帐户来精心选择计算机。
Azure 将资源组中的虚拟机数量限制为 800,但 Azure Resource Manager 插件使用不同的度量。标准 Azure 磁盘的限制为每秒 500 个 I/O 操作 (IOPS),标准存储帐户的 IOPS 限制为 20000。出于这个原因,插件为存储帐户预配的计算机不超过 40 台。此限制适用于标准存储和高级存储。此外,插件在资源组中创建的存储帐户不超过 19 个。
因此,基于最大计算机数计算资源组数的基本公式为:
资源组数 = 上限(计算机的最大数量/(40 * 19))
Azure Resource Manager 插件假定它具有资源组池的独占使用权。在任何指定的资源组中都没有用户创建的资源。
基于 Azure 角色的访问控制 (RBAC) 的基础知识。
通过在特定范围内将 RBAC 角色分配给服务主体来授予对 Azure 资源的访问权限。范围可以是订阅、资源组或特定资源。资源在包含层次结构中排列,由角色定义的权限应用到应用了该范围的以下所有资源。应用到订阅的角色将应用到订阅中的所有资源。应用到资源组的角色将应用到资源组中包含的所有资源。
Azure 资源层次结构的含义是只有具有订阅范围权限的服务主体才能创建资源组。这并不理想,因为它会阻止像插件这样的应用程序根据逻辑组和管理资源的需要创建资源组。他们对完整订阅具有广泛权限时除外。
Azure 具有大量内置角色选择,还支持定义自定义角色。有关 Azure RBAC 中的自定义角色的详细信息,请参阅 Azure 资源的自定义角色。
创建订阅范围服务主体
此示例显示了如何创建订阅范围服务主体。详细信息可用于在 Citrix Studio 中创建 Azure 连接。选择此选项可使用现有服务主体,或者在 PowerShell 中手动创建 Azure 连接。
param(
[string]$applicationName = "SubscriptionScopeSP",
[Parameter(Mandatory=$true)][string]$applicationPassword,
[Parameter(Mandatory=$true)][string]$subscriptionId
)
$application = New-AzureRmADApplication -DisplayName $applicationName -HomePage "https://localhost/$applicationName" `
-IdentifierUris "https://$applicationName" -Password $applicationPassword
New-AzureRmADServicePrincipal -ApplicationId $application.ApplicationId
# Wait for the service principal to become available
Start-Sleep -s 60
New-AzureRmRoleAssignment -RoleDefinitionName Contributor -ServicePrincipalName $application.ApplicationId `
-scope "/subscriptions/$subscriptionId"
Write-Host ("Application ID: " + $application.ApplicationId)
<!--NeedCopy-->
创建基本窄范围服务主体
本部分内容介绍了创建在资源组范围内分配权限的尽可能简单的窄范围服务主体的过程。
Azure Resource Manager 插件需要对以下资源的权限:
-
主映像 VHD
-
计算机的虚拟网络
-
要在其中预配计算机的资源组。
为了简化脚本,我们假设可以在资源组范围内授予贡献者访问权限。Azure Resource Manager 插件对存储映像 VHD 的资源组、包含虚拟网络的资源组和预配了计算机的资源组具有贡献者权限。
param(
[string]$applicationName = "BasicNarrowScopeSP",
[Parameter(Mandatory=$true)][string]$applicationPassword,
[Parameter(Mandatory=$true)][string]$subscriptionId,
[Parameter(Mandatory=$true)][string[]]$resourceGroups
)
$application = New-AzureRmADApplication -DisplayName $applicationName -HomePage "https://localhost/$applicationName" `
-IdentifierUris "https://$applicationName" -Password $applicationPassword
New-AzureRmADServicePrincipal -ApplicationId $application.ApplicationId
# Wait for the service principal to become available
Start-Sleep -s 60
New-AzureRmRoleAssignment -RoleDefinitionName Citrix-Network-Usage-Reader -ServicePrincipalName $application.ApplicationId `
-scope "/subscriptions/$subscriptionId/"
foreach ($rg in $resourceGroups)
{
New-AzureRmRoleAssignment -RoleDefinitionName Contributor -ServicePrincipalName $application.ApplicationId `
-scope "/subscriptions/$subscriptionId/resourcegroups/$rg"
}
Write-Host ("Application ID: " + $application.ApplicationId)
<!--NeedCopy-->
使用自定义角色创建窄范围服务主体
Azure 附带了大量内置 RBAC 角色。Citrix 使用上一部分内容中介绍的贡献者角色。如前所述,这为 Azure Resource Manager 插件提供了比严格要求更广泛的权限。本部分内容定义了一个自定义角色,并进一步加强了访问权限。如果需要,可以使用更多自定义角色锁定访问权限,并将角色直接应用到映像和网络资源。
注意:
所需的权限可能会发生变化。
请使用以下权限定义用于在资源组范围内授予对虚拟网络和主映像的访问权限的自定义角色。
主映像 VHD。
对于目录创建:
-
Microsoft.Storage/storageAccounts/read
-
Microsoft.Storage/storageAccounts/listKeys/action
对于将来的 Citrix Studio 支持:
- Microsoft.Resources/subscriptions/resourceGroups/read
计算机的虚拟网络:
-
Microsoft.Network/virtualNetworks/read
-
Microsoft.Network/virtualNetworks/subnets/join/action
已预配计算机的资源组。
我们可以创建具有以下权限的另一个自定义角色,但为了保持示例的简单性,请继续为计算机资源组使用贡献者角色。这些资源组不包含非 Azure Resource Manager 插件创建的资源。贡献者角色会降低对插件的更改需要更改服务主体的可能性:
-
Microsoft.Compute/virtualMachines/*
-
Microsoft.Network/networkInterfaces/*
-
Microsoft.Network/networkSecurityGroups/*
-
Microsoft.Resources/deployments/*
-
Microsoft.Resources/subscriptions/resourceGroups/read
-
Microsoft.Storage/storageAccounts/*
-
Microsoft.Storage/storageAccounts/listKeys/action
Citrix Virtual Apps and Desktops 自定义访问角色。
通过首先在 JSON 中定义自定义角色来创建自定义角色:
{
"Name": "Citrix-Custom-Reader",
"Description": "Grants access to Citrix XenDesktop images and virtual networks.",
"Actions": [
"Microsoft.Storage/storageAccounts/read",
"Microsoft.Storage/storageAccounts/listKeys/action",
"Microsoft.Network/virtualNetworks/read",
"Microsoft.Network/virtualNetworks/subnets/join/action"
],
"NotActions": [
],
"AssignableScopes": [
"/subscriptions/<YOUR-SUBSCRIPTION-ID>"
]
}
<!--NeedCopy-->
通过引用 JSON 定义来创建角色:
New-AzureRmRoleDefinition -InputFile citrix-custom-reader.json
<!--NeedCopy-->
创建服务主体时使用新的自定义角色:
param(
[string]$applicationName = "NarrowScopeSP",
[Parameter(Mandatory=$true)][string]$applicationPassword,
[Parameter(Mandatory=$true)][string]$subscriptionId,
[Parameter(Mandatory=$true)][string[]]$machineResourceGroups,
[Parameter(Mandatory=$true)][string]$imageResourceGroup,
[Parameter(Mandatory=$true)][string]$networkResourceGroup
)
$application = New-AzureRmADApplication -DisplayName $applicationName -HomePage "https://localhost/$applicationName" `
-IdentifierUris "https://$applicationName" -Password $applicationPassword
New-AzureRmADServicePrincipal -ApplicationId $application.ApplicationId
# Wait for the service principal to become available
Start-Sleep -s 60
New-AzureRmRoleAssignment -RoleDefinitionName Citrix-Network-Usage-Reader -ServicePrincipalName $application.ApplicationId `
-scope "/subscriptions/$subscriptionId/"
foreach ($rg in $machineResourceGroups)
{
New-AzureRmRoleAssignment -RoleDefinitionName Contributor -ServicePrincipalName $application.ApplicationId `
-scope "/subscriptions/$subscriptionId/resourcegroups/$rg"
}
New-AzureRmRoleAssignment -RoleDefinitionName Citrix-Custom-Reader -ServicePrincipalName $application.ApplicationId `
-scope "/subscriptions/$subscriptionId/resourcegroups/$imageResourceGroup"
New-AzureRmRoleAssignment -RoleDefinitionName Citrix-Custom-Reader -ServicePrincipalName $application.ApplicationId `
-scope "/subscriptions/$subscriptionId/resourcegroups/$networkResourceGroup"
Write-Host ("Application ID: " + $application.ApplicationId)
<!--NeedCopy-->
创建 Citrix Virtual Apps and Desktops Azure 连接。
使用现有服务主体在 Citrix Studio 中创建 Citrix Virtual Apps and Desktops Azure 连接是合理的。在 PowerShell 中创建连接同样合理。
下面是在 PowerShell 中创建连接的示例:
param(
[string]$connectionName = "AzureConnection",
[Parameter(Mandatory=$true)][string]$applicationId,
[Parameter(Mandatory=$true)][string]$applicationPassword,
[Parameter(Mandatory=$true)][string]$subscriptionId,
[Parameter(Mandatory=$true)][string]$subscriptionName,
[Parameter(Mandatory=$true)][string]$tenantId
)
Add-PsSnapin Citrix*
$customProperties = @"
<CustomProperties xmlns="http://schemas.citrix.com/2014/xd/machinecreation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Property xsi:type="StringProperty" Name="AuthenticationAuthority" Value="https://login.microsoftonline.com/"/>
<Property xsi:type="StringProperty" Name="ManagementEndpoint" Value="https://management.azure.com/"/>
<Property xsi:type="StringProperty" Name="StorageSuffix" Value="core.windows.net"/>
<Property xsi:type="StringProperty" Name="TenantId" Value="$tenantId"/>
<Property xsi:type="StringProperty" Name="SubscriptionId" Value="$subscriptionId"/>
<Property xsi:type="StringProperty" Name="SubscriptionName" Value="$subscriptionName"/>
</CustomProperties>
"@
$connection = New-Item -ConnectionType "Custom" -CustomProperties $customProperties -HypervisorAddress @("https://management.azure.com/") `
-Path @("XDHyp:\Connections$connectionName") -Persist -PluginId "AzureRmFactory" -Scope @() `
-SecurePassword (ConvertTo-SecureString -AsPlainText -Force $applicationPassword) -UserName $applicationId
New-BrokerHypervisorConnection -HypHypervisorConnectionUid $connection.HypervisorConnectionUid
<!--NeedCopy-->
此时,请使用 Studio 或者在 PowerShell 中向连接添加资源。
创建 Citrix Virtual Apps and Desktops 目录。
下面的示例使用 Citrix PowerShell 管理单元创建 Citrix Virtual Apps and Desktops 目录。
由于窄范围服务主体不允许 Azure Resource Manager 插件创建资源组,因此必须:
-
创建资源组的池。
-
为资源组池中的所有资源组分配服务主体权限。
-
创建预配方案时,请在自定义属性中列出资源组中的每个资源组。
自定义属性名为 ResourceGroups,值是以逗号分隔的资源组名称列表。下面的示例是如何定义此自定义属性的示例。
注意:
仅在自定义属性中列出针对计算机的资源组。不包括映像或虚拟网络所在的一个或多个资源组。如果指定了这些计算机,则 Azure Resource Manager 插件会尝试将计算机预配到可能会导致某些意外行为的资源组中。
在此示例中,计算机在两个名为 xd-sales-1 和 xd-sales-2 的资源组中进行预配:
Add-PsSnapin Citrix*
# The hosting unit name is the name of the Azure connection resources that should be used for this catalog
$hostingUnitName = "AzureHostingUnit"
$domain = "citrix.local"
$controllerAddress = ("ddc." + $domain)
$adminAddress = ($controllerAddress + ":80")
$catalogName = "catalog-name"
$network = "network-resource-group.resourcegroup\network-name"
$subnet = "subnet-name"
$serviceOffering = "Standard_A4"
$template = "image-resource-group.resourcegroup\imagestorage.storageaccount\images.container\image-name.vhd"
$customProperties = @" <CustomProperties xmlns="http://schemas.citrix.com/2014/xd/machinecreation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Property xsi:type="StringProperty" Name="StorageAccountType" Value="Standard_LRS" />
<Property xsi:type="StringProperty" Name="ResourceGroups" Value="xd-sales-1, xd-sales-2" />
</CustomProperties>
"@
$identityPool = New-AcctIdentityPool -AdminAddress $adminAddress -AllowUnicode -Domain $domain `
-IdentityPoolName $catalogName -NamingScheme "vm-#" -NamingSchemeType "Numeric" -Scope @()
$brokerCatalog = New-BrokerCatalog -AdminAddress $adminAddress -AllocationType "Random" -IsRemotePC $False `
-MinimumFunctionalLevel "L7_9" -Name $catalogName -PersistUserChanges "Discard" -ProvisioningType "MCS" -Scope @() `
-SessionSupport "MultiSession"
Write-Host $brokerCatalog
$provScheme = New-ProvScheme -AdminAddress $adminAddress -CleanOnBoot -CustomProperties $customProperties `
-HostingUnitName $hostingUnitName -IdentityPoolName $catalogName `
-MasterImageVM "XDHyp:\HostingUnits$hostingUnitName\image.folder$template.vhd" `
-NetworkMapping @{"0"="XDHyp:\HostingUnits$hostingUnitName\virtualprivatecloud.folder$network.virtualprivatecloud$subnet.network"} `
-ProvisioningSchemeName $catalogName -Scope @() -SecurityGroup @() `
-ServiceOffering "XDHyp:\HostingUnits$hostingUnitName\serviceoffering.folder$serviceOffering.serviceoffering"
Write-Host $provScheme
Set-BrokerCatalog -AdminAddress $adminAddress -Name $catalogName -ProvisioningSchemeId $provScheme.ProvisioningSchemeUid
Add-ProvSchemeControllerAddress -AdminAddress $adminAddress.com -ControllerAddress $controllerAddress -ProvisioningSchemeName $catalogName
<!--NeedCopy-->
此时,您可以刷新 Citrix Studio 中的目录页面、添加计算机和管理计算机,就像使用任何其他目录一样。
在 Studio 中为计算机目录配置资源组
在目录创建向导中的资源组页面中,可以选择是创建资源组还是使用现有组。请参阅使用 Azure Resource Manager 主映像创建计算机目录。
删除计算机目录时资源组发生的情况:
-
如果在创建计算机目录时允许 Citrix Virtual Apps and Desktops 创建资源组,且之后删除了该目录,则这些资源组及这些资源组中的所有资源也将被删除。
-
如果在创建计算机目录时使用现有资源组,且之后删除了目录,则这些资源组中的所有资源将被删除,但资源组不会删除。
注意事项、限制和故障排除
在使用现有资源组时,目录创建向导中的“资源组”页面上的可用资源组列表不会自动刷新。因此,如果打开了该向导页面并在 Azure 中为资源组创建或添加权限,这些更改不会反映在向导的列表中。要查看最新更改,请返回到向导中的计算机管理页面,然后重新选择与主机连接关联的资源,或者关闭并重新启动向导。在 Azure 中所做的更改显示在 Studio 中最多可能需要 10 分钟。
一个资源组只能用于一个计算机目录中。但是,这不是强制的。例如,在创建目录时选择 10 个资源组,但在目录中仅创建一台计算机。在创建目录后,其中 9 个选定的资源组保持为空。您可能打算将来使用它们来扩展容量,因此,它们与该目录保持关联。在创建目录后,无法向目录添加资源组,因此,为将来的扩展做好计划很实用。但是,如果创建了另一个目录,这 9 个资源组将显示在可用列表中。Citrix Virtual Apps and Desktops 目前不会跟踪哪些资源组分配到哪些目录。由您对此进行监视。
如果您的连接使用可以访问各个区域中的空资源组的服务主体,则它们将全部显示在可用列表中。请务必在要创建计算机目录的相同区域中选择资源组。
故障排除:
-
资源组未出现在目录创建向导的“资源组”页面上的列表中。
服务主体必须对您希望显示在列表中的资源组具有适当权限。请参阅上面的“要求”部分。
-
在向以前创建的计算机目录中添加计算机时,并未预配所有计算机。
创建目录后,以后向目录中添加更多计算机时,不要超过最初为目录选择的资源组的计算机容量(每个组 240 个)。创建目录后,无法添加资源组。如果尝试添加的计算机数量超过现有资源组可以容纳的数量,则预配将失败。
例如,创建一个具有 300 个 VM 和 2 个资源组的计算机目录。资源组最多可以容纳 480 个 VM(240 乘以 2)。如果以后尝试向目录添加 200 个 VM,这就超过了资源组的容量(300 个当前 VM + 200 个新 VM = 500,但资源组只能容纳 480 个)。