连接到 AWS
创建和管理连接和资源 介绍了创建连接的向导。以下信息涵盖了 AWS 云环境的特定详细信息。
注意:
在创建到 AWS 的连接之前,您需要首先将 AWS 帐户设置为资源位置。请参阅 (/zh-cn/citrix-virtual-apps-desktops/2507-ltsr/install-configure/install-prepare/aws.html)。
如何创建连接
从 Web Studio 创建连接时:
- 您必须提供 API 密钥和秘密密钥值。您可以从 AWS 导出包含这些值的密钥文件,然后将其导入。您还必须提供区域、可用区、VPC 名称、子网地址、域名、安全组名称和凭据。
- 根 AWS 帐户的凭据文件(从 AWS 控制台检索)的格式与为标准 AWS 用户下载的凭据文件不同。因此,Citrix Virtual Apps and Desktops™ 管理无法使用该文件填充 API 密钥和秘密密钥字段。请确保您使用的是 AWS Identity Access Management (IAM) 凭据文件。
注意:
创建连接后,更新 API 密钥和秘密密钥的尝试可能会失败。要解决此问题,请检查您的代理服务器或防火墙限制,并确保以下地址可访问:
https://*.amazonaws.com。
主机连接的默认值
在 AWS 云环境中创建主机连接时,将显示以下默认值:
| 选项 | 绝对值 | 百分比 |
|---|---|---|
| 并发操作(所有类型) | 125 | 100 |
| 每分钟最大新操作数 | 125 |
MCS 默认支持 100 个最大并发预配操作。
跨账户资源预配
存在一些用例,其中 Delivery Controller 希望放置在主 AWS 账户中(共享服务账户或站点组件账户),具有跨账户访问权限的 IAM 角色(跨账户 IAM 角色),并且 MCS 预配的计算机目录位于单独的辅助 AWS 账户中(工作负载账户),而无需在单独的账户中部署额外的 Delivery Controller。为了支持此类场景,此功能使用 VPC 对等和通过 IAM 角色进行的跨账户访问,使管理多个 AWS 账户的企业能够在不同的 AWS 账户之间进行预配。
借助 VPC 对等,您可以让您的 Delivery Controller 以及不同区域和/或账户中的预配 VM 相互通信。
借助 通过 IAM 角色进行的跨账户访问,您可以允许主账户(Delivery Controller 账户)承担 IAM 角色,以访问辅助账户中的 AWS 资源(计算机目录 VM)。
要允许 Delivery Controller 访问辅助账户的资源,请在承担辅助账户的 IAM 角色后创建主机连接。
先决条件
在为跨账户预配创建主机连接之前,请设置以下各项:
- 设置 VPC 对等,并配置两个区域或账户中的安全组。请参阅 设置 VPC 对等
- 使用 IAM 角色委派跨账户访问权限。请参阅(以下主题的链接)。
设置 VPC 对等连接
假设 VPC A 位于主账户 (账户 A) 中,并且包含交付控制器和 Active Directory。VPC B 位于辅助账户 (账户 B) 中,您希望在此处预配虚拟机。
要在账户 A 和账户 B 之间设置 VPC 对等连接,请执行以下操作:
-
创建 VPC 对等连接。请参阅:
- 转到您的 VPC A 和与公共子网关联的路由表。
- 单击 编辑路由 > 添加路由。在 目标 列中添加 VPC B 的 CIDR 块,并在 目标 列中添加您创建的 VPC 对等连接。
- 重复步骤 2 和 3,但使用 VPC A 和 VPC B 的私有子网(添加 VPC A 的 CIDR 块)。请参阅 更新 VPC 对等连接的路由表。
- 转到与 VPC A 关联的私有安全组。
- 选择 操作,然后选择 编辑入站规则。
-
选择 添加规则。对于类型,选择 所有流量,然后在 源 列中添加:
- 如果它是不同区域,则为 VPC B 的 CIDR 块。
- 如果它是不同账户但相同区域,请添加用正斜杠分隔的 VPC B 的账户 ID 和私有安全组 ID(例如,123456789012/sg-1a2b3c4d)
- 重复步骤 5 到 7,但使用 VPC B 的私有安全组(但添加 VPC A 的 CIDR 块或相同区域但不同账户的 VPC A 的账户 ID 和私有安全组 ID)。请参阅 更新安全组以引用对等安全组。
注意:
创建 VPC 对等连接不收取费用。但是,虽然可用区内的 VPC 对等连接是免费的,但当数据通过 VPC 对等连接跨多个可用区和区域传输时,会收取费用。请参阅 VPC 对等连接定价。
使用 IAM 角色委派跨账户访问
在跨账户设置 VPC 对等连接后,您可以使用 IAM 角色委派跨账户访问。
通过使用 IAM 角色进行跨账户访问,您可以允许主账户 (Delivery Controller™ 账户) 担任 IAM 角色,以访问辅助账户中的 AWS 资源 (计算机目录 VM)。
要访问跨账户资源,请执行以下操作:
请记住:
假设 VPC A 位于主账户 (账户 A) 中,并且包含 Delivery Controller 和 Active Directory。VPC B 位于辅助账户 (账户 B) 中,您希望在此处预配 VM
- 按照上述步骤设置跨账户 VPC 对等连接。
- 在账户 B 中创建具有最低 Citrix IAM 权限的 IAM 角色和策略。请参阅 IAM 教程:使用 IAM 角色委派跨 AWS 账户访问。假设此角色的 ARN 为“arn:aws:iam::5678:role/citrix-role”。
- Add the Trust policy to the role “arn:aws:iam::5678:role/citrix-role” so that it’s allowed to be accessed by Account A role “arn:aws:iam::1234:role/primary-account-citrix-role” as per - Cross account resource access in IAM.
- 在账户 A 中创建名为上述“primary-account-citrix role”的 IAM 角色和策略,该角色和策略具有担任 IAM 角色并从账户 B (arn:aws:iam::5678:role/citrix-role) 传递 IAM 角色的能力。
- Assign the role “arn:aws:iam::1234:role/primary-account-citrix-role” to all the Delivery Controllers in Account A.
交付控制器现在可以担任账户 B 中的角色 (“arn:aws:iam::5678:role/citrix-role”)。
创建用于跨账户预配的主机连接
在辅助账户(账户 B)中创建主机连接,您希望在该账户中预配 VM。这允许账户 A 的 Delivery Controller 在承担账户 B 的角色后访问账户 B 中的资源。
使用 PowerShell 命令创建主机连接并添加以下两个自定义属性:
-
CrossAccountRoleArn:如果您未提供CrossAccountRoleArn属性,则会创建常规主机连接。在这种情况下,即使提供了MaximumAssumeRoleDurationInSeconds,也会被忽略。 -
MaximumAssumeRoleDurationInSeconds:DurationInSeconds必须介于 900 秒到 3600 秒之间。默认值为 900 秒。如果您提供的值超过 3600,则DurationInSeconds将设置为 3600。
示例:
$connectionName = "cross-account-conn"
$cloudRegion = "us-east-1"
$apiKey = "role_based_auth"
$secretKey = "role_based_auth"
$zoneUid = "xxxxxx"
$secureKey = (ConvertTo-SecureString -String $secretKey -AsPlainText -Force)
$connectionPath = "XDHyp:\Connections\" + $connectionName
$customProperties = '<CustomProperties xmlns="http://schemas.citrix.com/2014/xd/machinecreation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Property xsi:type="StringProperty" Name="CrossAccountRoleArn" Value="arn:aws:iam::5678:role/citrix-role" /><Property xsi:type="StringProperty" Name="MaximumAssumeRoleDurationInSeconds" Value="3600" />
"</CustomProperties>'
$connection = New-Item -Path $connectionPath -ConnectionType "AWS" -HypervisorAddress "https://ec2.$($cloudRegion).amazonaws.com" -Persist -Scope @() -UserName $apiKey -SecurePassword $secureKey -ZoneUid $zoneUid -CustomProperties $customProperties
New-BrokerHypervisorConnection -HypHypervisorConnectionUid $connection.HypervisorConnectionUid
<!--NeedCopy-->
创建主机连接后,使用 Studio 或 PowerShell 创建托管单元。但是,请选择 VPC 和网络。
服务终结点 URL
标准区域服务终结点 URL
当您使用 MCS 时,会添加一个新的 AWS 连接,其中包含 API 密钥和 API 秘密。利用此信息以及经过身份验证的账户,MCS 使用 AWS DescribeRegions EC2 API 调用查询 AWS 以获取支持的区域。查询是使用通用 EC2 服务终结点 URL https://ec2.amazonaws.com/ 进行的。使用 MCS 从支持的区域列表中选择连接的区域。首选的 AWS 服务终结点 URL 会自动为该区域选择。但是,创建服务终结点 URL 后,您将无法再设置或修改该 URL。
定义 IAM 权限
使用本节中的信息定义 Citrix Virtual Apps and Desktops 在 AWS 上的 IAM 权限。Amazon 的 IAM 服务允许账户拥有多个用户,这些用户可以进一步组织成组。这些用户可以拥有不同的权限来控制他们执行与账户相关的操作的能力。有关 IAM 权限的更多信息,请参阅 IAM JSON 策略参考。
要将 IAM 权限策略应用于新的用户组:
- 登录 AWS 管理控制台,然后从下拉列表中选择 IAM 服务。
- 选择 创建新的用户组。
- 为新的用户组键入名称,然后选择 继续。
- 在“权限”页面上,选择“自定义策略”。选择“选择”。
- 为“权限策略”键入名称。
- 在“策略文档”部分中,输入相关权限。
输入策略信息后,选择“继续”以完成用户组。组中的用户被授予执行 Citrix Virtual Apps and Desktops 所需操作的权限。
重要提示:
使用前面示例中提供的策略文本,列出 Citrix Virtual Apps and Desktops 用于在 AWS 账户中执行操作而无需将这些操作限制到特定资源的操作。Citrix 建议您将此示例用于测试目的。对于生产环境,您可能选择对资源添加进一步的限制。
设置 IAM 权限
在 AWS 管理控制台 的“IAM”部分中设置权限:
- 在“摘要”面板中,选择“权限”选项卡。
- 选择“添加权限”。

