Citrix Virtual Apps and Desktops

与 AWS 的连接

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

注意:

在创建与 AWS 的连接之前,需要先将您的 AWS 帐户设置为资源位置。请参阅 AWS 云环境

创建连接

在 Web Studio 中创建连接时:

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

注意:

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

主机连接默认值

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

| 选项 | 绝对值 | 百分比 | |— | — | —| | 同步操作(所有类型) | 125 | 100 | | 每分钟最大新操作数 | 125 |

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

服务端点 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

  4. 刷新配置 > 托管选项卡以验证 EC2 连接是否已创建。
  5. 使用新连接添加资源位置。

定义 IAM 权限

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

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

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

输入策略信息后,选择 Continue(继续)以完成创建用户组。组中的用户被授予仅执行 Citrix Virtual Apps and Desktops 所需操作的权限。

重要:

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

设置 IAM 权限

在 AWS 管理控制台的 IAM 部分中设置权限:

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

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

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

授予 IAM 策略的权限

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

JSON 示例

提示:

所示的 JSON 示例可能不包括针对您的环境的所有权限。有关详细信息,请参阅如何定义在 AWS 上运行 Citrix Virtual Apps and Desktops 的身份访问管理权限

所需的 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: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 创建隔离安全组时,才需要与安全组相关的 EC2 部分。完成此操作后,不需要这些权限。

直接上载和下载磁盘

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

注意:

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

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

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

重要:

  • 可以将 VM 添加到现有计算机目录中,而无需执行任何卷工作线程操作,例如卷工作线程 AMI 和卷工作线程 VM。
  • 如果您删除以前使用过卷工作线程的现有目录,则包括卷工作线程相关的所有项目都将被删除。

已创建的卷的 EBS 加密

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

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

注意:

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

{
     "Version": "2012-10-17",
     "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                 "kms:CreateGrant",
                 "kms:Decrypt",
                 "kms:DescribeKey",
                 "kms:GenerateDataKeyWithoutPlainText",
                 "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 角色。使用 Web 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: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 资源访问管理)。

下一步的去向

更多信息

与 AWS 的连接