PoC 指南:Citrix DaaS 支持的 Google 云端平台 (GCP) 共享 VPC

概述

Citrix DaaS 支持的 Google 云端平台 (GCP) 共享 VPC。本文档涵盖:

  • Citrix 对 Google Cloud 共享 VPC 的支持概述。

  • 与 Google Cloud 共享 VPC 相关的术语概述。

  • 配置 Google Cloud 环境以支持使用共享 VPC。

  • 使用 Google 共享 VPC 进行主机连接和计算机目录配置。

  • 常见错误情况以及如何解决它们。

必备条件

本文档假定了解谷歌云以及使用 Citrix DaaS 在谷歌云项目中置备计算机目录。

要为 Citrix DaaS 设置 GCP 项目,请参阅 产品文档

摘要

Citrix MCS 对配置和管理部署到共享 VPC 的计算机目录的支持在功能上等同于当今本地 VPC 支持的功能。

它们有两种不同的方式:

  • 必须向用于创建主机连接的服务帐户授予更多权限,以允许 MCS 访问和使用共享 VPC 资源。

  • 站点管理员必须创建两个防火墙规则,每个规则用于入口和出口,以便在映像母带处理过程中使用。

这两个问题将在本文后面进行更详细的讨论。

谷歌云共享 VPC

GCP 共享 VPC 由一个主机项目(共享子网可从中使用)和一个或多个利用这些资源的服务项目组成。

对于大型安装而言,使用共享 VPC 是一个不错的选择,因为它们可以更集中地控制、使用和管理共享的公司 Google 云资源。谷歌云以这种方式描述它:

“共享 VPC 允许 组织 将来自多个项目的资源连接到一个通用的 虚拟私有云 (VPC) 网络,这样它们就可以使用来自该网络的内部 IP 安全高效地相互通信。使用共享 VPC 时,您将项目指定为托管项目,并将一个或多个其他服务项目附加到该项目。宿主项目中的 VPC 网络称为共享 VPC 网络。来自服务项目的合格资源可以使用共享 VPC 网络中的子网。

以上段落摘自 Google 文档网站

需要新权限

使用 Citrix DaaS 和 Google Cloud 时,必须在创建主机连接时提供具有特定权限的 GCP 服务帐户。如上所述,要使用 GCP 共享 VPC,必须向用于创建基于共享 VPC 的主机连接的任何服务帐户授予一些额外权限。

从技术上讲,所需的权限不是“新的”,因为在将 Citrix DaaS 与 GCP 和本地 VPC 结合使用时已经需要这些权限。更改是,必须授予权限才能访问共享 VPC 资源。这是通过将服务帐户添加到主机项目的 IAM 角色来实现的,本文档的“如何操作”部分将详细介绍。

注意:

要查看当前发布的 Citrix DaaS 产品所需的权限,请参阅 描述资源位置的 Citrix 文档站点

总体而言,必须向与主机连接关联的服务帐户授予最多四个额外权限:

  1. 计算.firewalls.list-强制性

    此权限对于允许 Citrix MCS 检索共享 VPC 上存在的防火墙规则列表是必要的(下文将详细讨论)。

  2. compute.networks.list - 必填

    此权限对于允许 Citrix MCS 识别服务帐户可用的共享 VPC 网络是必需的。

  3. 计算.subnetworks.list — 可能是 强制性的(见下文)

    此权限对于允许 MCS 识别可见共享 VPC 中的子网是必要的。

    注意:

    使用本地 VPC 已经需要此权限,但也必须在共享 VPC 主机项目中分配此权限。

  4. compute.subnetworks.use- 可能是 强制性的(见下文)

    此权限是使用已置备计算机目录中的子网资源所必需的。

    注意:

    使用本地 VPC 已经需要此权限,但也必须在共享 VPC 主机项目中分配此权限。

