Citrix Virtual Apps and Desktops

Google Cloud 环境

Citrix Virtual Apps and Desktops 允许您在 Google Cloud 上预配和管理计算机。本文将指导您使用 Machine Creation Services (MCS) 在您的 Citrix Virtual Apps 或 Citrix Virtual Desktops 服务部署中预配虚拟机。

要求

  • Citrix Cloud 帐户。本文中介绍的功能仅在 Citrix Cloud 中提供。
  • Citrix DaaS 订阅。有关详细信息,请参阅入门
  • Google Cloud 项目。该项目存储与计算机目录关联的所有计算资源。它可以是现有项目或新项目。
  • 在您的 Google Cloud 项目中启用四个 API。有关详细信息,请参阅启用 Google Cloud API
  • Google Cloud 服务帐户。此服务帐户对 Google Cloud 进行身份验证,以启用对项目的访问权限。有关详细信息,请参阅配置 Google Cloud 服务帐户
  • 启用 Google 专用访问权限。有关详细信息,请参阅 Enable-private-google-access

启用 Google Cloud API

要通过Citrix Virtual Apps and Desktops 的“完整配置”界面中使用 Google Cloud 功能,请在 Google Cloud 项目中启用这些 API。

  • 计算引擎 API
  • 云资源管理器 API
  • 身份识别和访问管理 (IAM) API
  • 云构建 API

在 Google Cloud 控制台中,完成以下步骤:

  1. 在左上角菜单中,选择 API 和服务 > 控制板

    API 和服务控制板选择示意图

  2. Dashboard(控制板)屏幕中,确保计算引擎 API 处于启用状态。如果未启用, 请按照以下步骤进行操作:

    1. 导航到 APIs and Services(API 和服务)> Library(库)

      API 和服务库示意图

    2. 在搜索框中,键入 Compute Engine(计算引擎)。

    3. 从搜索结果中,选择 Compute Engine API(计算引擎 API)。

    4. Compute Engine API(计算引擎 API) 页面上,选择 Enable(启用)。

  3. 启用云资源管理器 API。

    1. 导航到 APIs and Services(API 和服务)> Library(库)

    2. 在搜索框中,键入 Cloud Resource Manager(云资源管理器)。

    3. 在搜索结果中,选择 Cloud Resource Manager API(云资源管理器 API)。

    4. Cloud Resource Manager API(云资源管理器 API)页面中,选择 Enable(启用)。此时将显示 API 的状态。

  4. 同样,启用身份识别和访问管理 (IAM) API云构建 API

也可以使用 Google Cloud Shell 启用 API。为此,您需要:

  1. 打开 Google 控制台并加载 Cloud Shell。
  2. 在 Cloud Shell 中运行以下四个命令:

    • gcloud services enable compute.googleapis.com
    • gcloud services enable cloudresourcemanager.googleapis.com
    • gcloud services enable iam.googleapis.com
    • gcloud services enable cloudbuild.googleapis.com
  3. 如果 Cloud Shell 提示,请单击 Authorize(授权)。

配置和更新服务帐户

Citrix Cloud 在 Google Cloud 项目中使用三个独立的服务帐户:

  • Citrix Cloud 服务帐户:此服务帐户允许 Citrix Cloud 访问 Google 项目、预配和管理计算机。Google Cloud 帐户使用 Google Cloud 生成的密钥对 Citrix Cloud 进行身份验证。

    必须手动创建此服务帐户。

    可以使用电子邮件地址识别此服务帐户。例如,<my-service-account>@<project-id>.iam.gserviceaccount.com

    每个帐户(个人或服务)都具有定义项目管理的各种角色。向此服务帐户授予以下角色:

    • 计算管理员
    • 存储管理员
    • 云构建编辑者
    • 服务帐户用户
    • 云数据存储用户
  • Cloud Build Service Account(Cloud Build 服务帐户):启用 Enable Google Cloud APIs(启用 Google Cloud API)中提到的所有 API 后,系统会自动预配此服务帐户。

    可以通过以 Project ID(项目 ID)和 cloudbuild 一词开头的电子邮件地址来识别此服务帐户。例如,<project-id>@cloudbuild.gserviceaccount.com

    向此服务帐户授予以下角色:

    • 云构建服务帐户
    • 计算实例管理员
    • 服务帐户用户
  • Cloud Compute Service 帐户:激活计算 API 后,Google Cloud 会将此服务帐户添加到在 Google Cloud 中创建的实例中。此帐户具有 IAM 基本编辑角色来执行操作。但是,如果您删除默认权限以进行更精细的控制,则必须添加需要以下权限的存储管理员角色:

    • resourcemanager.projects.get
    • storage.objects.create
    • storage.objects.get
    • storage.objects.list

    可以通过以“Project ID”(项目 ID)和 compute 一词开头的电子邮件地址来识别此服务帐户。例如,<project-id>-compute@developer.gserviceaccount.com

创建 Citrix Cloud 服务帐户

要创建 Citrix Cloud 服务帐户,请执行以下步骤:

  1. 在 Google Cloud 控制台中,导航至 IAM & Admin(IAM 和管理员)> Service accounts(服务帐户)
  2. Service accounts(服务帐户)页面上,选择 CREATE SERVICE ACCOUNT(创建服务帐户)。
  3. Create service account(创建服务帐户)页面上,输入所需的信息,然后选择CREATE AND CONTINUE(创建并继续)。
  4. Grant this service account access to project(授予此服务帐户对项目的访问权限)页面上,单击 elect a role(选择角色)下拉菜单并选择所需的角色。如果要添加更多角色,请单击 +ADD ANOTHER ROLE(+添加其他角色)。

    注意:

    在创建新的服务帐户时,请启用所有 API 以获取可用角色的完整列表。

  5. 单击继续
  6. Grant users access to this service account(授予用户对此服务帐户的访问权限)页面上,添加用户或组以授予其在此服务帐户中执行操作的权限。
  7. 单击完成
  8. 导航到 IAM 主控制台。
  9. 识别创建的服务帐户。
  10. 验证角色是否已成功分配。

