Citrix DaaS

与 AWS 的连接

创建和管理连接和资源介绍了用于创建连接的向导。 以下信息涵盖了特定于 AWS 云环境的详细信息。

注意:

在创建与 AWS 的连接之前,您需要先完成将 AWS 设置为资源位置。 请参阅 AWS 虚拟化环境

创建连接

当您使用 Studio 创建连接时:

  • 必须提供 API 密钥和密钥值。 可以先从 AWS 中导出包含这些值的密钥文件,然后再导入。 此外,还必须提供地理区域、可用性区域、VPC 名称、子网地址、域名、安全组名称和凭据。
  • root AWS 帐户的凭据文件(从 AWS 控制台检索)的格式与为标准 AWS 用户下载的凭据文件的格式不同。 因此,Citrix DaaS 无法使用该文件填充 API 密钥和密钥字段。 请务必使用 AWS Identity Access Management (IAM) 凭据文件。

注意:

创建连接后,尝试更新 API 密钥和密钥可能会失败。 要解决此问题,请检查您的代理服务器或防火墙限制,并确保以下地址可访问:https://*.amazonaws.com

限制

如果您在 AWS 控制台中更改 AWS 虚拟私有云 (VPC) 的名称,则 Citrix Cloud 中的现有托管单元会中断。 托管单元损坏时,您将无法创建新目录,也无法将计算机添加到现有目录。 要解决此问题,请将 AWS VPC 的名称改回原来的名称。

主机连接默认值

在 Studio 中为 AWS 云环境创建主机连接时,将显示以下默认值:

选项 绝对值 百分比
同步操作(所有类型) 125 100
每分钟最大新操作数 150 不适用
最大并发预配操作数 100 不适用

默认情况下,MCS 最多支持 100 个并发预配操作。

您可以通过访问“编辑连接”屏幕上的 Citrix Studio 高级 部分来配置这些值:

身份识别和访问管理 (IAM)

或者,您可以使用 Remote PowerShell SDK 为每个环境设置最佳设置的最大并发操作数。

使用 PowerShell 自定义属性 MaximumConcurrentProvisioningOperations 指定并发 AWS 预配置操作的最大数量。

配置之前:

  • 确保您已经安装了适用于云的 PowerShell SDK。
  • 了解 MaximumConcurrentProvisioningOperations 的默认值是 100。

要自定义 MaximumConcurrentProvisioningOperations 值,请执行以下步骤:

  1. 打开 PowerShell 窗口。
  2. 运行 asnp citrix* 以加载特定于 Citrix 的 PowerShell 模块。
  3. 输入 cd xdhyp:\Connections\
  4. 输入 dir 以列出连接。
  5. 更改或初始化自定义属性字符串:

    • 如果“自定义属性”字符串具有值,请将“自定义属性”复制到记事本中。 接下来,将 MaximumConcurrentProvisioningOperations 属性更改为首选值。 您可以输入介于 1—1000 范围内的值。 例如,<Property xsi:type="IntProperty" Name="MaximumConcurrentProvisioningOperations" Value="xyz"/>

    • 如果 Custom Properties 字符串为空或 null,则必须通过为架构和 MaximumConcurrentProvisioning操作 财产。

  6. PowerShell 窗口中,粘贴记事本中修改过的自定义属性,并为修改后的自定义属性分配一个变量。 如果您初始化了自定义属性,请在语法后面添加以下几行:

    $customProperties = '<CustomProperties xmlns="http://schemas.citrix.com/2014/xd/machinecreation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Property xsi:type="IntProperty" Name="MaximumConcurrentProvisioningOperations" Value="100"/></CustomProperties>'

    此字符串将 MaximumConcurrentProvisioningOperations 属性设置为 100。 在“自定义属性”字符串中,必须将 MaximumConcurrentProvisioningOperations 属性设置为符合需要的值。

  7. 输入 Get-XDAuthentication,这会提示您输入凭据。
  8. 运行 $cred = Get-Credential,这可能会提示您仅输入密码(或名称和密码)。 还可能会提示您输入应用程序 ID 和关联密钥。 对于使用基于角色的身份验证的连接, role_based_auth 既是名称又是密码。 否则,请输入 AWS API ID 和密钥。
  9. 运行 set-item -PSPath 'XDHyp:\Connections<connection-name>' -CustomProperties $customProperties -username $cred.username -Securepassword $cred.password。 必须将 <连接名称> 设置为连接的名称。
  10. 输入 dir 以验证更新的 CustomProperties 字符串。

为每个网络接口配置安全组