最后两项被标记为“可能是必需 的”,因为在处理这些权限时需要考虑两种不同的方法:

  • 项目级 权限

    • 允许访问主机项目中的所有共享 VPC。

    • 要求必须将 #3 和 #4 权限分配给服务帐号。

  • 子网级 权限

    • 允许访问共享 VPC 中的特定子网。

    • 权限 #3 和 #4 是子网级别分配的固有权限,因此无需直接分配给服务帐户。

本文档的“如何操作”部分提供了这两种方法的示例。

任何一种方法都将同样有效。请选择更符合贵组织需求和安全标准的模型。有关项目级权限和子网级权限之间差异的更多详细信息,请参阅 Google Cloud 文档

主持项目

要在 Google Cloud 中使用共享 VPC,请首先指定并启用一个 Google Cloud 项目作为托管项目。此主机项目包含组织内其他 Google Cloud Projects 使用的一个或多个共享 VPC 网络。

配置共享 VPC 主机项目、创建子网以及与其他 Google Cloud Projects 共享整个项目或特定子网,纯粹是与 Google Cloud 相关的活动,不包括在本文档的范围内。有关创建和使用 共享 VPC 的 Google Cloud 文档可 在此处找到。

防火墙规则

置备或更新计算机目录时发生的幕后处理的关键步骤称为 母带化。这是复制选定的计算机映像并准备好作为目录的主映像系统磁盘的时候。在母带控制过程中,此磁盘连接到临时虚拟机即 准备 机,然后启动以允许准备脚本运行。此虚拟机需要在隔离环境中运行,以防止 所有 入站和出站网络流量。这是通过一对 Deny-All 防火墙规则完成的;一个用于入口,一个用于出口。

使用 GCP Local VPC 时,MCS 会在本地网络中动态创建此防火墙规则对,将它们应用到计算机进行母带控制,并在主控完成后将其删除。

Citrix 建议将使用共享 VPC 所需的新权限数量保持在最低水平,因为共享 VPC 是更高级别的公司资源,通常具有更严格的安全协议。因此,站点管理员必须在每个具有最高优先级的共享 VPC 上创建一对防火墙规则(一个入口和一个出口),并对每个规则应用新的 目标标签 。“目标标签”值为:

citrix-provisioning-quarantine-firewall

当 MCS 创建或更新计算机目录时,它将搜索包含此目标标签的防火墙规则,检查规则的正确性,然后将它们应用到 准备 计算机。

如果未找到防火墙规则或找到规则,但规则或优先级不正确,则将返回以下形式的消息:

Unable to find valid INGRESS and EGRESS quarantine firewall rules for VPC \<name\> in project \<project\>. Please ensure you have created deny all firewall rules with the network tagcitrix-provisioning-quarantine-firewall and proper priority. Refer to Citrix Documentation for details.

Cloud Connector

将共享 VPC 用于 Citrix DaaS 计算机目录时,您将创建两个或多个云连接器来访问位于共享 VPC 中的域控制器。这种情况下,建议在本地项目中创建一个 GCP 计算机实例,然后向实例添加额外的网络接口。第一个接口将连接到共享 VPC 中的子网。第二个网络接口将连接到本地 VPC 中的子网,以允许通过本地 VPC 堡垒服务器进行管理控制和维护。

很遗憾,在创建 GCP 实例之后,您无法将网络接口添加到该实例。这是一个简单的过程,下文将在“如何操作”条目之一中介绍。

如何分区

以下部分包含一系列指导性示例,可帮助您了解在 Citrix DaaS 中使用 Google 共享 VPC 时执行必要的配置更改的步骤。

Google 控制台屏幕截图中提供的示例都将在名为 共享 VPC 项目 1 的假设 Google 项目中进行。

如何:创建新的 IAM 角色

需要向创建主机连接时使用的服务帐户授予一些额外权限。由于部署到共享 VPC 的目的是允许多个项目部署到同一个共享 VPC,最有效的方法是在宿主项目中创建具有所需权限的新角色,然后将该角色分配给需要访问共享 VPC 的任何服务帐户。