注意事项:

创建服务帐户时,请注意以下事项:

  • Grant this service account access to project(授予此服务帐户对项目的访问权限)和 Grant users access to this service account(授予用户对此服务帐户的访问权限)的步骤是可选的。如果选择跳过这些可选配置步骤,新创建的服务账号不会显示在 IAM & Admin(IAM 和管理) > IAM 页面中。

  • 要显示与服务帐户关联的角色,请在不跳过可选步骤的情况下添加角色。此过程可确保为配置的服务帐户显示角色。

Citrix Cloud 服务帐户密钥

创建服务帐户时,可以选择为该帐户创建密钥。在 Citrix DaaS 中创建连接时,您需要此密钥。密钥包含在凭据文件 (.json) 中。创建密钥后,文件会自动下载并保存到下载文件夹。创建密钥时,请务必将密钥类型设置为 JSON。否则,Citrix 的“完整配置”界面无法进行解析。

提示:

使用 Google Cloud 控制台中的 Service accounts(服务帐户)页面创建密钥。出于安全考虑,我们建议您定期更改密钥。通过编辑现有 Google Cloud 连接,可以向 Citrix Virtual Apps and Desktops 应用程序提供新密钥。

向 Citrix Cloud 服务帐户添加角色

要向 Citrix Cloud 服务帐户添加角色,请执行以下操作:

  1. 在 Google Cloud 控制台中,导航至 IAM & Admin(IAM 和管理员)> IAM
  2. IAM > PERMISSIONS(权限)页面上,找到您创建的服务帐户,该帐户可通过电子邮件地址进行识别。

    例如,<my-service-account>@<project-id>.iam.gserviceaccount.com

  3. 选择铅笔图标以编辑对服务帐户主体的访问权限。
  4. 在所选主体选项的 Edit access to “project-id”(编辑对 project-id 的访问权限)页面上,选择 ADD ANOTHER ROLE(添加另一个角色)将以下角色逐个添加到您的服务帐户,然后选择 SAVE(保存)。

向 Cloud Build 服务帐户添加角色

要向 Cloud Build 服务帐户添加角色,请执行以下操作:

  1. 在 Google Cloud 控制台中,导航至 IAM & Admin(IAM 和管理员)> IAM
  2. IAM 页面上,找到 Cloud Build 服务帐户,该帐户可以使用以 Project ID(项目 ID)和 cloudbuild 一词开头的电子邮件地址进行识别。

    例如,<project-id>@cloudbuild.gserviceaccount.com

  3. 选择铅笔图标以编辑 Cloud Build 帐户角色。
  4. 在所选主体选项的 Edit access to “project-id”(编辑对 project-id 的访问权限)页面上,选择 ADD ANOTHER ROLE(添加另一个角色)将以下角色逐个添加到您的 Cloud Build 服务帐户,然后选择 SAVE(保存)。

    注意:

    启用所有 API 以获取完整的角色列表。

存储权限和存储桶管理

Citrix DaaS 改进了报告 Google Cloud 服务的云生成失败的过程。此服务在 Google Cloud 上运行生成过程。Citrix DaaS 会创建一个名为 citrix-mcs-cloud-build-logs-{region}-{5 random characters} 的存储桶,Google Cloud 服务将在其中捕获生成日志信息。在此存储桶上设置了一个选项,用于在 30 天后删除内容。此过程要求用于连接的服务帐户将 Google Cloud 权限设置为 storage.buckets.update。如果服务帐户没有此权限,Citrix DaaS 将忽略错误并继续执行目录创建过程。如果没有此权限,生成日志的大小会增加,需要手动清理。

启用 Google 专用访问权限

当 VM 缺少分配给其网络接口的外部 IP 地址时,数据包仅发送到其他内部 IP 地址目标。启用专用访问时,VM 将连接到 Google API 和相关服务使用的外部 IP 地址集。

注意:

无论是否启用了专用 Google 访问权限,所有具有或没有公用 IP 地址的 VM 都必须能够访问 Google 公用 API,尤其是在环境中安装了第三方网络连接设备的情况下。

要确保子网中的 VM 能够在没有公用 IP 地址的情况下访问 Google API 以进行 MCS 预配,请执行以下操作:

  1. 在 Google Cloud 中,访问 VPC network configuration(VPC 网络配置)。
  2. 在“Subnet details”(子网详细信息)屏幕中,打开 Private Google access(Google 专用访问权限)。

Google 专用访问权限

有关详细信息,请参阅配置专用 Google 访问权限

重要:

如果您的网络配置为阻止 VM 访问 Internet,请确保贵组织承担与启用 VM 所连接到的子网的专用 Google 访问权限相关的风险。

添加连接

请按照创建连接和资源中的指导进行操作。以下说明将指导您完成设置托管连接的过程:

  1. 管理 > 配置中,选择左侧窗格中的托管

  2. 在操作栏中选择添加连接和资源

  3. 连接页面上,选择创建新连接Citrix Provisioning 工具,然后选择下一步

    • 连接类型。从菜单中选择 Google Cloud
    • 连接名称。键入连接的名称。
  4. 区域页面上,从菜单中选择项目名称,选择包含要使用的资源的区域,然后选择下一步

  5. 网络网络上,键入资源的名称,从菜单中选择虚拟网络,选择子集,然后选择下一步。资源名称可帮助您识别此区域和网络的组合名称后面附加了 (Shared) 后缀的虚拟网络表示共享 VPC。如果您为共享 VPC 配置了子网级别的 IAM 角色,则子网列表中仅显示共享 VPC 的特定子网。

    注意:

    • 资源名称可以包含 1-64 个字符,不能仅包含空格或字符 \ / ; : # . * ? = < > | [ ] { } " ' ( ) ' )
  6. 摘要页面上,确认信息,然后选择完成退出添加连接和资源窗口。