编辑主机连接时,您现在可以使用 PowerShell 命令配置每个弹性网络接口 (ENI) 允许的最大安全组数量。 有关 AWS 安全组配额值的信息,请参阅安全组

要为每个网络接口配置安全组,请执行以下操作:

  1. 打开 PowerShell 窗口。
  2. 运行 asnp citrix* 以加载特定于 Citrix 的 PowerShell 模块。
  3. 运行 cd xdhyp:\Connections\
  4. 运行 dir 以列出连接。
  5. 运行以下 PowerShell 命令为每个网络接口配置安全组:

      Set-HypHypervisorConnectionMetadata -HypervisorConnectionName aws -Name "Citrix_MachineManagement_Options" -Value " AwsMaxENISecurityGroupLimit=<number>"
    <!--NeedCopy-->
    

    注意:

    如果您没有为 AwsMaxENISecurityGroupLimit 设置值,则其默认值为 5。

服务端点 URL

标准区域服务端点 URL

使用 MCS 时,会添加一个带有 API 密钥和 API 机密的新 AWS 连接。 借助这些信息以及经过身份验证的帐户,MCS 使用 AWS DescribeRegions EC2 API 调用向 AWS 查询支持的区域。 查询是使用通用 EC2 服务端点 URL https://ec2.amazonaws.com/ 进行的。 请使用 MCS 从支持的区域列表中选择用于连接的区域。 系统会自动为区域选择首选的 AWS 服务端点 URL。 但是,在创建服务端点 URL 之后,您将无法再设置或修改该 URL。

非标准服务端点 URL

在某些情况下,您可能不需要使用为连接自动选择的 AWS 服务端点 URL。 对于此类情况,您可以使用 Citrix Cloud SDK 和 PowerShell 创建具有非标准服务端点 URL 的连接。 例如,要使用服务端点 URL https://ec2.cn-north-1.amazonaws.com.cn 创建连接,请执行以下操作:

  1. 设置 AWS 托管的 Cloud Connector 并确保其具有连接性。
  2. 运行以下 PowerShell 命令以查看 Cloud Connector 的列表。

       PS C:\> asnp citrix.*
       PS C:\> Get-XDAuthentication
       PS C:\> Get-ConfigEdgeServer
    <!--NeedCopy-->
    
  3. 从新创建的 Cloud Connector 中找到 ZoneUid,然后将其输入到以下 PowerShell 命令中。 用相应的值替换斜体项目。

    PS C:\> $hyp= New-Item -Path xdhyp:\Connections -ZoneUidZoneUid-Name“My New Connection”-ConnectionType "AWS" -HypervisorAddress @("https://ec2.cn-north-1.amazonaws.com.cn") -UserName“APIkey” -Password“API Secret” -Persist PS C:\> New-BrokerHypervisorConnection -HypHypervisorConnectionUid $hyp. HypervisorConnectionUid (虚拟机管理程序连接 Uid)

  4. 刷新 托管 标签页,以验证EC2连接是否已创建。
  5. 使用新连接添加资源位置。

定义 IAM 权限

使用本部分中的信息定义 AWS 上的 Citrix DaaS 的 IAM 权限。 Amazon 的 IAM 服务允许帐户拥有多个用户,这些用户可以进一步组织到组中。 这些用户可以拥有不同的权限来控制其执行与帐户关联的操作的能力。 有关 IAM 权限的更多信息,请参阅 IAM JSON 策略参考

要将 IAM 权限策略应用到新用户组,请执行以下操作:

  1. 登录 AWS 管理控制台,然后从下拉列表中选择 IAM service(IAM 服务)。
  2. 选择 Create a New Group of Users(创建新用户组)。
  3. 键入新用户组的名称,然后选择 Continue(继续)。
  4. 在权页面上,选择自定义策略,然后选择选择
  5. 键入权限策略的名称。
  6. 在“策略文档”部分中,输入相关权限。

输入策略信息后,选择“继续”以完成 IAM 权限策略对用户组的应用。 租中的用户仅被授予执行 Citrix DaaS 所需操作的权限。

-priority

使用本文提供的示例中提供的策略文本列出 Citrix DaaS 用于在 AWS 账户内执行操作的操作,而无需将这些操作限制为特定资源。 Citrix 建议您将该示例用于测试目的。 对于生产环境,您可以选择添加对资源的进一步限制。

添加 IAM 权限

在 AWS 管理控制台的 IAM 部分添加权限:

  1. 摘要面板中,选择权限选项卡。
  2. 选择**添加权限。</li> </ol>

身份识别和访问管理 (IAM)

将权限添加到屏幕中,授予权限:

授予 IAM 策略的权限

JSON 选项卡中使用以下内容作为示例:

JSON 示例

提示:

所示的 JSON 示例可能不包括针对您的环境的所有权限。 有关详细信息,请参阅关于 AWS 权限

所需的 AWS 权限

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

注意:

只有 role_based_auth 才需要 iam:PassRole 权限。

创建主机连接

使用从 AWS 获取的信息添加新的主机连接。

  {
      "Version": "2012-10-17",
      "Statement": [
          {
              "Action": [
                  "ec2:DescribeAvailabilityZones",
                  "ec2:DescribeSubnets",
                  "ec2:DescribeVpcs",
                  "ec2:DescribeRegions",
              ],
              "Effect": "Allow",
              "Resource": "*"
          }
      ]
  }
<!--NeedCopy-->

VM 的电源管理

VM 已打开或关闭电源。

  {
      "Version": "2012-10-17",
      "Statement": [
          {
              "Action": [
                  "ec2:DescribeInstances",,
                  "ec2:StartInstances",
                  "ec2:StopInstances",
                  "ec2:RebootInstances"
              ],
              "Effect": "Allow",
              "Resource": "*"
          }
      ]
  }
<!--NeedCopy-->

创建、更新或删除 VM

使用预配为 AWS 实例的 VM 创建、更新或删除计算机目录。

  {
      "Version": "2012-10-17",
      "Statement": [
          {
              "Action": [
                  "ec2:AttachVolume",
                  "ec2:AssociateIamInstanceProfile",
                  "ec2:AuthorizeSecurityGroupEgress",
                  "ec2:AuthorizeSecurityGroupIngress",
                  "ec2:CreateImage",
                  "ec2:CreateLaunchTemplate",
                  "ec2:CreateSecurityGroup",
                  "ec2:CreateTags",
                  "ec2:CreateVolume",
                  "ec2:DeleteVolume",
                  "ec2:DescribeAccountAttributes",
                  "ec2:DescribeAvailabilityZones",
                  "ec2:DescribeIamInstanceProfileAssociations",
                  "ec2:DescribeImages",
                  "ec2:DescribeInstances",
                  "ec2:DescribeInstanceTypes",
                  "ec2:DescribeLaunchTemplates",
                  "ec2:DescribeLaunchTemplateVersions",
                  "ec2:DescribeNetworkInterfaces",
                  "ec2:DescribeRegions",
                  "ec2:DescribeSecurityGroups",
                  "ec2:DescribeSnapshots",
                  "ec2:DescribeSubnets",
                  "ec2:DescribeTags",
                  "ec2:DescribeSpotInstanceRequests",
                  "ec2:DescribeInstanceCreditSpecifications",
                  "ec2:DescribeInstanceAttribute",

                  "ec2:GetLaunchTemplateData",
                  "ec2:DescribeVolumes",
                  "ec2:DescribeVpcs",
                  "ec2:DetachVolume",
                  "ec2:DisassociateIamInstanceProfile",
                  "ec2:RunInstances",
                  "ec2:StartInstances",
                  "ec2:StopInstances",
                  "ec2:TerminateInstances"
              ],
              "Effect": "Allow",
              "Resource": "*"
          },
          {
              "Action": [
                  "ec2:CreateSecurityGroup",
                  "ec2:DeleteSecurityGroup",
              ],
              "Effect": "Allow",
              "Resource": "*"
          },
          {
              "Action": [
                  "ebs:StartSnapshot",
                  "ebs:GetSnapshotBlock",
                  "ebs:PutSnapshotBlock",
                  "ebs:CompleteSnapshot",
                  "ebs:ListSnapshotBlocks",
                  "ebs:ListChangedBlocks",
                  "ec2:CreateSnapshot"
              ],
              "Effect": "Allow",
              "Resource": "*"
          }
      ]
  }
<!--NeedCopy-->

注意:

  • 只有在目录创建期间必须为准备 VM 创建隔离安全组时,才需要与 SecurityGroups 相关的 EC2 部分。 完成此操作后,不需要这些权限。

直接上载和下载磁盘

直接上载磁盘不再需要满足预配计算机目录的卷工作线程要求,改为使用 AWS 提供的公共 API。 此功能降低了与额外的存储帐户相关的成本以及维护卷工作线程操作的复杂性。

注意:

弃用了对卷工作线程的支持。

必须将以下权限添加到策略中:

  • ebs:StartSnapshot
  • ebs:GetSnapshotBlock
  • ebs:PutSnapshotBlock
  • ebs:CompleteSnapshot
  • ebs:ListSnapshotBlocks
  • ebs:ListChangedBlocks
  • ec2:CreateSnapshot
  • ec2:DeleteSnapshot
  • ec2:DescribeLaunchTemplates