在“添加权限到”屏幕中,授予权限:

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

提示:
所述 JSON 示例可能不包含您的环境所需的所有权限。有关详细信息,请参阅如何定义在 AWS 上运行 Citrix Virtual Apps and Desktops 的身份和访问管理权限。
所需的 AWS 权限
本节包含 AWS 权限的完整列表。
注意:
The iam:PassRole permission is needed only for role_based_auth.
创建主机连接过程
使用 AWS 中的信息添加新的主机连接。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"ec2:DescribeAvailabilityZones",
"ec2:DescribeSubnets",
"ec2:DescribeVpcs",
"ec2:DescribeRegions"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
<!--NeedCopy-->
虚拟机的电源管理
虚拟机已开机或关机。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"ec2:DescribeInstances",
"ec2:StartInstances",
"ec2:StopInstances",
"ec2:RebootInstances",
"ec2:DescribeInstanceStatus"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
<!--NeedCopy-->
创建、更新或删除虚拟机
创建、更新或删除计算机目录,其中虚拟机作为 AWS 实例进行预配。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"ec2:AttachVolume",
"ec2:AssociateIamInstanceProfile",
"ec2:AuthorizeSecurityGroupEgress",
"ec2:RevokeSecurityGroupEgress",
"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:DescribeInstanceStatus",
"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-->
注意:
仅当在目录创建期间必须为准备虚拟机创建隔离安全组时,才需要与安全组相关的 EC2 部分。完成此操作后,不再需要这些权限。
直接磁盘上传和下载
直接磁盘上传消除了计算机目录预配对卷工作器的要求,转而使用 AWS 提供的公共 API。此功能降低了额外存储账户的成本以及维护卷工作器操作的复杂性。
注意:
对卷工作器的支持功能已被移除。为了进行计算机目录的预配,需要具备直接磁盘上传和下载的权限。
必须将以下权限添加到策略中:
ebs:StartSnapshotebs:GetSnapshotBlockebs:PutSnapshotBlockebs:CompleteSnapshotebs:ListSnapshotBlocksebs:ListChangedBlocksec2:CreateSnapshotec2:DeleteSnapshotec2: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: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-->
以下密钥策略语句是 KMS 密钥的整个默认密钥策略,它允许帐户使用 IAM 策略委托 KMS 密钥上的所有操作 (kms:*) 权限。
{
"Sid": "Enable IAM policies",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:root"
},
"Action": "kms:",
"Resource": ""
}
<!--NeedCopy-->
有关更多详细信息,请参阅 AWS Key Management Service 的官方文档。
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,请首先在我们站点的所有 Delivery Controller 上配置所需的 IAM 角色。使用 Web Studio,添加托管连接并为身份验证密钥和秘密提供 role_based_auth。具有这些设置的托管连接随后将使用基于角色的身份验证。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"ec2:AttachVolume",
"ec2:AssociateIamInstanceProfile",
"ec2:AuthorizeSecurityGroupEgress",
"ec2:RevokeSecurityGroupEgress",
"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:DescribeInstanceStatus",
"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 部分。完成此操作后,不再需要这些权限。
- KMS 部分仅在使用 EBS 卷加密时才需要。
- iam:PassRole 权限部分仅在采用 role_based_auth 身份验证模式时才需要。
- 可以根据您的要求和环境添加特定的资源级权限,而不是完全访问权限。有关更多详细信息,请参阅 AWS 文档 揭秘 EC2 资源级权限 和 AWS 资源访问管理。
验证主机连接上的权限
您可以验证主机连接上的权限,以执行与创建和管理 MCS 计算机目录相关的任务。此实现可帮助您提前找出不同场景(例如创建、删除和更新 VM、VM 的电源管理以及 EBS 加密)所需的缺失权限,从而避免在关键时刻受阻。
您可以使用 PowerShell 命令 Test-HypHypervisorConnection 验证主机连接上的权限。该命令的结果将捕获为一个列表,其中列表中的每个项目都分为三个部分。
- 类别:用户可以执行的用于创建和管理 MCS 计算机目录的操作或任务。
- 纠正措施:管理员必须执行的步骤,以解决用户缺失权限的差异。
- 缺失权限:某个类别的缺失权限列表。
要验证权限,请执行以下操作:
- 创建到 AWS 的主机连接。
- 从 交付控制器 主机打开一个 PowerShell 窗口。
- 执行
asnp citrix*命令,以加载 Citrix 平台专用的 PowerShell 模块。 -
运行以下命令,以验证您是否具有查找自身权限所需的权限。
Test-HypHypervisorConnection -LiteralPath "XDHyp:\Connections\AWSCon" <!--NeedCopy--> -
在您添加了查找自身权限所需的缺失权限后,运行以下命令以验证您是否具有以下类别的权限:
- 创建 更新 删除
- 电源管理
- EBS 加密
Test-HypHypervisorConnection -LiteralPath "XDHyp:\Connections\AWSCon" [-SecurePassword -Password] "password" -UserName "" -CustomProperties "" <!--NeedCopy-->
有关添加权限的更多信息,请参阅 设置 IAM 权限。