创建连接和资源后,系统将列出您创建的连接和资源。要配置连接,请选择该连接,然后选择操作栏中的适用选项。

同样,可以删除、重命名或测试在连接下创建的资源。为此,请选择连接下的资源,然后选择操作栏中的适用选项。

准备主 VM 实例和永久磁盘

提示:

永久磁盘是虚拟磁盘的 Google Cloud 术语。

要准备主 VM 实例,请使用与您计划的计算机目录中克隆的 VDA 实例所需的配置匹配的属性创建和配置 VM 实例。配置不仅适用于实例大小和类型。它还包括实例属性,例如元数据、标记、GPU 分配、网络标记和服务帐户属性。

作为控制过程的一部分,MCS 使用您的主 VM 实例创建 Google Cloud 实例模板。然后,实例模板将用于创建组成计算机目录的克隆 VDA 实例。克隆的实例继承创建实例模板的所基于的主 VM 实例的属性(VPC、子网和永久磁盘属性除外)。

根据具体情况配置主 VM 实例的属性后,启动实例,然后为实例准备永久磁盘。

我们建议您手动创建磁盘的快照。这样做可以使用有意义的命名约定来跟踪版本,为您提供更多选项来管理早期版本的主映像,并节省创建计算机目录的时间。如果您不创建自己的快照,MCS 会为您创建一个临时快照(在预配过程结束时删除该快照)。

创建计算机目录

注意:

请在创建计算机目录之前创建您的资源。配置计算机目录时,请使用 Google Cloud 建立的命名约定。有关详细信息,请参阅存储桶和对象命名指南

请按照创建计算机目录中的指导进行操作。

管理计算机目录

要将计算机添加到目录、更新计算机和回滚更新,请参阅管理计算机目录

电源管理

Citrix DaaS 允许您对 Google Cloud 计算机进行电源管理。使用导航窗格中的搜索节点查找要进行电源管理的计算机。以下电源操作可用:

  • 删除
  • 启动
  • 重新启动
  • 强制重新启动
  • 关闭
  • 强制关闭
  • 添加到交付组
  • 管理标记
  • 打开维护模式

还可以使用 AutoScale 来管理 Google Cloud 计算机的电源。为此,请将 Google Cloud 计算机添加到交付组,然后为该交付组启用 AutoScale。有关 AutoScale 的详细信息,请参阅 Autoscale

防止意外删除计算机

借助 Citrix DaaS,您可以保护 Google Cloud 上的 MCS 资源,以防止意外删除。请通过将 deletionProtection 标志设置为 TRUE 来配置已预配的 VM。

默认情况下,通过 MCS 或 Google Cloud 插件预配的 VM 是在启用了 InstanceProtection 的情况下创建的。该实现既适用于持久性目录,也适用于非持久性目录。从模板重新创建实例时,将更新非持久性目录。对于现有的持久性计算机,您可以在 Google Cloud 控制台中设置标志。有关设置标志的详细信息,请参阅 Google 文档站点。添加到持久性目录的新计算机在创建时已启用 deletionProtection

如果您尝试删除已设置 deletionProtection 标志的 VM 实例,请求将失败。但是,如果您被授予了权限 compute.instances.setDeletionProtection 或分配了 IAM 计算管理员角色,则可以重置该标志以允许删除资源。

导入手动创建的 Google Cloud 计算机

您可以创建与 Google Cloud 的连接,然后创建一个包含 Google Cloud 计算机的目录。然后,可以通过 Citrix DaaS 手动关闭并打开 Google Cloud 计算机的电源。使用此功能,您可以:

  • 将手动创建的 Google Cloud 多会话操作系统计算机导入到 Citrix Virtual Apps and Desktops 计算机目录中。
  • 从 Citrix Virtual Apps and Desktops 目录中删除手动创建的 Google Cloud 多会话操作系统计算机。
  • 使用现有的 Citrix Virtual Apps and Desktops 电源管理功能对 Google Cloud Windows 多会话操作系统计算机进行电源管理。例如,为这些计算机设置重新启动计划。

此功能不需要更改现有的 Citrix Virtual Apps and Desktops 预配工作流程,也不需要删除任何现有功能。我们建议您使用 MCS 在 Citrix DaaS 的“完整配置”界面中预配计算机,而非导入手动创建的 Google Cloud 计算机。

共享虚拟私有云

共享虚拟私有云 (VPC) 包括一个主机项目(可以从中使用共享子网)以及一个或多个使用该资源的服务项目。共享 VPC 是较大型安装的理想选项,因为它们可以集中控制、使用和管理共享的企业 Google Cloud 资源。有关详细信息,请参阅 Google 文档站点

使用此功能,Machine Creation Services (MCS) 可以支持预配和管理部署到共享 VPC 的计算机目录。这种支持在功能上等同于当前在本地 VPC 中提供的支持,在两个方面有所差别:

  1. 必须向用于创建主机连接的服务帐户授予额外的权限。此过程允许 MCS 访问和使用共享 VPC 资源。
  2. 必须创建两条防火墙规则,每条规则分别用于入口和出口。这些防火墙规则将在映像控制过程中使用。