-priority

  • 您可以将新虚拟机添加到现有计算机目录中,而无需任何卷工作线程资源,例如卷工作线程 AMI 和卷工作线程虚拟机。
  • 如果删除之前使用过任何卷工作程序的现有目录,则所有与卷工作程序相关的工件都将被删除。

已创建的卷的 EBS 加密

如果 AMI 已加密,或者 EBS 配置为加密所有新卷,EBS 可以自动加密新创建的卷。 但是,要实现该功能,IAM 策略中必须包含以下权限。

  {
       "Version": "2012-10-17",
       "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                   "kms:CreateGrant",
                   "kms:Decrypt",
                   "kms:DescribeKey",
                   "kms:GenerateDataKeyWithoutPlainText",
                   "kms:GenerateDataKey",
                   "kms:ReEncryptTo",
                   "kms:ReEncryptFrom"
              ],
              "Resource": "*"
          }
      ]
  }
<!--NeedCopy-->

注意:

用户可自行决定是否包含资源和条件块,从而将权限限制到特定密钥。 例如,具有以下条件的 KMS 权限

  {
       "Version": "2012-10-17",
       "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                   "kms:CreateGrant",
                   "kms:Decrypt",
                   "kms:DescribeKey",
                   "kms:GenerateDataKeyWithoutPlainText",
                   "kms:GenerateDataKey",
                   "kms:ReEncryptTo",
                   "kms:ReEncryptFrom"
              ],
              "Resource": [
                  "arn:aws:kms:us-east-2:123456789012:key/abcd1234-a123-456d-a12b-a123b4cd56ef"
              ],
              "Condition": {
                  "Bool": {
                      "kms:GrantIsForAWSResource": true
                  }
              }
          }
      ]
  }
<!--NeedCopy-->

以下密钥策略声明是允许帐户使用 IAM 策略委派对 KMS 密钥的所有操作 (kms: *) 的权限所必需的 KMS 密钥的完整默认密钥策略。

  {
  "Sid": "Enable IAM policies",
  "Effect": "Allow",
  "Principal": {
  "AWS": "arn:aws:iam::111122223333:root"
  },
  "Action": "kms:",
  "Resource": ""
  }
<!--NeedCopy-->

有关详细信息,请参阅 AWS 密钥管理服务官方文档

基于 IAM 角色的身份验证

添加了以下权限以支持基于角色的身份验证。

  {
       "Version": "2012-10-17",
       "Statement": [
          {
              "Effect": "Allow",
              "Action": "iam:PassRole",
              "Resource": "arn:aws:iam::*:role/*"
          }
      ]
  }
<!--NeedCopy-->

最低 IAM 权限策略

以下 JSON 可用于当前支持的所有功能。 可以使用此策略创建主机连接、创建、更新或删除 VM 以及进行电源管理。 可以按照定义 IAM 权限部分中的说明将策略应用到用户,也可以通过 role_based_auth 安全密钥和密钥使用基于角色 的身份验证。

-priority

