这篇文章已经过机器翻译.放弃
与 Microsoft Azure 的连接
注意:
自 2023 年 7 月起,Microsoft 已将 Azure Active Directory (Azure AD) 重命名为 Microsoft Entra ID。 在本文档中,任何提及 Azure Active Directory、Azure AD 或 AAD 的内容现在均指 Microsoft Entra ID。
创建和管理连接和资源介绍了用于创建连接的向导。 以下信息涵盖了特定于 Azure Resource Manager 云环境的详细信息。
注意:
在创建与 Microsoft Azure 的连接之前,必须先将 Azure 帐户设置为资源位置。 请参阅 Microsoft Azure Resource Manager 虚拟化环境。
创建服务主体和连接
在创建连接之前,必须设置连接用来访问 Azure 资源的服务主体。 可以通过以下两种方式创建连接:
- 使用 Studio 一起创建服务主体和连接
- 使用先前创建的服务主体创建连接
本部分内容向您展示了如何完成以下任务:
注意事项
在开始之前,请注意以下注意事项:
- Citrix 建议使用具有贡献者角色的服务主体。 但是,请参阅最低权限部分以获取最低权限列表。
- 在创建第一个连接时,Azure 会提示您为其授予必要的权限。 对于将来的连接,您仍然必须进行身份验证,但是 Azure 会记住您以前同意的情况,并且不会再显示提示。
- 首次使用 Azure 进行身份验证后,系统会邀请一个 Citrix 拥有的多租户应用程序(ID:
08b70dc3-76c5-4611-ba7d-3312ba36cb2b
)代表经过身份验证的帐户访问您的 Azure Active Directory。 - 用于身份验证的帐户必须有权使用 Azure RBAC 在订阅中分配角色。 例如,订阅的 Owner、Role Based Access Control Administrator 或 User Access Administrator。
- 用于身份验证的帐户必须是订阅的目录的成员。 有两种类型的帐户需要注意:“工作或学校”和“个人 Microsoft 帐户”。看 CTX219211 了解详情。
-
虽然可以通过将现有 Microsoft 帐户添加为订阅目录的成员来使用该帐户,但如果以前已为用户授予对其中一个目录的资源的来宾访问权限,则可能会出现复杂情况。 在这种情况下,他们可能在目录中有一个不会授予其必要权限的占位符条目,并会返回错误。
通过从目录中删除资源并将其明确添加回来纠正这个问题。 但是,请谨慎使用此选项,因为它会对该帐户可以访问的其他资源产生意想不到的影响。
- 有一个已知问题,即某些帐户实际上是成员时,会被检测为目录来宾。 此类配置通常发生在较旧的目录帐户中。 解决方法:向目录中添加一个帐户,该帐户采用适当的成员身份值。
- 资源组只是资源的容器,它们可以包含来自自己所在区域以外的区域的资源。 如果您希望资源组的区域中显示的资源可用,这可能会引起混淆。
- 请确保您的网络和子网足够大,可以容纳您需要的计算机数量。 这需要一些先见之明,但 Microsoft 会帮助您指定合适的值,并提供有关地址空间容量的指导。
使用 Studio 创建服务主体和连接
-priority
此功能尚不适用于 Azure 中国订阅。
使用 Studio,您可以在单个工作流程中同时创建服务主体和连接。 服务主体允许连接访问 Azure 资源。 向 Azure 进行身份验证以创建服务主体时,应用程序将在 Azure 中注册。 为注册的应用程序创建了密钥(称为客户端机密或应用程序机密)。 注册的应用程序(在本例中为连接)使用客户端机密对 Azure AD 进行身份验证。
在开始之前,请确保您已满足以下必备条件:
- 在订阅的 Azure Active Directory 租户中具有一个用户帐户。
- 用于身份验证的帐户必须有权使用 Azure RBAC 在订阅中分配角色。 例如,订阅的 Owner、Role Based Access Control Administrator 或 User Access Administrator。
- 您拥有全局管理员、应用程序管理员或应用程序开发者权限以进行身份验证。 创建主机连接后,可以撤消权限。 有关角色的详细信息,请参阅 Azure AD 内置角色。
使用添加连接和资源向导一起创建服务主体和连接:
-
在连接页面上,选择创建新连接、Microsoft Azure 连接类型和您的 Azure 环境。
-
选择可以使用哪些工具来创建虚拟机,然后选择下一步。
-
在“连接详细信息”页面上,创建服务主体并按如下方式设置连接名称:
- 输入 Azure 订阅 ID 和连接的名称。 输入订阅 ID 后,将启用新建按钮。
注意:
连接名称可以包含 1-64 个字符,不能仅包含空格或字符
\/;:#.*?=<>|[]{}"'()'
。- 选择新建,然后输入 Azure Active Directory 帐户用户名和密码。
- 选择登录。
- 选择“接受”以授予 Citrix DaaS 列出的权限。 Azure 创建了一个服务主体,允许 Citrix DaaS 代表指定用户管理 Azure 资源。
> **注意:** > > Citrix DaaS 需要以下权限才能创建新的服务主体: > > - **以你的身份访问 Azure 服务管理** > - **读取和写入应用程序** > - **登录并阅读您的个人资料** > - **保持对您已授予其访问权限的数据的访问权限**
-
选择“接受”后,您将返回到“连接详细信息”页面。
注意:
成功对 Azure 进行身份验证后,新建和使用现有按钮将消失。 连接成功文本显示时带有绿色复选标记,表示成功连接到 Azure 订阅。
-
要通过 Citrix Cloud Connector 将 API 请求路由到 Azure,请选中“通过 Citrix Cloud Connector 路由流量”复选框。
或者,您可以使用 PowerShell 启用此功能。 有关详细信息,请参阅为 Azure 管理的流量创建安全的环境。
注意:
仅当您的部署中有活动的 Citrix Cloud Connector 时,此选项才可用。 目前,Connector Appliance 不支持此功能。
-
选择下一步。
注意:
在成功对 Azure 进行身份验证并同意授予所需的权限之后,才能进入下一页。
-
按如下方式配置连接的资源:
- 在区域页面上,选择一个区域。
- 在网络页面上,执行以下操作:
- 键入 1–64 字符的资源名称以帮助确定区域和网络组合。 资源名称不能仅包含空格或字符
\/;:#.*?=<>|[]{}"'()'
。 - 选择一个虚拟网络/资源组对。 (如果您有多个具有相同名称的虚拟网络,将网络名称与资源组配对可提供唯一的组合。)如果您在上一个页面上选择的区域不具有任何虚拟网络,请返回到该页面并选择一个具有虚拟网络的区域。
- 键入 1–64 字符的资源名称以帮助确定区域和网络组合。 资源名称不能仅包含空格或字符
-
在摘要页面上,查看设置的摘要,然后选择完成以完成您的设置。
查看应用程序 ID
创建 cofEnable 已加入 Azure AD 的设备管理后,您可以查看连接用于访问 Azure 资源的应用程序 ID。
在添加连接和资源列表中,选择连接以查看详细信息。 详细信息选项卡显示应用程序 ID。
使用 PowerShell 创建服务主体
要使用 PowerShell 创建服务主体,请连接到 Azure Resource Manager 订阅并使用以下部分中提供的 PowerShell cmdlet。
请务必准备好以下项目:
-
SubscriptionId: 您希望预配 VDA 的订阅的 Azure Resource Manager
SubscriptionID
。 - ActiveDirectoryID:您在 Azure AD 中注册的应用程序的租户 ID。
- ApplicationName: 要在 Azure AD 中创建的应用程序的名称。
详细步骤如下所示:
-
连接到您的 Azure Resource Manager 订阅。
Connect-AzAccount
-
选择您要创建服务主体的 Azure Resource Manager 订阅。
Get-AzSubscription -SubscriptionId $subscriptionId | Select-AzSubscription
-
在您的 AD 租户中创建应用程序。
$AzureADApplication = New-AzADApplication -DisplayName $ApplicationName
-
创建服务主体。
New-AzADServicePrincipal -ApplicationId $AzureADApplication.AppId
-
向服务主体分配角色。
New-AzRoleAssignment -RoleDefinitionName Contributor -ServicePrincipalName $AzureADApplication.AppId –scope /subscriptions/$SubscriptionId
-
在 PowerShell 控制台的输出窗口中,记下 ApplicationId。 请在创建主机连接时提供该 ID。
在 Azure 中获取应用程序机密
要使用现有服务主体创建连接,必须先在 Azure 门户中获取服务主体的应用程序 ID 和密钥。
详细步骤如下所示:
- 获取 应用程序 ID 从 Studio 或使用 PowerShell 进行。
- 登录 Azure 门户。
- 在 Azure 中,选择 Azure Active Directory。
- 从 Azure AD 中的应用程序注册中,选择您的应用程序。
- 转到证书和密钥。
- 单击客户端机密。
使用现有服务主体创建连接
如果您已经有服务主体,则可以使用它通过 Studio 创建连接。
请务必准备好以下项目:
- SubscriptionId
- ActiveDirectoryID(租户 ID)
- 应用程序 ID
-
应用程序机密
有关详细信息,请参阅获取应用程序机密。
- 机密过期日期
详细步骤如下所示:
在添加连接和资源向导中,执行以下操作:
-
在连接页面上,选择创建新连接、Microsoft Azure 连接类型和您的 Azure 环境。
-
选择可以使用哪些工具来创建虚拟机,然后选择下一步。
-
在连接详细信息页面上,输入 Azure 订阅 ID 和连接的名称。
注意:
连接名称可以包含 1-64 个字符,不能仅包含空格或字符
\/;:#.*?=<>|[]{}"'()'
。 -
选择使用现有。 在现有服务主体详细信息窗口中,输入现有服务主体的以下设置。 输入详细信息后,将会启用保存按钮。 选择保存。 除非提供有效的详细信息,否则无法跳过此页面。
- 订阅 ID。 输入您的 Azure 订阅 ID。 要获取您的订阅 ID,请登录 Azure 门户并导航到订阅 > 概述。
- Active Directory ID(租户 ID)。 输入您在 Azure AD 中注册的应用程序的目录(租户)ID。
- 应用程序 ID。 输入您在 Azure AD 中注册的应用程序的应用程序(客户端)ID。
- 应用程序机密。 输入密钥(客户端机密)。 注册的应用程序使用密钥向 Azure AD 进行身份验证。 出于安全考虑,我们建议您定期更改密钥。 请务必保存密钥,因为以后将无法检索密钥。
-
机密过期日期。 输入应用程序机密的过期日期。 您会在密钥过期前 14 天开始在控制台上收到提醒。 但是,如果密钥过期,您会收到错误。
注意:
出于安全考虑,有效期从现在起不得超过两年。
- 身份验证 URL。 此字段是自动填充的,不可编辑。
- 管理 URL。 此字段是自动填充的,不可编辑。
- 存储后缀。 此字段是自动填充的,不可编辑。
- 用于上传或下载磁盘或快照的 Azure Blob 存储终结点. 此字段是自动填充的,不可编辑。
- Key Vault 服务. 此字段是自动填充的,不可编辑。
-
服务总线后缀. 此字段是自动填充的,不可编辑。
在 Azure 中创建 MCS 目录需要访问以下端点。 访问这些端点可优化您的网络与 Azure 门户及其服务之间的连接。
- 身份验证 URL:
https://login.microsoftonline.com
- 管理 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
. 此 (*) 是密钥保管库名称的通配符。 例如https://<your-key-vault-name>.vault.azure.net
. - 服务总线后缀:
https://*.servicebus.windows.net (英文)
. 此 (*) 是在全球 Azure 云中创建的命名空间的通配符。 例如https://{serviceNamespace}.servicebus.windows.net/{path}
.
- 身份验证 URL:
-
选择“保存”后,您将返回到“连接详细信息”页面。 选择下一步进入下一页。
-
按如下方式配置连接的资源:
- 在区域页面上,选择一个区域。
- 在网络页面上,执行以下操作:
- 键入 1–64 字符的资源名称以帮助确定区域和网络组合。 资源名称不能仅包含空格或字符
\/;:#.*?=<>|[]{}"'()'
。 - 选择一个虚拟网络/资源组对。 (如果您有多个具有相同名称的虚拟网络,将网络名称与资源组配对可提供唯一的组合。)如果您在上一个页面上选择的区域不具有任何虚拟网络,请返回到该页面并选择一个具有虚拟网络的区域。
- 键入 1–64 字符的资源名称以帮助确定区域和网络组合。 资源名称不能仅包含空格或字符
-
在摘要页面上,查看设置的摘要,然后选择完成以完成您的设置。
使用 Azure 托管标识创建主机连接
您可以使用 Azure 托管身份创建与 Microsoft Azure Resource Manager 的主机连接。 Azure 托管身份提供了一种安全且可缩放的方式来访问 Azure 服务,而无需管理凭据。 此方法消除了与存储、轮换和管理密钥相关的风险。
您可以使用新的 CustomProperty 创建此主机连接 AuthenticationMode 认证
. 这 AuthenticationMode 认证
有三个选项: AppClientSecret 应用程序
, SystemAssignedManagedIdentity
和 UserAssignedManagedIdentity
.
以下是选项的说明:
-
AppClientSecret 应用程序
:这是默认值。 这需要应用程序 ID 和密钥。 -
UserAssignedManagedIdentity
:这需要通过 UserName 提供客户端 ID。 -
SystemAssignedManagedIdentity
:这不需要任何输入。 即使您提供了客户端 ID,它也会被忽略。
条件:
参数 代理虚拟机管理程序TrafficThroughConnector
必须为 true 才能使用托管标识。
以下是使用 Azure 托管身份创建主机连接的步骤:
- 在 Azure VM 中安装 Citrix Cloud Connector。
-
在该 Cloud Connector VM 上启用 Azure 托管标识。
-
对于用户分配的托管标识:
- 在 Azure 门户上,创建用户分配的托管标识。 有关信息,请参阅 创建并分配用户分配的托管标识.
- 将 Azure 角色分配给托管标识。 请参阅所需的 Azure 权限。
- 将 Azure VM 创建为 Cloud Connector,并向其添加用户分配的身份。
-
对于系统分配的托管标识:
- 打开 Azure 门户并转到 VM。
- 在 VM 的设置中选择“标识”边栏选项卡。
- 在 System assigned 选项卡下,将状态设置为 On。
- 单击保存。
- 授予 所需的 Azure 权限.
注意:
如果在 Cloud Connector VM 上启用系统分配的托管标识并使用它来创建主机连接,则即使在 Cloud Connector VM 上禁用系统分配的托管标识后,仍可以使用系统分配的托管标识创建主机连接。 即使在禁用身份 24 小时后,主机连接的创建也可以成功。 发生这种情况是因为托管标识令牌由底层 Azure 基础结构缓存。 有关更多信息,请参阅 是否缓存了托管身份令牌?.
-
-
使用 PowerShell 命令创建具有这种新身份验证类型的主机连接:
- 打开 PowerShell 窗口。
- 运行
asnp citrix
* 以加载特定于 Citrix 的 PowerShell 模块。 -
创建主机连接。 例如:
-
对于用户分配的托管标识:
$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
-
对于系统分配的托管标识:
$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
-
您还可以更新现有主机连接以使用系统分配的标识或用户分配的托管标识。 例如,运行以下 PowerShell 命令:
- 打开 PowerShell 窗口。
- 运行
asnp citrix
* 以加载特定于 Citrix 的 PowerShell 模块。 -
运行以下命令:
$connName = "ConnectionName" $conn = get-item XDHyp:\Connections\$connName $conn.CustomProperties
-
改变
代理虚拟机管理程序TrafficThroughConnector
自真
并添加AuthenticationMode 认证
设置为SystemAssignedManagedIdentity
或UserAssignedManagedIdentity
. 例如:$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>'
- 运行
$cred = Get-Credential
。 在此处输入任何内容。 - 跑
Set-Item -PSPath XDHyp:\Connections\$connName -自定义属性 $CustomProperties -用户名 $cred.username -安全密码 $cred。密码
.
管理服务主体和连接
本部分内容详细介绍了如何管理服务主体和连接:
- 配置 Azure 限制设置
- 管理现有主机连接的服务主体
- 在 Azure 中启用映像共享
- 使用 Studio 将共享租户添加到连接
- 使用 PowerShell 实现映像共享
- 为 Azure 管理的流量创建安全的环境
- 管理应用程序机密和机密过期日期
配置 Azure 限制设置
Azure Resource Manager 限制订阅和租户的请求,从而根据定义的限制路由流量,根据提供商的特定需求量身定制。 请参阅 Microsoft 站点上的限制 Resource Manager 请求,了解详细信息。 订阅和租户存在限制,在这些情况下,管理许多计算机可能会成问题。 例如,包含许多计算机的订阅可能会遇到与电源操作有关的性能问题。
提示:
有关详细信息,请参阅使用 Machine Creation Services 提高 Azure 性能。
为了帮助缓解这些问题,Citrix DaaS 允许您删除 MCS 内部限制,以使用 Azure 中的更多可用请求配额。
我们建议在大型订阅(例如,包含 1,000 个 VM 的订阅)中打开或关闭 VM 的电源时采用以下最佳设置:
- 绝对同时操作:500
- 每分钟最大新操作数:2000
- 操作的最大并发数:500
使用 Studio 为给定的主机连接配置 Azure 操作:
- 从 Studio 中,选择 好客 在左侧窗格中。
- 选择与 Azure 有关的连接以对其进行编辑。
- 在编辑连接向导中,选择高级。
- 在高级页面上,使用配置选项指定同时操作的数量、每分钟执行的最大新操作数以及任何其他连接选项。
默认情况下,MCS 最多支持 500 个并发操作。 或者,您可以使用 Remote PowerShell SDK 设置最大并发操作数。
使用 PowerShell 属性 MaximumConcurrentProvisioningOperations
可指定并发 Azure 预配操作的最大数量。 使用此属性时,请注意:
-
MaximumConcurrentProvisioningOperations
的默认值为 500。 - 使用 PowerShell 命令
Set-item
配置MaximumConcurrentProvisioningOperations
参数。
管理现有主机连接的服务主体
使用服务主体创建主机连接后,您可以选择编辑主机连接使其具有:
- 新的服务主体
- 使用其他现有服务主体
- 从 Studio 中,选择 好客 从左侧窗格。
- 选择连接,然后在操作栏中选择编辑连接。
- 从左侧窗格中选择“连接属性”。
-
在出现的“连接属性”页面上,单击“编辑设置”。 现在,您可以选择创建新的服务主体或使用其他现有服务主体。
- 单击“创建服务主体”以创建新的服务主体。 按照提示登录到您的 Azure AD 用户帐户。 Citrix 使用多租户应用程序 ID
08b70dc3-76c5-4611-ba7d-3312ba36cb2b
为现有主机连接创建新的服务主体并授予适当的权限。 - 单击“使用现有服务”为该主机连接使用其他现有服务主体。
- 单击“创建服务主体”以创建新的服务主体。 按照提示登录到您的 Azure AD 用户帐户。 Citrix 使用多租户应用程序 ID
在 Azure 中启用映像共享
创建或更新计算机目录时,可以选择来自不同的 Azure 租户和订阅的共享映像(通过 Azure Compute Gallery 共享)。 要允许在租户内部或租户之间共享映像,必须在 Azure 中进行必要的设置:
在租户内(跨订阅)共享映像
要在 Azure Compute Gallery 中选择属于其他订阅的映像,必须与该订阅的服务主体 (SPN) 共享该映像。
例如,如果存在服务主体 (SPN 1),则在 Studio 中将其配置为:
服务主体:SPN 1
订阅:订阅 1
租户:租户 1
映像处于不同的订阅中,在 Studio 中将其配置为:
订阅:订阅 2
租户:租户 1
如果您想与订阅 1 (SPN 1) 共享订阅 2 中的镜像,请转到订阅 2,然后与 SPN1 共享资源组。
必须使用 Azure 基于角色的访问控制 (RBAC) 与其他 SPN 共享映像。 Azure RBAC 是用于管理 Azure 资源访问权限的授权系统。 有关 Azure RBAC 的详细信息,请参阅 Microsoft 文档 What is Azure role-based access control (Azure RBAC)(什么是 Azure 基于角色的访问控制 (Azure RBAC))。 要授予访问权限,您可以使用贡献者角色向资源组作用域内的服务主体分配角色。 要分配 Azure 角色,您必须拥有 Microsoft.Authorization/roleAssignments/write
权限,例如用户访问管理员或所有者。 有关与其他 SPN 共享映像的详细信息,请参阅 Microsoft 文档 Assign Azure roles using the Azure portal(使用 Azure 门户分配 Azure 角色)。
在租户之间共享映像
要使用 Azure Compute Gallery 在租户之间共享映像,请创建或更新应用程序注册,并使用此应用程序创建托管连接。
例如,如果有两个租户(租户 1 和租户 2),并且您想与租户 1 共享您的映像库,那么:
-
为租户 1 创建应用程序注册。 有关详细信息,请参阅创建应用程序注册。
-
通过使用浏览器请求登录,授予租户 2 对应用程序的访问权限。 将
租户 2 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
有关详细信息,请参阅向租户 2 授予访问权限。
-
授予应用程序对租户 2 资源组的访问权限。 以租户 2 身份登录并授予应用程序对具有图库图像的资源组的注册访问权限。 有关详细信息,请参阅对跨租户的请求进行身份验证。
使用 Studio 将共享租户添加到连接
在 Studio 中创建或更新计算机目录时,您可以从不同的 Azure 租户和订阅(通过 Azure Compute Gallery 共享)中选择共享映像。 该功能要求您为关联的主机连接提供共享租户和订阅信息。
注意:
确保已在 Azure 中配置了必要的设置,以允许在租户之间共享映像。 有关详细信息,请参阅在租户之间共享映像。
请完成以下步骤以建立连接:
- 从 Studio 中,选择 好客 在左侧窗格中。
-
选择连接,然后在操作栏中选择编辑连接。
- 在共享租户中,执行以下操作:
- 提供与连接的订阅关联的应用程序 ID 和应用程序机密。 DaaS 使用此信息向 Azure AD 进行身份验证。
- 通过连接的订阅添加共享 Azure Compute Gallery 的租户和订阅。 最多可以为每个租户添加八个共享租户和八个订阅。
- 完成后,选择应用以应用您所做的更改并使窗口保持打开,或者选择确定应用更改并关闭窗口。
使用 PowerShell 实现映像共享
本部分内容将指导您完成使用 PowerShell 共享映像的过程:
从其他订阅中选择一个映像
可以在 Azure Compute Gallery 中选择属于同一 Azure 租户中不同共享订阅的映像,以使用 PowerShell 命令创建和更新 MCS 目录。
- 在托管单元根文件夹中,Citrix 创建了一个名为
sharedsubscription
的新共享订阅文件夹。 -
列出租户中的所有共享订阅。
Get-ChildItem -Path "XDhyp:\HostingUnits\azres\sharedsubscription.folder"
-
选择一个共享订阅,然后列出该共享订阅的所有共享资源组。
Get-ChildItem -Path "XDhyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription"
-
选择一个资源组,然后列出该资源组的所有库。
Get-ChildItem -Path "XDhyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription\ xyz.resourcegroup"
-
选择一个库,然后列出该库的所有映像定义。
Get-ChildItem -Path "XDhyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription\xyz.resourcegroup\testgallery.gallery"
-
选择一个映像定义,然后列出该映像定义的所有映像版本。
Get-ChildItem -Path "XDhyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription\xyz.resourcegroup\sigtestdef.imagedefinition"
-
使用以下元素创建和更新 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"]}]
例如:
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
注意:
您可以添加多个租户。 每个租户可以有多个订阅。
从不同的租户中选择映像
可以在 Azure Compute Gallery 中选择属于不同 Azure 租户的映像,以使用 PowerShell 命令创建和更新 MCS 目录。
- 在托管单元根文件夹中,Citrix 创建了一个名为
sharedsubscription
的新共享订阅文件夹。 -
列出所有共享的订阅。
Get-ChildItem XDHyp:\HostingUnits\azres\sharedsubscription.folder
-
选择一个共享订阅,然后列出该共享订阅的所有共享资源组。
Get-ChildItem XDHyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription
-
选择一个资源组,然后列出该资源组的所有库。
Get-ChildItem XDHyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription\ xyz.resourcegroup
-
选择一个库,然后列出该库的所有映像定义。
Get-ChildItem XDHyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription\xyz.resourcegroup\efg.gallery
-
选择一个映像定义,然后列出该映像定义的所有映像版本。
Get-ChildItem XDHyp:\HostingUnits\azres\image.folder\abc123.sharedsubscription\xyz.resourcegroup\efg.gallery\hij.imagedefinition
-
使用以下元素创建和更新 MCS 目录:
- 资源组
- 库
- 库映像定义
- 库映像版本
为 Azure 管理的流量创建安全的环境
MCS 允许通过环境中的 Cloud Connector 路由网络流量(从 Citrix Cloud 到 Azure 虚拟机管理程序的 API 调用)。 此实现可帮助您锁定 Azure 订阅,以允许来自特定 IP 地址的网络流量。 为此,请在 CustomProperties
中添加 ProxyHypervisorTrafficThroughConnector
。 设置自定义属性后,可以将 Azure 策略配置为拥有 Azure 托管磁盘的专用磁盘访问权限。
如果您将 Azure 策略配置为自动为每个新磁盘创建磁盘访问权限以使用私有端点,则不能使用与 Azure 强制执行的相同磁盘访问对象同时上载或下载五个以上的磁盘或快照。 如果您在资源组级别配置 Azure 策略,则此限制适用于每个计算机目录;如果您在订阅级别配置 Azure 策略,则适用于所有计算机目录。 如果您未将 Azure 策略配置为自动为每个新磁盘创建磁盘访问权限以使用私有端点,则不会强制执行五次并发操作的限制。
注意:
目前,Connector Appliance 不支持此功能。 有关与此功能相关的 Azure 限制,请参阅使用 Azure 私有链接限制托管磁盘的导入/导出访问权限。
启用代理
要启用代理,请在主机连接上设置自定义属性,如下所示:
- 使用 Remote PowerShell SDK 打开 PowerShell 窗口。 有关详细信息,请参阅 https://docs.citrix.com/en-us/citrix-daas/sdk-api.html#citrix-virtual-apps-and-desktops-remote-powershell-sdk/。
-
运行以下命令:
Add-PSSnapin citrix*. cd XDHyp:\Connections\ dir
-
将连接中的
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>
-
在 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>'
- 运行
$cred = Get-Credential
。 如果出现提示,请提供连接凭据。 凭据是 Azure 应用程序 ID 和密钥。 -
运行
Set-Item -PSPath XDHyp:\Connections\<Connection_Name> -CustomProperties $customProperty -username $cred.username -Securepassword $cred.password
。-priority
如果您收到一条提示缺失
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>
- 运行
dir
以验证更新的CustomProperties
设置。
管理应用程序机密和机密过期日期
请务必在机密过期之前更改连接的应用程序机密。 在密钥过期之前,您会在 Studio 上收到警报。
在 Azure 中创建应用程序密钥
可以通过 Azure 门户为连接创建应用程序机密。
- 选择 Azure Active Directory。
- 从 Azure AD 中的应用程序注册中,选择您的应用程序。
- 转到证书和密钥。
-
单击“客户端密钥”>“新建客户端密钥”。
-
提供密码的说明并指定持续时间。 完成后,选择“添加”。
注意:
请务必保存客户端密钥,因为您以后将无法检索该密钥。
- 复制客户端机密值和过期日期。
- 在 Studio 中,编辑相应的连接并替换 应用程序密钥 和 密钥过期日期 字段,其中包含您复制的值。
更改密钥到期日期
您可以使用 Studio 添加或修改正在使用的应用程序密钥的到期日期。
- 在添加连接和资源向导中,右键单击某个连接,然后单击编辑连接。
- 在连接属性页面上,单击 Secret expiration date(机密过期日期)以添加或修改正在使用的应用程序机密的过期日期。
使用预先创建的网络安全组
创建用于映像准备的 Deny-All 网络安全组,而不是请求 Citrix 创建和修改 NSG。 使用 PowerShell 命令编辑托管单元的自定义属性 Set-Item (设置项)
以包含参数 NsgForPreparation
以提供 Deny-All 网络安全组。
必备条件
配置服务主体所需的以下权限:
-
Microsoft.Network/networkSecurityGroups/join/action
:将网络安全组关联到子网或网络接口 -
Microsoft.Network/networkSecurityGroups/读取
:获取网络安全组 -
Microsoft.Network/networkSecurityGroups/securityRules/read
:获取规则
添加预先创建的 Deny-All 网络安全组
要添加预先创建的 Deny-All 网络安全组,请在托管单元上设置自定义属性,如下所示:
- 使用 Remote PowerShell SDK 打开 PowerShell 窗口。
-
运行以下命令:
Add-PSSnapin citrix*. cd XDHyp:\HostingUnits\ Dir
-
选择托管单元以检索详细信息:
Get-Item "XDHyp:\HostingUnits\<hostingunitname>"
-
将 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>
-
在 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>"
- 运行
$cred = Get-Credential
。 如果出现提示,请提供连接凭据。 凭据是 Azure 应用程序 ID 和密钥。 -
请运行以下命令:。
Set-Item -PSPath XDHyp:\HostingUnits\<hostingunitname> -CustomProperties $customProperty -username $cred.username -Securepassword $cred.password
-priority
如果您收到一条提示缺失 SubscriptionId 的消息,请将自定义属性中的所有双引号 (“) 替换为反引号,然后是双引号 (`”)。
- 运行
dir
以验证更新的CustomProperties
设置。
注意:
更新需要一分钟多的时间才能反映出来。
检索网络安全组详细信息
要检索网络安全组详细信息,请先检索包含网络安全组的资源组,然后根据资源组名称检索网络安全组。
-
检索包含网络安全组的资源组。 例如:
Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 5 -AdditionalDataFilter '{"containedresourcetypes": ["networksecuritygroup"]}'
-
根据资源组名称检索网络安全组。 例如:
Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType securitygroup -MaxRecords 5 -AdditionalDataFilter '{"location": ["eastus", "westus"], "resourcegroup":["resourcegroupname"]}'
筛选空资源组
使用 PowerShell 命令 Get-HypInventoryItem
在计算机目录创建过程中选择主映像、计算机配置文件或准备好的映像时筛选空资源组。
示例:
-
检索页面中的最大记录数:
Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 5
-
检索页面中的最大记录数,并进行筛选以查找具有特定资源的资源容器。
Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 5 -AdditionalDataFilter '{"containedresourcetypes": ["vm", "manageddisk", "snapshot", "imageversion", "storageaccount"]}'
-
使用 skip 检索以直接指示页面,筛选以查找具有特定资源的资源容器。
Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 5 -skip 20 -AdditionalDataFilter '{"containedresourcetypes": ["vm", "manageddisk", "snapshot", "imageversion", "storageaccount"]}'
-
使用令牌检索下一页,并进行筛选以查找具有特定资源的资源容器。
Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 5 -AdditionalDataFilter '{"containedresourcetypes": ["vm", "manageddisk", "snapshot", "imageversion", "storageaccount"]}' -ContinuationToken 'ew0KICAiJGlkIjogIjEiLA0KICAiTWF4Um93cyI6IDUsDQogICJSb3dzVG9Ta2lwIjogMjUsDQogICJLdXN0b0NsdXN0ZXJVcmwiOiAiaHR0cHM6Ly9hcmctbmV1LTEzLXNmLmFyZy5jb3JlLndpbmRvd3MubmV0Ig0KfQ=='
-
检索带有标签 Citrix 内部标签的所有资源组,并使用
MaxRecords
.Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 5
-
使用标签筛选计算机配置文件(主映像)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"]}'
-
使用标签 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"]}'
-
检索所有资源组,而不考虑标签
Citrix资源
.Get-HypInventoryItem -LiteralPath "XDHyp:\HostingUnits\ctx04con01unit01" -ResourceType resourceGroup -MaxRecords 50 -AdditionalDataFilter '{"containedresourcetypes": ["manageddisk", "snapshot", "imageversion", "storageaccount"]}' -Force $true
所需的 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"
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",
创建、更新或删除 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"
您需要根据以下功能的最低权限获得下列额外的权限:
-
如果主映像是与主机连接位于同一区域的存储帐户中的 VHD:
"Microsoft.Storage/storageAccounts/read", "Microsoft.Storage/storageAccounts/listKeys/action",
-
如果主映像是 Azure Compute Gallery(以前为共享映像库)中的 ImageVersion:
"Microsoft.Compute/galleries/read", "Microsoft.Compute/galleries/images/read", "Microsoft.Compute/galleries/images/versions/read",
-
如果主映像是托管磁盘、快照或 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",
-
如果您使用 Citrix 管理的资源组:
"Microsoft.Resources/subscriptions/resourceGroups/write", "Microsoft.Resources/subscriptions/resourceGroups/delete",
-
如果您将主映像放入共享租户或订阅的 Azure Compute Gallery(以前称为“共享映像库”)中:
"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",
-
如果您使用 Azure 专用主机支持:
"Microsoft.Compute/hostGroups/read", "Microsoft.Compute/hostGroups/write", "Microsoft.Compute/hostGroups/hosts/read",
-
如果您将服务器端加密 (SSE) 与客户管理的密钥 (CMK) 一起使用:
"Microsoft.Compute/diskEncryptionSets/read",
-
如果您使用 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",
-
如果使用 Azure 模板规范作为计算机配置文件:
"Microsoft.Resources/templateSpecs/read", "Microsoft.Resources/templateSpecs/versions/read",
创建、更新和删除包含非托管磁盘的计算机
下面是主映像为 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",
成本管理
以下是检索 VM 定价所需的最低权限:
"Microsoft.Consumption/pricesheets/read"
一般权限
贡献者角色拥有管理所有资源的完全访问权限。 这组权限不会阻止您获取新功能。
以下权限集提供了将来的最佳兼容性,尽管它包含的权限超过了当前功能集所需的权限亦如此:
"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"
配置所需的 Azure 主机连接权限
你可以在 Azure 中轻松配置绑定到主机连接的服务主体或用户帐户所需的所有最低权限,以便使用 ARM 模板执行所有 MCS 操作。 此 ARM 模板可自动执行以下操作:
- 创建具有操作所需最低权限的 Azure 角色。
- 在订阅级别将此角色分配给现有 Azure 服务主体。
你可以使用 Azure 门户或 PowerShell 命令部署此 ARM 模板。 有关更多信息,请参阅 适用于 Citrix Virtual Apps and Desktops 操作的 ARM 模板.
验证主机连接的权限
可以验证主机连接的权限,以执行与创建和管理 MCS 计算机目录有关的任务。 此实施可帮助您提前找出创建、删除和更新 VM、VM 的电源管理等不同场景所需的缺失权限,从而避免在关键时刻被阻止。
您可以使用 PowerShell 命令验证主机连接的权限 Test-HypHypervisorConnection
. 该命令的结果捕获为一个列表,其中列表中的每个项目分为三个部分。
- 类别:用户在创建和管理 MCS 计算机目录时可以执行的操作或任务。
- 更正操作:管理员为解决用户缺少的权限差异而必须执行的步骤。
- 缺少的权限:类别缺少的权限列表。
要验证权限,请执行以下操作:
- 创建与 Azure 的主机连接。
- 从 Delivery Controller 主机打开 PowerShell 窗口。
- 运行
asnp citrix
* 以加载特定于 Citrix 的 PowerShell 模块。 -
运行以下命令以验证您是否具有测试连接所需的权限。
Test-HypHypervisorConnection -LiteralPath "XDHyp:\Connections\AzureCon"
SPN 所需的角色级别权限:
- Microsoft.Authorization/roleDefinitions/read(如果提供资源组,则为订阅级别或资源组级别)
- Microsoft.Authorization/roleAssignments/read(如果提供了资源组,则在订阅级别或资源组级别)
SPN 所需的 API 级别权限:
Microsoft.Graph:
- Application.Read.All
- Directory.Read.All
- ServicePrincipalEndpoint.Read.All
-
添加查找权限所需的缺失权限后,请运行以下命令以验证您是否拥有各种类别中的权限。
Example:
要测试具有更高授权级别的订阅级别的连接,请执行以下操作:
Test-HypHypervisorConnection -LiteralPath XDHyp:\Connections\ AzureCon -SecurePassword $password -UserName 922e65d5-38ae-4cf5-xxxx-xxxxxxxxx
Example:
要在没有高级别授权的情况下在资源组级别测试连接:
Test-HypHypervisorConnection -LiteralPath XDHyp:\Connections\testles -CustomProperties $customProperties | Format-List
注意:
这
自定义属性
parameter 用于提供资源组级别,因为 Resource Group 是特定于连接的信息。Example:
要在资源组级别测试具有更高级别授权的连接,请执行以下操作:
Test-HypHypervisorConnection -LiteralPath XDHyp:\Connections\testles -SecurePassword $password -UserName 922e65d5-38ae-4cf5-832b-54122196b7dd -CustomProperties $customProperties
有关权限的信息,请参阅 所需的 Azure 权限.
下一步的去向
- 如果您处于初始部署过程中,请参阅创建计算机目录。
- 有关 Azure 的特定信息,请参阅创建 Microsoft Azure 目录。