需要新权限

创建主机连接时,需要具有特定权限的 Google Cloud 服务帐户。必须向用于创建基于共享 VPC 的主机连接的任何服务帐户授予这些额外的权限。

提示:

这些额外的权限对于 Citrix DaaS 来说并不陌生。它们用来促进本地 VPC 的实施。对于共享 VPC,这些额外的权限允许访问其他共享 VPC 资源。

为了支持共享 VPC,必须向与主机连接关联的服务帐户授予最多四个额外权限:

  1. compute.firewalls.list - 此权限是强制性的。它允许 MCS 检索共享 VPC 上存在的防火墙规则的列表。
  2. compute.networks.list - 此权限是强制性的。它允许 MCS 识别服务帐户可用的共享 VPC 网络。
  3. compute.subnetworks.list - 此权限是可选的,具体取决于您使用 VPC 的方式。它允许 MCS 识别可见的共享 VPC 中的子网。使用本地 VPC 时已需要此权限,但也必须在共享 VPC 主机项目中进行分配。
  4. compute.subnetworks.use - 此权限是可选的,具体取决于您使用 VPC 的方式。必须在预配的计算机目录中使用子网资源。使用本地 VPC 已需要此权限,但也必须在共享 VPC 主机项目中进行分配。

使用这些权限时,请考虑根据用于创建计算机目录的权限类型有不同的方法:

  • 项目级别权限:
    • 允许访问主机项目中的所有共享 VPC。
    • 要求权限 #3 和 #4 必须分配给服务帐户。
  • 子网级别权限:
    • 允许访问共享 VPC 中的特定子网。
    • 权限 #3 和 #4 是子网级别分配所固有的,因此无需直接分配给服务帐户。

请选择符合贵组织需求和安全标准的方式。

提示:

有关项目级别权限和子网级别权限之间的差异的详细信息,请参阅 Google Cloud 文档

防火墙规则

在准备计算机目录期间,将准备计算机映像作为目录的主映像系统磁盘。发生此过程时,磁盘将临时连接到虚拟机。此 VM 必须在隔离的环境中运行,以阻止所有入站和出站网络流量。这是通过一对 deny-all 防火墙规则实现的:一条规则用于入口流量,一条规则用于出口流量。使用 Google Cloud 本地 VCP 时,MCS 会在本地网络中创建此防火墙,并将其应用到计算机以进行控制。控制操作完成后,将从映像中删除防火墙规则。

我们建议您将使用共享 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 tag ‘citrix-provisioning-quarantine-firewall' and proper priority." "Refer to Citrix Documentation for details."

配置共享 VPC

在 Citrix DaaS 的“完整配置”界面中添加共享 VPC 作为主机连接之前,请完成以下步骤,以将您计划预配的项目中的服务帐户添加到:

  1. 创建 IAM 角色。
  2. 将用于创建 CVAD 主机连接的服务帐户添加到共享 VPC 主机项目 IAM 角色。
  3. 将要预配到项目中的云构建服务帐户添加到共享 VPC 主机项目 IAM 角色。
  4. 创建防火墙规则。

创建 IAM 角色

确定角色的访问级别 - 项目级别的访问权限或使用子网级别的访问权限的限制更严格的模型。

IAM 角色的项目级别的访问权限。对于项目级别的 IAM 角色,包括以下权限:

  • compute.firewalls.list
  • compute.networks.list
  • compute.subnetworks.list
  • compute.subnetworks.use

要创建项目级别的 IAM 角色,请执行以下操作:

  1. 在 Google 云控制台中,导航至 IAM & Admin(IAM 和管理员)> Roles(角色)
  2. 角色页面上,选择创建角色
  3. Create Role(创建角色)页面上,指定角色名称。选择添加权限
    1. Add permissions(添加权限)页面上,单独向角色添加权限。要添加权限,请在筛选器表字段中键入权限的名称。选择权限,然后选择添加
    2. 选择创建

子网级别的 IAM 角色。此角色将在选择 CREATE ROLE(创建角色)后省略添加权限 compute.subnetworks.listcompute.subnetworks.use。对于此 IAM 访问级别,权限 compute.firewalls.listcompute.networks.list 必须应用到新角色。

要创建子网级别的 IAM 角色,请执行以下操作:

  1. 在 Google Cloud 控制台中,导航到 VPC network(VPC 网络)> Shared VPC(共享 VPC)。此时将显示 Shared VPC(共享 VPC)页面,其中显示主机项目所包含的共享 VPC 网络的子网。
  2. Shared VPC(共享 VPC)页面上,选择要访问的子网。
  3. 在右上角,选择 ADD MEMBER(添加成员)以添加服务帐户。
  4. Add members(添加成员)页面上,完成以下步骤:
    1. New members(新成员)字段中,键入服务帐户的名称,然后在菜单中选择您的服务帐户。
    2. 选择 Select a role(选择角色)字段,然后单击 Compute Network User(计算网络用户)。
    3. 选择保存
  5. 在 Google 云控制台中,导航到 IAM & Admin(IAM 和管理员)> Roles(角色)。
  6. 角色页面上,选择创建角色
  7. Create Role(创建角色)页面上,指定角色名称。选择添加权限
    1. Add permissions(添加权限)页面上,单独向角色添加权限。要添加权限,请在筛选器表字段中键入权限的名称。选择权限,然后选择添加
    2. 选择创建

将服务帐户添加到主机项目 IAM 角色