要使用 role_based_auth,请在设置 Cloud Connector 时首先在 Cloud Connector ec2 实例上配置所需的 IAM 角色。 使用 Citrix Studio 添加托管连接并为身份验证密钥和机密提供 role_based_auth。 具有这些设置的托管连接之后将使用基于角色的身份验证。

  {
      "Version": "2012-10-17",
      "Statement": [
          {
              "Action": [
                  "ec2:AttachVolume",
                  "ec2:AssociateIamInstanceProfile",
                  "ec2:AuthorizeSecurityGroupEgress",
                  "ec2:AuthorizeSecurityGroupIngress",
                  "ec2:CreateImage",
                  "ec2:CreateLaunchTemplate",
                  "ec2:CreateNetworkInterface",
                  "ec2:CreateTags",
                  "ec2:CreateVolume",
                  "ec2:DeleteLaunchTemplate",
                  "ec2:DeleteNetworkInterface",
                  "ec2:DeleteSecurityGroup",
                  "ec2:DeleteSnapshot",
                  "ec2:DeleteTags",
                  "ec2:DeleteVolume",
                  "ec2:DeregisterImage",
                  "ec2:DescribeAccountAttributes",
                  "ec2:DescribeAvailabilityZones",
                  "ec2:DescribeIamInstanceProfileAssociations",
                  "ec2:DescribeImages",
                  "ec2:DescribeInstances",
                  "ec2:DescribeInstanceTypes",
                  "ec2:DescribeLaunchTemplates",
                  "ec2:DescribeLaunchTemplateVersions",
                  "ec2:DescribeNetworkInterfaces",
                  "ec2:DescribeRegions",
                  "ec2:DescribeSecurityGroups",
                  "ec2:DescribeSnapshots",
                  "ec2:DescribeSubnets",
                  "ec2:DescribeTags",
                  "ec2:DescribeSpotInstanceRequests",
                  "ec2:DescribeInstanceCreditSpecifications",
                  "ec2:DescribeInstanceAttribute",
                  "ec2:GetLaunchTemplateData",
                  "ec2:DescribeVolumes",
                  "ec2:DescribeVpcs",
                  "ec2:DetachVolume",
                  "ec2:DisassociateIamInstanceProfile",
                  "ec2:RebootInstances",
                  "ec2:RunInstances",
                  "ec2:StartInstances",
                  "ec2:StopInstances",
                  "ec2:TerminateInstances"
              ],
              "Effect": "Allow",
              "Resource": "*"
          },
          {
              "Action": [
                  "ec2:CreateSecurityGroup",
                  "ec2:DeleteSecurityGroup",
              ],
              "Effect": "Allow",
              "Resource": "*"
          },
          {
              "Action": [
                  "ebs:StartSnapshot",
                  "ebs:GetSnapshotBlock",
                  "ebs:PutSnapshotBlock",
                  "ebs:CompleteSnapshot",
                  "ebs:ListSnapshotBlocks",
                  "ebs:ListChangedBlocks",
                  "ec2:CreateSnapshot"
              ],
              "Effect": "Allow",
              "Resource": "*"
          },
          {
              "Effect": "Allow",
              "Action": [
                   "kms:CreateGrant",
                   "kms:Decrypt",
                   "kms:DescribeKey",
                   "kms:GenerateDataKeyWithoutPlainText",
                   "kms:GenerateDataKey",
                   "kms:ReEncryptTo",
                   "kms:ReEncryptFrom"
              ],
              "Resource": "*"
          },
          {
              "Effect": "Allow",
              "Action": "iam:PassRole",
              "Resource": "arn:aws:iam::*:role/*"
          }
      ]
  }
<!--NeedCopy-->

注意:

  • 只有在目录创建期间必须为准备 VM 创建隔离安全组时,才需要与 SecurityGroups 相关的 EC2 部分。 完成此操作后,不需要这些权限。
  • 只有在使用 EBS 卷加密时才需要 KMS 部分。
  • 只有 role_based_auth 需要 iam:PassRole 权限部分。
  • 根据您的要求和环境,可以添加特定的资源级权限,而非完全访问权限。 有关更多详细信息,请参阅 AWS 文档 Demystifying EC2 Resource-Level Permissions(揭开 EC2 资源级权限的神秘面纱)和 Access management for AWS resources(AWS 资源访问管理)。
  • 仅在使用卷工作线程方法时才使用 ec2:CreateNetworkInterfaceec2:DeleteNetworkInterface 权限。

验证主机连接的权限

可以验证主机连接的权限,以执行与创建和管理 MCS 计算机目录有关的任务。 此实施可帮助您提前找出创建、删除和更新 VM、VM 的电源管理和 EBS 加密等不同场景所需的缺失权限,从而避免在关键时刻被阻止。

您可以使用 PowerShell 命令验证主机连接的权限 Test-HypHypervisorConnection. 该命令的结果捕获为一个列表,其中列表中的每个项目分为三个部分。

  • 类别:用户在创建和管理 MCS 计算机目录时可以执行的操作或任务。
  • 更正操作:管理员为解决用户缺少的权限差异而必须执行的步骤。
  • 缺少的权限:类别缺少的权限列表。

要验证权限,请执行以下操作:

  1. 创建与 AWS 的主机连接。
  2. 从 Delivery Controller 主机打开 PowerShell 窗口。
  3. 运行 asnp citrix* 以加载特定于 Citrix 的 PowerShell 模块。
  4. 请运行以下命令以验证您是否具有查找权限所需的权限。

      Test-HypHypervisorConnection -LiteralPath "XDHyp:\Connections\AWSCon"
    <!--NeedCopy-->
    
  5. 添加查找权限所需的缺失权限后,请运行以下命令以验证您是否拥有以下类别的权限:

    • 创建更新删除
    • 电源管理
    • EBS 加密
      Test-HypHypervisorConnection -LiteralPath "XDHyp:\Connections\AWSCon" [-SecurePassword -Password] "password" -UserName "" -CustomProperties ""
    <!--NeedCopy-->
    

有关添加权限的更多信息,请参阅 添加 IAM 权限.

下一步的去向

更多信息

与 AWS 的连接