下面我们将创建名为 Citrix-ProjectLevel-SharedVpcRole 的项目级角色。对于分配的前两组权限,子网级角色只需遵循相同的步骤。

谷歌控制台中的 IAM 和管理员

在 Google 云控制台中访问 IAM 和管理员 配置选项:

IAM 和管理员配置选项

创建角色

选择 创建角色

创建角色选项

空“创建角色”屏幕

出现类似以下内容的屏幕:

空“创建角色”屏幕

填写名称并添加权限

指定 角色名称。单击 添加权限 以应用更新:

角色名称规范

添加权限对话框

单击“添加权限”后,将出现类似于下面一次的屏幕。

请注意,在此图片中,“筛选表”文本输入字段被突出显示:

突出显示过滤表文本输入

添加计算.firewalls.list 权限

单击 筛选器表 文本输入字段将显示上下文菜单:

上下文菜单

compute.firewalls.list 复制并粘贴(或键入)到文本字段中,如下所示:

向文本字段添加字符串

选择已从权限表中过滤掉的 compute.firewalls.list 条目会出现以下对话框:

“权限”对话框

单击切换框以启用权限:

启用权限

单击 添加

创建角色 屏幕将重新出现。请注意,已将 compute.firewalls.list 权限添加到角色中:

创建角色屏幕

添加计算te.networks.list 权限

使用与上述相同的步骤,添加 compute.networks.list 权限。但是,请务必选择正确的规则。如下所示,在 筛选器表字段中 输入权限文本时,将列出两个权限。选择 compute.networks.list 条目:

选择正确的权限

正确的权限条目

单击 添加

添加到我们的角色中的两个强制权限:

强制权限角色

项目级别或子网级

使用子网级访问权限确定角色具有的访问级别,例如项目级访问权限或更受限的模型。出于本文档的目的,我们当前正在创建名为 Citrix-ProjectLevel-SharedVpc Role 的角色,因此我们将使用上述步骤添加 compute.subnetworks.listcompute.subnetworks.use 权限。在单击“创建”之前,生成的屏幕看起来像这样,已授予四个权限:

已授予四个权限

单击 CREATE(创建)。

注意:

如果子网级角色是在此创建的,我们本来会单击创建,而不是添加两个额外的 compute.subnetworks.listcompute.subnetworks.use 权限。

Citrix-ProjectLevel-SharedVpc 角色已创建

子网级角色

如何:将服务账号添加到托管项目 IAM 角色

现在我们已经创建了新的 Citrix-ProjectLevel-SharedVpc Role,我们需要在宿主项目中向其添加一个服务帐户。在本示例中,我们将使用名为 citrix-shared-vpc-service-account 的服务帐户。

导航到 IAM 和管理员

第一步是导航到项目的 IAM 和角色 屏幕。在控制台中,选择 IAM 和管理员。选择 IAM

IAM 选择

项目权限屏幕

添加具有指定权限的成员。单击 添加 以显示成员列表:

显示成员列表

添加成员面板

单击“添加”将 显示一个小面板,如下图所示。将在以下步骤中输入数据。

添加成员面板

添加服务帐户

开始在字段中键入服务帐户的名称。在您输入时,Google Cloud 将搜索您有权访问的项目,并显示缩小可能匹配项目的列表。在这种情况下,我们有一个匹配项(直接显示在填写下方),因此我们选择该条目:

服务帐户条目

角色选择

在指定 成员名称 (在我们的例子中为服务帐号)后,选择服务账号的角色,以便像在共享 VPC 项目中一样运行。通过单击指示的列表开始此过程:

为服务帐户选择角色

选择角色

请注意,“选择角色”流程与之前的“如何操作-创建新 IAM 角色”中使用的流程类似。在这种情况下,将显示其他几个选项以及填写。

更多选择角色选项

指定角色

既然我们知道我们想申请的角色,我们就可以开始输入。出现预期角色后,选择角色:

角色选择

选择并保存

选择角色后,单击 保存

保存角色

我们现在已成功将服务帐户添加到主机项目中。

