连接到 AWS
创建和管理连接和资源 描述了创建连接的向导。以下信息涵盖了 AWS 云环境特有的详细信息。
注意:
在创建到 AWS 的连接之前,您需要首先将您的 AWS 账户设置为资源位置。请参阅 AWS 云环境。
创建连接
从 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 个最大并发预配操作。
服务终结点 URL
标准区域服务终端节点 URL
使用 MCS 时,将添加一个包含 API 密钥和 API 秘密的新 AWS 连接。借助此信息以及经过身份验证的帐户,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 Management Console 的“IAM”部分中设置权限:
-
在“摘要”面板中,选择“权限”选项卡。
-
选择“添加权限”。
在 添加权限到 屏幕中,授予权限:
在 JSON 选项卡中,使用以下内容作为示例:
提示:
所提及的 JSON 示例可能不包含您的环境所需的所有权限。有关详细信息,请参阅 如何在 AWS 上运行 Citrix Virtual Apps and Desktops 时定义身份和访问管理权限。
所需的 AWS 权限
本节包含 AWS 权限的完整列表。
注意:
iam:PassRole 权限仅在 role_based_auth 中需要。
创建主机连接
使用来自 AWS 的信息添加新的主机连接。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"ec2:DescribeAvailabilityZones",
"ec2:DescribeImages",
"ec2:DescribeInstances",
"ec2:DescribeInstanceTypes",
"ec2:DescribeSecurityGroups",
"ec2:DescribeSubnets",
"ec2:DescribeVpcs",
"ec2:DescribeRegions",
"ec2:DescribeSnapshots",
"ec2:DescribeLaunchTemplates"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
虚拟机电源管理
虚拟机实例已开机或关机。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"ec2:AttachVolume",
"ec2:CreateVolume",
"ec2:DeleteVolume",
"ec2:DescribeInstances",
"ec2:DescribeVolumes",
"ec2:DetachVolume",
"ec2:StartInstances",
"ec2:StopInstances",
"ec2:DescribeInstanceStatus"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
创建、更新或删除虚拟机
创建、更新或删除计算机目录,其中 VM 作为 AWS 实例进行预配。
{
"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: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: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": "*"
}
]
}
注意:
仅当在目录创建期间必须为准备 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": "*"
}
]
}
注意:
用户可以自行决定通过包含资源和条件块来将权限限制为特定密钥。例如,带条件的 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
}
}
}
]
}
以下密钥策略语句是 KMS 密钥的整个默认密钥策略,它允许帐户使用 IAM 策略委托 KMS 密钥上的所有操作 (kms:*) 权限。
{
"Sid": "Enable IAM policies",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:root"
},
"Action": "kms:",
"Resource": ""
}
有关详细信息,请参阅 AWS Key Management Service 官方文档。
基于 IAM 角色的身份验证
添加以下权限以支持基于角色的身份验证。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::*:role/*"
}
]
}
最小 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: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: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/*"
}
]
}
注意:
-
仅当在目录创建期间必须为准备 VM 创建隔离安全组时,才需要与 SecurityGroups 相关的 EC2 部分。完成此操作后,不再需要这些权限。
-
仅在使用 EBS 卷加密时才需要 KMS 部分。
-
iam:PassRole 权限部分仅在 role_based_auth 中需要。
-
可以根据您的要求和环境添加特定的资源级权限,而不是完全访问权限。有关更多详细信息,请参阅 AWS 文档 揭秘 EC2 资源级权限 和 AWS 资源访问管理。