Citrix DaaS

与 AWS 的连接

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

注意:

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

创建连接

从“完整配置”界面创建连接时:

  • 必须提供 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 的名称改回原来的名称。

主机连接默认值

在 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"/>

    • 如果“自定义属性”字符串为空/空,则必须通过为架构和 MaximumConcurrentProvisioningOperations 属性输入正确的语法来初始化该字符串。

  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 字符串。

服务端点 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”-PasswordAPI Secret”-Persist PS C:\> New-BrokerHypervisorConnection -HypHypervisorConnectionUid $hyp. HypervisorConnectionUid

  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 所需操作的权限。

重要提示:

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

添加 IAM 权限

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

  1. 摘要面板中,选择权限选项卡。
  2. 选择添加权限。

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

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

授予 IAM 策略的权限

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

JSON 示例

提示:

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

所需的 AWS 权限

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

注意:

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

创建主机连接

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

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

VM 的电源管理

计算机实例已打开或关闭电源。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "ec2:AttachVolume",
                "ec2:CreateVolume",
                "ec2:DeleteVolume",
                "ec2:DescribeInstances",
                "ec2:DescribeVolumes",
                "ec2:DetachVolume",
                "ec2:StartInstances",
                "ec2:StopInstances"
            ],
            "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:AuthorizeSecurityGroupEgress",
                "ec2:AuthorizeSecurityGroupIngress",
                "ec2:CreateSecurityGroup",
                "ec2:DeleteSecurityGroup",
                "ec2:RevokeSecurityGroupEgress",
                "ec2:RevokeSecurityGroupIngress"
            ],
            "Effect": "Allow",
            "Resource": "\*"
        },
        {
            "Action": [
                "s3:CreateBucket",
                "s3:DeleteBucket",
                "s3:PutBucketAcl",
                "s3:PutBucketTagging",
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject",
                "s3:PutObjectTagging"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::citrix*"
        },
        {
            "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:DescribeLaunchTemplates

重要提示:

  • 您可以将新虚拟机添加到现有计算机目录中,而无需任何卷工作线程资源,例如卷工作线程 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 安全密钥和密钥使用基于角色 的身份验证。

重要:

要使用 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:AuthorizeSecurityGroupEgress",
                "ec2:AuthorizeSecurityGroupIngress",
                "ec2:CreateSecurityGroup",
                "ec2:DeleteSecurityGroup",
                "ec2:RevokeSecurityGroupEgress",
                "ec2:RevokeSecurityGroupIngress"
            ],
            "Effect": "Allow",
            "Resource": "\*"
        },
        {
            "Action": [
                "s3:CreateBucket",
                "s3:DeleteBucket",
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutBucketAcl",
                "s3:PutObject",
                "s3:PutBucketTagging",
                "s3:PutObjectTagging"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::citrix*"
        },
        {
            "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 权限。

下一步的去向

更多信息

与 AWS 的连接