创建 IAM 角色后,请执行以下步骤以便为主机项目添加服务帐户:

  1. 在 Google 云控制台中,导航到主机项目,然后导航到 IAM & Admin(IAM 和管理员)> IAM
  2. IAM 页面上,选择 ADD(添加)以添加服务帐户。
  3. Add members(添加成员)页面上:
    1. New members(新成员)字段中,键入服务帐户的名称,然后在菜单中选择您的服务帐户。
    2. 选择一个角色字段,键入您创建的 IAM 角色,然后选择菜单中的角色。
    3. 选择保存

现在已为主机项目配置服务帐户。

将云构建服务帐户添加到共享 VPC

每个 Google Cloud 订阅都有一个服务帐户,该帐户以项目 ID 号命名,后跟 cloudbuild.gserviceaccount。例如:705794712345@cloudbuild.gserviceaccount

您可以通过在 Google Cloud 控制台中选择 Home(主页)和 Dashboard(控制板)来确定项目的项目 ID 编号:

Google Cloud 控制台导航窗格

在屏幕的 Project Info(项目信息)区域下查找 Project Number(项目编号)。

请执行以下步骤以将云构建服务帐户添加到共享 VPC:

  1. 在 Google 云控制台中,导航到主机项目,然后导航到 IAM & Admin(IAM 和管理员)> IAM
  2. Permissions(权限)页面上,选择 ADD(添加)以添加帐户。
  3. Add members(添加成员)页面上,完成以下步骤:
    1. New members(新成员)字段中,键入云构建服务帐户的名称,然后在菜单中选择您的服务帐户。
    2. 选择选择角色字段,键入 Computer Network User,然后在菜单中选择角色。
    3. 选择保存

创建防火墙规则

作为映像控制过程的一部分,MCS 会复制选定的计算机映像,并使用该映像为目录准备主映像系统磁盘。在映像控制过程中,MCS 将磁盘附加到临时虚拟机,然后该虚拟机将运行准备脚本。此 VM 必须在隔离的环境中运行,以禁止所有入站和出站网络流量。要创建隔离环境,MCS 需要两个 deny all(全部拒绝)防火墙规则(入口规则和出口规则)。因此,请在 Host Project(主机项目)中创建两个防火墙规则,如下所示:

  1. 在 Google Cloud 控制台中,导航到主机项目,然后导航到 VPC network(VPX 网络)> Firewall(防火墙)
  2. Firewall(防火墙)页面上,选择 CREATE FIREWALL RULE(创建防火墙规则)。
  3. Create a firewall rule(创建防火墙规则)页面上,完成以下操作:
    • 名称。键入规则的名称。
    • Network(网络)。选择入口防火墙规则应用到的共享 VPC 网络。
    • Priority(优先级)。值越小,规则的优先级就越高。我们建议使用较小的值(例如 10)。
    • Direction of traffic(流量方向)。选择 Ingress(入口)。
    • Action on match(针对匹配项的操作)。选择 Deny(拒绝)。
    • Targets(目标)。使用默认的 Specified target tags(指定的目标标记)。
    • Target tags(目标标记)。键入 citrix-provisioning-quarantine-firewall
    • Source filter(源筛选器)。使用默认的 IP ranges(IP 范围)。
    • Source IP ranges(源 IP 范围)。键入匹配所有流量的范围。键入 0.0.0.0/0
    • Protocols and ports(协议和端口)。选择 Deny all(全部拒绝)。
  4. 选择创建以创建规则。
  5. 重复步骤 1-4 以创建另一个规则。对于 Direction of traffic(流量方向),请选择 Egress(出口)。

添加连接

将网络接口添加到 Cloud Connector 实例后,添加一个连接

启用区域选择

Citrix Virtual Apps and Desktops 支持区域选择。通过区域选择,您可以指定要在其中创建 VM 的区域。通过区域选择,管理员可以在其选择的区域之间放置唯一的租户节点。必须在 Google Cloud 上完成以下操作,才能配置唯一租赁:

  • 保留 Google Cloud 唯一租户节点
  • 创建 VDA 主映像

保留 Google Cloud 唯一租户节点

要预留单租户节点,请参阅 Google Cloud 文档

重要:

节点模板用于指示节点组中预留的系统的性能特征。这些特征包括 vGPU 的数量、分配给节点的内存量以及用于在节点上创建的计算机的计算机类型。有关详细信息,请参阅 Google Cloud 文档

创建 VDA 主映像

要在唯一租户节点上成功部署计算机,您需要在创建主 VM 映像时执行额外的步骤。Google Cloud 上的计算机实例具有名为节点关联性标签的属性。用作部署到唯一租户节点的目录的主映像的实例需要一个与目标节点组名称匹配的节点关联性标签。为实现这一目标,请记住以下几点:

注意:

如果您打算将唯一租赁与共享 VPC 结合使用,请参阅共享虚拟私有云

创建实例时设置节点关联性标签

要设置节点关联性标签,请执行以下操作:

  1. 在 Google Cloud 控制台中,导航到 Compute Engine(计算引擎)> VM instances(VM 实例)

  2. VM instances(VM 实例)页面上,选择 Create instance(创建实例)。

  3. Instance creation(实例创建)页面上,键入或配置所需的信息,然后选择 management, security, disks, networking, sole tenancy(管理、安全性、磁盘、网络连接、唯一租户)以打开设置面板。

  4. Sole tenancy(唯一租赁)选项卡上,选择 Browse(浏览)以查看当前项目中的可用节点组。此时将显示 Sole-tenant node(唯一租户节点)页面,其中显示可用节点组的列表。

  5. Sole-tenant node(唯一租户节点)页面上,从列表中选择适用的节点组,然后选择 Select(选择)以返回到 Sole tenancy(唯一租赁)选项卡。节点关联性标签字段将使用您选择的信息进行填充。此设置可确保从实例创建的计算机目录将部署到选定的节点组。

  6. 选择创建以创建实例。

