要让第一代 Horizon Cloud 应用程序注册能够在容器的订阅(或可选的外部网关订阅)中进行 API 调用并执行其 VDI 相关操作,必须为其分配一个角色。通常使用 Contributor
角色实现此目的。对于想要避免使用 Contributor
角色的组织,他们可以创建自定义角色,让自定义角色来实现赋予 Horizon Cloud 应用程序注册能够执行所需 API 调用能力的目的。
除了将自定义角色用于容器订阅中的 Horizon Cloud 应用程序注册外,如果您的组织希望采用将单独的订阅用于容器外部 Unified Access Gateway 配置的方法,并选择将网关资源部署到贵组织为实现此目的而设置的特定资源组中,该网关订阅的自定义角色可以拥有比容器订阅的自定义角色更精细且范围更窄的权限。
自定义角色简介
最基本的概念是,Horizon Cloud 需要在容器的订阅及其资源组中执行特定的操作,以成功创建和维护设置容器及其网关配置所需的资源。
作为一个简单示例,由于容器和网关架构需要使用具有网卡的虚拟机,因此,Horizon Cloud 需要能够在您的订阅中创建虚拟机和网卡,并将这些网卡连接到订阅的 VNet 中的子网。
在 Microsoft Azure 中,角色将提供一组可由应用程序注册的服务主体执行的管理操作。管理操作是资源和对该资源执行的操作的组合。
您可以按照下面所述的规则,将容器订阅和(可选)网关订阅中的 Horizon Cloud 应用程序注册功能限制为所需的最低操作。
可用用例概述
在讨论 Horizon Cloud 在订阅和资源组中所需的操作时,可以使用以下用例。
用例 | 描述 |
---|---|
Horizon Cloud 将单个订阅用于容器及其外部 Unified Access Gateway 配置。 | 在该用例中,必须在容器的订阅级别为服务主体授予访问权限。在该级别分配给服务主体的角色必须允许 Horizon Cloud 需要在您的订阅中执行的操作,以便在该订阅中成功创建所需的资源,并在一段时间内对这些资源执行操作。例如,在该用例中,角色必须提供创建默认资源组、网络安全组、虚拟机等的功能。 |
两个订阅,并且您希望 Horizon Cloud 在外部网关的指定订阅中自动创建网关的所需资源组和资源,这与在容器的订阅中相同。
|
在使用该选项时,必须在订阅级别为每个订阅的服务主体授予访问权限,并且允许执行操作的权限与上述单订阅用例相同。 |
如上所述的两个订阅,但您在外部网关的指定订阅中提前创建一个资源组,并希望 Horizon Cloud 将外部网关的资源部署到该现有资源组中,而不是让 Horizon Cloud 自动创建该外部网关的所需资源组和资源。 | 可通过两个选项为用于部署外部网关的服务主体授予访问权限:
|
当您的 VNet 具有自定义路由时。Microsoft Azure 云具有一项称为自定义路由的功能。 | 如果您的 VNet 具有自定义路由,则除了上述用例的所有权限外,还需要一项权限:Microsoft.Network/routeTables/join/action 。 |
在将单个订阅用于容器及其网关配置时,或者将单独的订阅用于外部 Unified Access Gateway 配置并在订阅级别设置权限时
对于这些用例,将在订阅级别分配权限。自定义角色必须允许下表中的操作。*
(通配符)可授予对与列出的操作中的字符串匹配的所有操作的访问权限。
以下 JSON 代码块是一个示例,说明了名为 Horizon Cloud 容器的自定义角色定义在具有一组上述操作时的外观。ID 是自定义角色的唯一 ID。使用 Azure PowerShell 或 Azure CLI 创建自定义角色时,将自动生成此 ID。对于变量 mysubscriptionId1,会替换为将在其中使用自定义角色的订阅的 ID,即容器的订阅或(可选)网关订阅。
{ "Name": "Horizon Cloud Pod", "Id": "uuid", "IsCustom": true, "Description": "Minimum set of Horizon Cloud pod required operations", "Actions": [ "Microsoft.Authorization/*/read" "Microsoft.Compute/*/read" "Microsoft.Compute/availabilitySets/*" "Microsoft.Compute/disks/*" "Microsoft.Compute/images/*" "Microsoft.Compute/locations/*" "Microsoft.Compute/virtualMachines/*" "Microsoft.Compute/virtualMachineScaleSets/*" "Microsoft.Compute/snapshots/*" "Microsoft.DBforPostgreSQL/*" "Microsoft.KeyVault/*/read" "Microsoft.KeyVault/vaults/*" "Microsoft.KeyVault/vaults/secrets/*" "Microsoft.Network/loadBalancers/*" "Microsoft.Network/networkInterfaces/*" "Microsoft.Network/networkSecurityGroups/*" "Microsoft.Network/publicIPAddresses/*" "Microsoft.Network/virtualNetworks/read" "Microsoft.Network/virtualNetworks/write" "Microsoft.Network/virtualNetworks/checkIpAddressAvailability/read" "Microsoft.Network/virtualNetworks/subnets/*" "Microsoft.Network/virtualNetworks/virtualNetworkPeerings/read" "Microsoft.Resources/subscriptions/resourceGroups/*" "Microsoft.ResourceHealth/availabilityStatuses/read" "Microsoft.Resources/deployments/*" "Microsoft.Storage/*/read" "Microsoft.Storage/storageAccounts/*" "Microsoft.Compute/galleries/read" "Microsoft.Compute/galleries/write" "Microsoft.Compute/galleries/delete" "Microsoft.Compute/galleries/images/*" "Microsoft.Compute/galleries/images/versions/*" "Microsoft.MarketplaceOrdering/offertypes/publishers/offers/plans/agreements/read" "Microsoft.MarketplaceOrdering/offertypes/publishers/offers/plans/agreements/write" ], "NotActions": [], "DataActions": [], "NotDataActions": [], "AssignableScopes": [ "/subscriptions/mysubscriptionId1" ] } |
当自定义路由位于 VNet 及其子网中时
Microsoft Azure 云具有一项称为自定义路由的功能。
如果将此类路由添加到 VNet 及其子网中,则需要此附加权限。
操作 | Microsoft Azure 文档中的说明 |
---|---|
Microsoft.Network/routeTables/join/action |
https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftnetwork |
将单独的订阅用于外部 Unified Access Gateway 配置,部署到自定义资源组,在订阅级别分配读取者角色并在更精细级别分配其他所需权限时
对于此用例,在外部网关的订阅级别,您的组织可以将内置 Reader
角色用于 Horizon Cloud 应用程序注册,并在指定资源组级别使用自定义角色。
您的组织将创建一个自定义角色,用于指定下表中的权限。然后,该自定义角色将分配给 Horizon Cloud 应用程序注册,以用于外部网关订阅中专门指定的资源组。您或您的组织将在要部署外部网关的订阅中预先创建指定的资源组。
子网和 VNet 上的一些特定权限也是必需的,具体取决于您计划的部署选项:
- 如果该外部网关部署将使用您提前创建的子网,则 Horizon Cloud 需要能够在这些子网上创建网卡和网络安全组 (NSG)。子网所属的 VNet 上所需的权限是
Microsoft.Network/virtualNetworks/subnets/*
和Microsoft.Network/networkSecurityGroups/*
。 - 如果该外部网关部署让 Horizon Cloud 生成子网,除了上述的
Microsoft.Network/virtualNetworks/subnets/*
和Microsoft.Network/networkSecurityGroups/*
权限以外,Horizon Cloud 还需要能够创建子网。订阅的 VNet 上所需的权限为Microsoft.Network/virtualNetworks/write
- 如果您的部署指定将公共 IP 地址用于外部网关配置,则 Horizon Cloud 需要能够在指定的资源组中创建公共 IP 地址。指定的资源组上所需的权限为
Microsoft.Network/publicIPAddresses
需要在指定的资源组中执行以下允许的操作。*
(通配符)可授予对与所列资源提供程序操作中的字符串匹配的所有操作的访问权限。