如何:子网级权限

如果您选择使用子网级访问而不是项目级访问权限,则必须将要用于共享 VPC 的服务帐户添加为表示要访问的资源的每个子网的成员。对于此“如何操作”部分,我们将为名为 sharedvpc-sa\@citrix-mcs-documentation.iam.gserviceaccount.com 的服务帐户提供对共享 VPC 中单个子网的访问权限。

导航到 VPC > 共享 VPC

第一步是导航到 Google 控制台中的共享 VPC 屏幕:

共享 VPC 屏幕

初始共享 VPC 屏幕

这是 Google Cloud Console 共享 VPC 屏幕的登录页面。该项目显示了五个子网。本示例中的服务帐户需要访问第二个 子网良好 的子网(下面列表中的最后一个子网)。

选中第二个子网 良好子网旁边的 复选框:

Subnets

选择访问服务帐户的子网

现在已选中最后一个子网的复选框,请注意, 添加成员 选项出现在屏幕的右上角。

本练习还应注意与该子网共享的用户数量。如上所述,一个用户可以访问此子网。

点击 添加成员

添加成员选项

填写新成员姓名

与前面的“如何执行”部分中将服务帐户添加到宿主项目所需的步骤类似,此处也需要提供新成员名称。填写名称后,Google Cloud 将列出所有相关项目(如以前一样),以便我们可以选择相关的服务帐号。在这种情况下,它只是一个条目。

双击 服务帐户 以将其选中:

服务帐户选项

为新成员选择角色

选择服务帐户后,还需要为新成员选择一个角色:

  1. 在列表中,单击 选择角色

  2. 双击计 算网络用户 角色。

计算机网络用户角色

已选择角色

该图显示已指定服务帐户和角色。剩下的唯一步骤是单击“保存”以提交更改:

选择角色

用户已添加到子网

保存更改后,将显示共享 VPC 的主屏幕。请注意,有权访问最后一个子网的用户数量正如预期的那样增加到两个:

已添加成员

如何:将项目 CloudBuild 服务账号添加到共享 VPC

每个谷歌云订阅都有一个服务帐号,该帐号以项目 ID 号命名,后跟 cloudbuild.gserviceaccount。一个全名示例(使用制作的项目 ID)是:

705794712345@ cloudbuild.gserviceaccount。

还需要将此 cloudbuild 服务帐户 添加为共享 VPC 的成员,就像在操作方法 :将服务帐户添加到主机项目 IAM 角色的步骤 3 中用于创建主机连接的服务账号一样。

您可以通过在 Google Cloud Console 菜单中选择“主页”和“控制 面板”来确定项目的项目 ID 号码是什么:

项目 ID 号

在屏幕的“项目信息”区域下找到项目编号。

添加成员 字段中输入项目编号/cloudbuild.gserviceaccount 帐户组合。分配 计算机网络用户的角色:

分配角色

选择保存

如何:防火墙规则

创建所需的防火墙规则比创建角色容易一些。

选择主机项目

如本文档前面所述,需要在宿主项目中创建两个防火墙规则。

确保您已经选择了 宿主项目

VPC 网络 > 防火墙

从谷歌控制台菜单中,导航到 VPC > 防火墙,如下所示:

防火墙选项

创建防火墙规则按钮

Google 控制台中的防火墙屏幕顶部包含一个用于创建新规则的按钮。

单击 创建防火墙规则

创建防火墙规则

创建新的防火墙屏幕

用于创建新防火墙规则的屏幕如下所示:

创建新的防火墙规则

入口规则:填写数据