为现有实例设置节点关联性标签

要设置节点关联性标签,请执行以下操作:

  1. 在 Google Cloud Shell 终端窗口中,使用 gcloud compute instances 命令设置节点关联性标签。在 gcloud 命令中包含以下信息:

    • VM 的名称。例如,使用名为 s*2019-vda-base 的现有 VM。*
    • 节点组的名称。使用之前创建的节点组名称。例如,mh-sole-tenant-node-group-1
    • 实例所在的区域。例如,VM 位于 *us-east-1b* zone 中。

    例如,在终端窗口中键入以下命令:

    • gcloud compute instances set-scheduling "s2019-vda-base" --node-group="mh-sole-tenant-node-group-1" --zone="us-east1-b"

    有关 gcloud compute instances 命令的详细信息,请参阅 Google 开发人员工具文档,网址为 https://cloud.google.com/sdk/gcloud/reference/beta/compute/instances/set-scheduling

  2. 导航到实例的 VM instance details(VM 实例详细信息)页面,并验证 Node Affinities(节点关联)字段是否填充了标签。

创建计算机目录

设置节点关联性标签后,配置计算机目录。

预览版:使用客户管理的加密密钥 (CMEK)

可以将客户管理的加密密钥 (CMEK) 用于 MCS 目录。使用此功能时,您将 Google Cloud Key Management Service CryptoKey Encrypter/Decrypter 角色分配给 Compute Engine Service Agent。Citrix DaaS 帐户在存储密钥的项目中必须具有正确的权限。有关详细信息,请参阅使用 Cloud KMS 密钥帮助保护资源

您的 Compute Engine Service Agent 的格式如下:service-<Project _Number>@compute-system.iam.gserviceaccount.com。此表单与默认的 Compute Engine Service 帐户不同。

注意:

此 Compute Engine Service 帐户可能不会显示在 Google 控制台 IAM 权限显示屏中。在这种情况下,请按照使用 Cloud KMS 密钥帮助保护资源中所述使用 gcloud 命令。

向 Citrix DaaS 帐户分配权限

Google Cloud KMS 权限可以通过多种方式进行配置。可以提供项目级 KMS 权限或资源级 KMS 权限。有关详细信息,请参阅权限和角色

项目级权限

一种选择是向 Citrix DaaS 帐户提供项目级权限以浏览 Cloud KMS 资源。为此,请创建一个自定义角色,然后添加以下权限:

  • cloudkms.keyRings.list
  • cloudkms.keyRings.get
  • cloudkms.cryptokeys.list
  • cloudkms.cryptokeys.get

将此自定义角色分配给 Citrix DaaS 帐户。这允许您浏览清单中相关项目中的区域密钥。

资源级权限

对于另一个选项(资源级权限),请在 Google Cloud 控制台中浏览到用于 MCS 预配的 cryptoKey。将 Citrix DaaS 帐户添加到您用于目录预配的密钥链或密钥中。

提示:

使用此选项,您无法浏览清单中的项目的区域密钥,因为 Citrix DaaS 帐户对 Cloud KMS 资源没有项目级列表权限。但是,您仍可以通过在 ProvScheme 自定义属性中指定正确的 cryptoKeyId 使用 CMEK 来预配目录,如下所述。

使用自定义属性通过 CMEK 进行预配

通过 PowerShell 创建预配方案时,请在 ProvScheme CustomProperties 中指定 CryptoKeyId 属性。例如:

'<CustomProperties xmlns="http://schemas.citrix.com/2014/xd/machinecreation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Property xsi:type="StringProperty" Name="CryptoKeyId" Value="<yourCryptoKeyId>" />
</CustomProperties>'
<!--NeedCopy-->

必须按以下格式指定 cryptoKeyId

projectId:location:keyRingName:cryptoKeyName

例如,如果您想在区域 us-east1 和 ID 为 my-example-project-1 的项目中的密钥链 my-example-key-ring 中使用密钥 my-example-key,您的 ProvScheme 自定义设置将类似于:

'<CustomProperties xmlns="http://schemas.citrix.com/2014/xd/machinecreation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Property xsi:type="StringProperty" Name="CryptoKeyId" Value="my-example-project-1:us-east1:my-example-key-ring:my-example-key" />
</CustomProperties>'
<!--NeedCopy-->

与此预配方案相关的所有 MCS 预配磁盘和映像都使用此客户管理的加密密钥。

提示:

如果使用全局密钥,客户属性位置必须指出 global 而非区域名称,在上面的示例中为 us-east1。例如:<Property xsi:type="StringProperty" Name="CryptoKeyId" Value="my-example-project-1:global:my-example-key-ring:my-example-key" />

轮换客户管理的密钥

Google Cloud 不支持在现有的永久性磁盘或映像中轮换密钥。一旦计算机预配完毕,它将与创建时使用的密钥版本绑定在一起。但是,可以创建密钥的新版本,新密钥用于在使用新主映像更新目录时创建的新预配的计算机或资源。

关于密钥链的重要注意事项

无法重命名或删除密钥链。此外,对其进行配置时可能会产生不可预见的费用。删除或移除密钥链时,Google Cloud 会显示一条错误消息:

Sorry, you can't delete or rename keys or key rings. We were concerned about the security implications of allowing multiple keys or key versions over time to have the same resource name, so we decided to make names immutable. (And you can't delete them, because we wouldn't be able to do a true deletion--there would still have to be a tombstone tracking that this name had been used and couldn't be reused).
We're aware that this can make things untidy, but we have no immediate plans to change this.
If you want to avoid getting billed for a key or otherwise make it unavailable, you can do so by deleting all the key versions; neither keys nor key rings are billed for, just the active key versions within the keys.
<!--NeedCopy-->

