与 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 个并发预配操作。
跨帐户预配
在某些用例中,希望将 Delivery Controller 放置在主 AWS 帐户(共享服务帐户或站点组件帐户)中,该帐户拥有具有跨帐户访问权限的 IAM 角色(跨帐户 IAM 角色),并且 MCS 预配的计算机目录位于单独的辅助 AWS 帐户(工作负载帐户)中,而无需在单独的帐户中安装额外的 Delivery Controller。 为了支持此类场景,此功能使用 VPC 对等连接和使用 IAM 角色的跨帐户访问,使管理多个 AWS 帐户的企业能够跨不同的 AWS 帐户进行配置。
通过 VPC 对等,可以让您的 Delivery Controller 和在不同区域和/或帐户中预配的 VM 能够相互通信。
通过使用 IAM 角色进行跨帐户访问,您可以允许主帐户(Delivery Controller 帐户)承担 IAM 角色来访问辅助帐户(计算机目录 VM)中的 AWS 资源。
为了允许 Delivery Controller 访问辅助帐户的资源,请在从辅助帐户承担 IAM 角色后创建主机连接。
必备条件
请在创建跨帐户预配的主机连接之前设置以下内容:
- 设置 VPC 对等连接并在两个区域或帐户中配置安全组。 请参阅设置 VPC 对等连接
- 使用 IAM 角色委派跨帐户访问权限。 请参阅(指向以下主题的链接)。
设置 VPC 对等连接
假设 VPC A 位于主帐户(帐户 A)中,并且具有 Delivery Controller 和 Active Directory。 VPC B 位于您想要预配 VM 的辅助帐户(帐户 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 角色来访问辅助帐户(计算机目录 VM)中的 AWS 资源。
要访问跨帐户资源,请执行以下操作:
谨记:
假设 VPC A 位于主帐户(帐户 A)中,并且具有 Delivery Controller 和 Active Directory。 VPC B 位于您想要预配 VM 的辅助帐户(帐户 B)中
- 按照上述步骤设置跨帐户的 VPC 对等连接。
- 在帐户 B 中创建具有最少 Citrix IAM 权限的 IAM 角色和策略。 请参阅 IAM 教程:使用 IAM 角色委派跨 AWS 帐户的访问权限。 假设此角色的 arn 为“arn:aws:iam::5678:role/citrix-role”。
- 将“信任”策略添加到角色“arn:aws:iam::5678:role/citrix-role”中,以便允许帐户 A 角色“arn:aws:iam::1234:role/primary-account-citrix-role”按照 IAM 中的跨帐户资源访问进行访问。
- 在帐户 A 中创建 IAM 角色和策略,名称如上所述为“primary-account-citrix role”,该角色和策略能够承担 IAM 角色并从帐户 B 传递 IAM 角色 (arn:aws:iam::5678:role/citrix-role)。
- 将角色“arn:aws:iam::1234:role/primary-account-citrix-role”分配给帐户 A 中的所有 Delivery Controller。
Delivery Controller 现在可以承担帐户 B 中的角色 (“arn:aws:iam::5678:role/citrix-role”)。
创建用于跨帐户预配的主机连接
在您想要预配 VM 的辅助帐户(帐户 B)中创建主机连接。 这样,帐户 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 时,会添加一个带有 API 密钥和 API 机密的新 AWS 连接。 借助这些信息以及经过身份验证的帐户,MCS 使用 AWS DescribeRegions EC2 API 调用向 AWS 查询支持的区域。 查询是使用通用 EC2 服务端点 URL https://ec2.amazonaws.com/ 进行的。 请使用 MCS 从支持的区域列表中选择用于连接的区域。 系统会自动为区域选择首选的 AWS 服务端点 URL。 但是,在创建服务端点 URL 之后,您将无法再设置或修改该 URL。
定义 IAM 权限
使用本部分中的信息定义 AWS 上的 Citrix Virtual Apps and Desktops 的 IAM 权限。 Amazon 的 IAM 服务允许帐户拥有多个用户,这些用户可以进一步组织到组中。 这些用户可以拥有不同的权限来控制其执行与帐户关联的操作的能力。 有关 IAM 权限的详细信息,请参阅 IAM JSON 策略参考。
要将 IAM 权限策略应用到新用户组,请执行以下操作:
- 登录 AWS 管理控制台,然后从下拉列表中选择 IAM service(IAM 服务)。
- 选择 Create a New Group of Users(创建新用户组)。
- 键入新用户组的名称,然后选择 Continue(继续)。
- 在 Permissions(权限)页面上,选择 Custom Policy(自定义策略)。 选择选择。
- 键入权限策略的名称。
- 在策略文档部分中,输入相关权限。
输入策略信息后,选择 Continue(继续)以完成创建用户组。 组中的用户被授予仅执行 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 权限的完整列表。
注意:
只有 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 创建隔离安全组时,才需要与安全组相关的 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: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,请先在我们站点的所有 Delivery Controller 上配置所需的 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: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 资源访问管理)。
验证主机连接的权限
可以验证主机连接的权限,以执行与创建和管理 MCS 计算机目录有关的任务。 此实施可帮助您提前找出创建、删除和更新 VM、VM 的电源管理和 EBS 加密等不同场景所需的缺失权限,从而避免在关键时刻被阻止。
可以使用 PowerShell 命令 Test-HypHypervisorConnection 验证主机连接的权限。 该命令的结果捕获为一个列表,其中列表中的每个项目分为三个部分。
- 类别:用户在创建和管理 MCS 计算机目录时可以执行的操作或任务。
- 更正操作:管理员为解决用户缺少的权限差异而必须执行的步骤。
- 缺少的权限:类别缺少的权限列表。
要验证权限,请执行以下操作:
- 创建与 AWS 的主机连接。
- 从 Delivery Controller 主机打开 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 权限。