首先,通过向以下字段添加或更改值来创建 所需的拒绝所有入口 规则:

  • 名称

    为 Deny-All Ingress 防火墙规则命名。例如, citrix-deny-all-ingress-rule

  • 网络

    选择此入口防火墙规则将针对的共享 VPC 网络。例如,gcp-test-vpc

  • 优先级

    该字段中的值至关重要。在防火墙规则的世界中,优先级值越 ,规则的优先级 越高 。这就是为什么所有默认规则的值都为 66536,因此任何自定义规则(其值小于 65536)都优先于任何默认规则。

    对于这两条规则,我们需要它们在网络上拥有最高优先级的规则。我们将使用 10 的值。

  • 交通方向

    创建新规则的默认设置为 Ingress,应该已经被选中。

  • 比赛时的操作

    此值将默认为“允许”。我们需要将其更改为 拒绝

  • 目标

    这是另一个非常关键的领域。目标的默认类型是 指定的目标标签,这正是我们想要的。在标有 Target Tags 的文本框中,输入值 citrix 置备隔离防火墙。

  • 来源过滤器

    对于源过滤器,我们将保留 IP 范围 的默认筛选器类型,并输入匹配 所有 流量的范围。为此,我们使用 0.0.0.0/0 的值。

  • 协议和端口

    在“协议和端口”下,选择“全部拒绝”。

完成的屏幕应该是这样的:

最终屏幕

单击 C REATE 并生成新规则。

出口规则:填写数据

出口规则与之前创建的入口规则几乎相同。如上所示,再次使用 C REATE FIREWALE 规则 ,然后填写下面详细说明的字段:

  • 名称

    为“拒绝所有出口”防火墙规则命名。在这里我们将它称之为 citrix-Deny-Gegress 规则。

  • 网络

    在此处选择创建上述入口防火墙规则时使用的同一共享 VPC 网络。例如,gcp-test-vpc

  • 优先级

    如上所述,我们将使用值 10。

  • 交通方向

    对于此规则,我们需要更改默认值,然后选择“出口”。

  • 比赛时的操作

    此值将默认为“允许”。我们需要将其更改为 拒绝

  • 目标

    目标标签 字段中输入 Citrix 置备隔离防火墙 的值。

  • 来源过滤器

    对于 源过滤器,我们将保留 IP 范围 的默认筛选器类型,并输入匹配 所有 流量的范围。为此,我们使用 0.0.0.0/0 的值。

  • 协议和端口

    在“协议和端口”下,选择“全部拒绝”。

完成的屏幕应该是这样的:

已完成规则屏幕

单击“创建”以生成新规则。

已创建了两个必要的防火墙规则。如果在部署计算机目录时将使用多个共享 VPC,请重复上述步骤。在各自的主机项目中,为每个已识别的共享 VPC 创建两个规则。

如何:将网络接口添加到 Cloud Connector 实例

创建用于共享 VPC 的 Cloud Connector 时,需要 在创建实例时向其添加额外的网络接口。

实例存在后,无法添加其他网络接口。要添加第二个网络接口:

GCP 实例的初始网络设置面板

这是首次创建网络实例时显示的网络设置的初始面板

网络设置面板

由于我们想将第一个网络实例用于共享 VPC,因此单击 铅笔 图标进入 编辑 模式。

扩展的网络设置屏幕如下。值得注意的一个关键事项是,我们现在可以直接在 网络接口横幅下方看到与我共享的网络选项(来自主机项目:citrix-shared-vpc-project-1)

与我共享的网络选项

选择了 共享 VPC 的“网络设置”面板显示:

  • 已选择共享 VPC 网络。

  • 选择了 子网良好 的子网。

  • 将外部 IP 地址的设置修改为“无”

网络设置面板

单击“完成”保存更改。单击 添加网络接口

添加第二个网络接口

我们现在有第一个接口连接到共享 VPC(如上所示)。我们可以使用创建新 Cloud Connector 时通常使用的相同步骤配置第二个接口。选择网络、子网,对外部 IP 地址做出决定,然后单击“完成”:

第二个网络接口

如何:创建主机连接和托管单元

创建用于共享 VPC 的主机连接与创建用于本地 VPC 的主机连接没有太大区别。区别在于选择要与主机连接关联的资源。创建主机连接以访问共享 VPC 资源时,请使用与置备计算机所在的项目相关的服务帐户 JSON 文件。

凭据和连接名称