提示:

有关详细信息,请参阅从控制台编辑或删除密钥链

统一存储桶级别访问兼容性

Citrix DaaS 与 Google Cloud 上的统一存储桶级别访问控制策略兼容。此功能增强了 IAM 策略的使用,该策略向服务帐户授予权限,以允许操作资源,包括存储桶。通过统一存储桶级别访问控制,Citrix DaaS 允许您使用访问控制列表 (ACL) 来控制对存储桶或存储在其中的对象的访问。有关 Google 云端平台统一存储桶级别访问的概述信息,请参阅统一存储桶级别访问。有关配置信息,请参阅要求统一存储桶级别访问

服务端点 URL

您必须有权访问以下 URL:

  • https://oauth2.googleapis.com
  • https://cloudresourcemanager.googleapis.com
  • https://compute.googleapis.com
  • https://storage.googleapis.com
  • https://cloudbuild.googleapis.com

Google Cloud 项目

Google Cloud 项目基本上有两种类型:

  • 预配项目:在这种情况下,当前管理员帐户拥有项目中已预配的计算机。此项目也称为本地项目。
  • 共享 VPC 项目: 在预配项目中创建的计算机使用共享 VPC 项目中的 VPC 的项目。用于预配项目的管理员帐户在此项目中的权限有限,具体而言,只有使用 VPC 的权限。

关于 GCP 权限

本部分包含 GCP 权限的完整列表。使用本部分中给出的完整权限集以使该功能正常运行。

创建主机连接

  • 预配项目中的 Citrix Cloud Service 帐户所需的最低权限:

     compute.instanceTemplates.list
     compute.instances.list
     compute.networks.list
     compute.projects.get
     compute.regions.list
     compute.subnetworks.list
     compute.zones.list
     resourcemanager.projects.get
     <!--NeedCopy-->
    

    下列 Google 定义的角色具有上面列出的权限:

    • 计算管理员
    • 云数据存储用户
  • 共享 VPC 项目中 Citrix Cloud Service 帐户的共享 VPC 所需的额外权限:

     compute.networks.list
     compute.subnetworks.list
     resourcemanager.projects.get
     <!--NeedCopy-->
    

    下列 Google 定义的角色具有上面列出的权限:

    • 计算网络用户

VM 的电源管理

预配项目中的 Citrix Cloud Service 帐户所需的最低权限:

compute.instanceTemplates.list
compute.instances.list
compute.instances.get
compute.instances.reset
compute.instances.resume
compute.instances.start
compute.instances.stop
compute.instances.suspend
compute.networks.list
compute.projects.get
compute.regions.list
compute.subnetworks.list
compute.zones.list
resourcemanager.projects.get
<!--NeedCopy-->

下列 Google 定义的角色具有上面列出的权限:

  • 计算管理员
  • 云数据存储用户

