与 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。
定义 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: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:DeleteSnapshot
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,请先在我们站点的所有 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: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 资源访问管理)。
验证主机连接的权限
可以验证主机连接的权限,以执行与创建和管理 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 权限。