为使用共享 VPC 资源创建主机连接类似于创建任何其他 GCP 相关的主机连接:

主机连接

选择项目和地区

将您的项目(在下图中显示为 开发人员项目 )添加到可以访问共享 VPC 的列表后,您可能会在 Studio 中看到您的项目 共享 VPC 项目。务必确保选择部署的计算机目录应该驻留的项目,而 是共享 VPC:

选择项目和地区

选择资源

选择与主机连接关联的资源。

请注意以下事项:

  • 为资源指定的名称是 SharedVPCResources。

  • 可供选择的虚拟网络列表包括本地项目中的虚拟网络以及来自共享 VPC 的虚拟网络,如网络名称后附加的 (共享) 所示。

注意:

如果您没有在名称后看到任何带有 共享 的网络,请单击“返回”按钮并验证您选择了正确的项目。如果您验证所选项目是否正确,但仍未看到任何共享 VPC,则 Google Cloud Console 中的某些内容配置错误。请参阅本文档后面的 常见问题和错误

可能的错误

选择的资源

下图显示在上一步中选择了 gcp-test-VPC(共享) 虚拟网络。它还显示名为 subnet-良好 的子网已被选中。单击 Next(下一步):

选定的资源

摘要屏幕

单击 下一步后, 将显示 摘要屏幕 。在此屏幕中,请考虑:

  • 该项目是 开发者项目

  • 虚拟网络是 gcp-test-VPC,一个来自共享 VPC。

  • 子网是 子网良好的。

“摘要”屏幕

如何:创建目录

从此开始,所有内容,例如目录创建、启动/停止计算机、更新计算机等,都与使用本地 VPC 时完全相同。

常遇到的问题和错误

使用任何具有相互依赖性的复杂系统可能会导致意外情况。在执行设置和配置以使用 Citrix DaaS 和 GCP 共享 VPC 时可能会遇到的一些常见问题和错误可以在下面找到。

防火墙规则缺失或不正确

如果未找到防火墙规则,或者找到规则但规则或优先级不正确,则将返回以下形式的消息:

“在项目 <project> 中找不到 VPC 的 有效 INGRESS 和 EGRESS 隔离防火墙规则。“请确保您已创建“拒绝所有” 防火墙规则,其网络标记为“citrix-provisioning-quarantine-firewall” 和适当的优先级。“ “有关详细信息,请参阅 Citrix 文档。“);

如果遇到此消息,则必须查看防火墙规则、其优先级以及它们适用于哪些网络。有关详细信息,请参阅“操作 方法-防火墙 规则”部分。

创建主机连接时缺少共享资源

出现这种情况的原因有几个:

创建主机连接时选择了不正确的项目

例如,如果在创建主机连接而不是项目时选择了共享 VPC 主机项目,则您仍将看到共享 VPC 中的网络资源, 它们不会附加 (共享)

如果您看到的是没有这些额外信息的共享子网,则主机连接可能是使用错误的服务帐户建立的。

请参阅 如何创建主机连接和托管 单元

为服务帐户分配了错误的角色

如果为服务帐户分配了错误的角色,则可能无法访问共享 VPC 中的所需资源。请参阅 如何-添加服务帐号以托管项目 IAM 角色

授予角色的权限不完整或不正确

可以将正确的角色分配给服务帐号,但角色本身可能不完整。请参阅 操作方法-创建新 IAM 角色

服务帐号未添加为子网成员

如果您使用的是子网级别访问权限,请确保服务帐户已正确添加为所需子网资源的成员(用户)。请参阅 如何使用子网级权限

在 Studio 中找不到路径错误

如果您在表单的 Studio 中创建目录时收到错误:

Cannot find path “XDHyp:\\Connections …” because it does not exist

很可能的情况是,创建新的 Cloud Connector 不是为了方便使用共享 VPC 资源。在完成上述所有步骤来配置所有内容之后,您可以忽略一下。有关创建 Cloud Connector的 要点,请参阅Cloud Connector。