创建、更新或删除 VM

  • 预配项目中的 Citrix Cloud Service 帐户所需的最低权限:

     cloudbuild.builds.create
     cloudbuild.builds.get
     cloudbuild.builds.list
     compute.acceleratorTypes.list
     compute.diskTypes.get
     compute.diskTypes.list
     compute.disks.create
     compute.disks.createSnapshot
     compute.disks.delete
     compute.disks.get
     compute.disks.list
     compute.disks.setLabels
     compute.disks.use
     compute.disks.useReadOnly
     compute.firewalls.create
     compute.firewalls.delete
     compute.firewalls.list
     compute.globalOperations.get
     compute.images.create
     compute.images.delete
     compute.images.get
     compute.images.list
     compute.images.setLabels
     compute.images.useReadOnly
     compute.instanceTemplates.create
     compute.instanceTemplates.delete
     compute.instanceTemplates.get
     compute.instanceTemplates.list
     compute.instanceTemplates.useReadOnly
     compute.instances.attachDisk
     compute.instances.create
     compute.instances.delete
     compute.instances.detachDisk
     compute.instances.get
     compute.instances.list
     compute.instances.reset
     compute.instances.resume
     compute.instances.setDeletionProtection
     compute.instances.setLabels
     compute.instances.setMetadata
     compute.instances.setServiceAccount
     compute.instances.setTags
     compute.instances.start
     compute.instances.stop
     compute.instances.suspend
     compute.machineTypes.get
     compute.machineTypes.list
     compute.networks.list
     compute.networks.updatePolicy
     compute.nodeGroups.list
     compute.nodeTemplates.get
     compute.projects.get
     compute.regions.list
     compute.snapshots.create
     compute.snapshots.delete
     compute.snapshots.list
     compute.snapshots.setLabels
     compute.snapshots.useReadOnly
     compute.subnetworks.get
     compute.subnetworks.list
     compute.subnetworks.use
     compute.zoneOperations.get
     compute.zoneOperations.list
     compute.zones.get
     compute.zones.list
     iam.serviceAccounts.actAs
     resourcemanager.projects.get
     storage.buckets.create
     storage.buckets.delete
     storage.buckets.get
     storage.buckets.list
     storage.buckets.update
     storage.objects.create
     storage.objects.delete
     storage.objects.get
     storage.objects.list
     <!--NeedCopy-->
    

    下列 Google 定义的角色具有上面列出的权限:

    • 计算管理员
    • 存储管理员
    • 云构建编辑者
    • 服务帐户用户
    • 云数据存储用户
  • 共享 VPC 项目中的 Citrix Cloud Service 帐户的共享 VPC 需要额外的权限,才能使用共享 VPC 项目中的 VPC 和子网创建托管单元:

     compute.firewalls.list
     compute.networks.list
     compute.projects.get
     compute.regions.list
     compute.subnetworks.get
     compute.subnetworks.list
     compute.subnetworks.use
     compute.zones.list
     resourcemanager.projects.get
     <!--NeedCopy-->
    

    下列 Google 定义的角色具有上面列出的权限:

    • 计算网络用户
    • 云数据存储用户
  • 将准备说明磁盘下载到 MCS 时,Google Cloud Build Service 要求的预配项目中的 Cloud Build Service 帐户所需的最低权限:

     compute.disks.create
     compute.disks.delete
     compute.disks.get
     compute.disks.list
     compute.disks.setLabels
     compute.disks.use
     compute.disks.useReadOnly
     compute.images.get
     compute.images.list
     compute.images.useReadOnly
     compute.instances.create
     compute.instances.delete
     compute.instances.get
     compute.instances.getSerialPortOutput
     compute.instances.list
     compute.instances.setLabels
     compute.instances.setMetadata
     compute.instances.setServiceAccount
     compute.machineTypes.list
     compute.networks.get
     compute.networks.list
     compute.projects.get
     compute.subnetworks.list
     compute.subnetworks.use
     compute.subnetworks.useExternalIp
     compute.zoneOperations.get
     compute.zones.list
     iam.serviceAccounts.actAs
     logging.logEntries.create
     pubsub.topics.publish
     resourcemanager.projects.get
     source.repos.get
     source.repos.list
     storage.buckets.create
     storage.buckets.get
     storage.buckets.list
     storage.objects.create
     storage.objects.delete
     storage.objects.get
     storage.objects.list
     <!--NeedCopy-->
    

    下列 Google 定义的角色具有上面列出的权限:

    • 云构建服务帐户
    • 计算实例管理员
    • 服务帐户用户
  • 将准备说明磁盘下载到 MCS 时,Google Cloud Build Service 要求的预配项目中 Cloud Compute Service 帐户所需的最低权限:

     resourcemanager.projects.get
     storage.objects.create
     storage.objects.get
     storage.objects.list
     <!--NeedCopy-->
    

    下列 Google 定义的角色具有上面列出的权限:

    • 计算网络用户
    • 存储帐户用户
    • 云数据存储用户
  • 将准备说明磁盘下载到 MCS 时,Google Cloud Build 服务要求在预配项目中为 Cloud Build Service 帐户提供共享 VPC 所需的额外权限:

     compute.firewalls.list
     compute.networks.list
     compute.subnetworks.list
     compute.subnetworks.use
     resourcemanager.projects.get
     <!--NeedCopy-->
    

    下列 Google 定义的角色具有上面列出的权限:

    • 计算网络用户
    • 存储帐户用户
    • 云数据存储用户
  • 预配项目中 Citrix Cloud Service 帐户的云密钥管理服务 (KMS) 所需的其他权限:

     cloudkms.cryptoKeys.get
     cloudkms.cryptoKeys.list
     cloudkms.keyRings.get
     cloudkms.keyRings.list
     <!--NeedCopy-->
    

    下列 Google 定义的角色具有上面列出的权限:

    • 计算 KMS 查看器

一般权限

下面是预配项目中 Citrix Cloud Service 帐户对 MCS 中支持的所有功能的权限。这些权限提供了未来的最佳兼容性:

resourcemanager.projects.get
cloudbuild.builds.create
cloudbuild.builds.get
cloudbuild.builds.list
compute.acceleratorTypes.list
compute.diskTypes.get
compute.diskTypes.list
compute.disks.create
compute.disks.createSnapshot
compute.disks.delete
compute.disks.get
compute.disks.setLabels
compute.disks.use
compute.disks.useReadOnly
compute.firewalls.create
compute.firewalls.delete
compute.firewalls.list
compute.globalOperations.get
compute.images.create
compute.images.delete
compute.images.get
compute.images.list
compute.images.setLabels
compute.images.useReadOnly
compute.instanceTemplates.create
compute.instanceTemplates.delete
compute.instanceTemplates.get
compute.instanceTemplates.list
compute.instanceTemplates.useReadOnly
compute.instances.attachDisk
compute.instances.create
compute.instances.delete
compute.instances.detachDisk
compute.instances.get
compute.instances.list
compute.instances.reset
compute.instances.resume
compute.instances.setDeletionProtection
compute.instances.setLabels
compute.instances.setMetadata
compute.instances.setTags
compute.instances.start
compute.instances.stop
compute.instances.suspend
compute.instances.update
compute.instances.updateAccessConfig
compute.instances.updateDisplayDevice
compute.instances.updateSecurity
compute.instances.updateShieldedInstanceConfig
compute.instances.updateShieldedVmConfig
compute.machineTypes.get
compute.machineTypes.list
compute.networks.list
compute.networks.updatePolicy
compute.nodeGroups.list
compute.nodeTemplates.get
compute.projects.get
compute.regions.list
compute.snapshots.create
compute.snapshots.delete
compute.snapshots.list
compute.snapshots.setLabels
compute.snapshots.useReadOnly
compute.subnetworks.get
compute.subnetworks.list
compute.subnetworks.use
compute.subnetworks.useExternalIp
compute.zoneOperations.get
compute.zoneOperations.list
compute.zones.get
compute.zones.list
resourcemanager.projects.get
storage.buckets.create
storage.buckets.delete
storage.buckets.get
storage.buckets.list
storage.buckets.update
storage.objects.create
storage.objects.delete
storage.objects.get
storage.objects.list
cloudkms.cryptoKeys.get
cloudkms.cryptoKeys.list
cloudkms.keyRings.get
cloudkms.keyRings.list
<!--NeedCopy-->

更多信息