Citrix Virtual Apps and Desktops

AWS 云环境

本文将指导您完成设置 AWS 帐户作为能够与 Citrix Virtual Apps and Desktops 结合使用的资源位置的过程。资源位置包括基本组件集,非常适用于不需要资源跨多个可用性区域传播的概念证明或其他部署。完成这些任务后,可以安装 VDA、置备计算机、创建计算机目录以及创建交付组。

完成本文中的任务时,您的资源位置包括以下组件:

  • 单个可用性区域中具有公用子网和专用子网的虚拟私有云 (VPC)。
  • 同时作为 Active Directory 域控制器和 DNS 服务器运行的实例,位于 VPC 的专用子网中。
  • VPC 的公用子网中用作堡垒主机的实例。此实例用于启动与专用子网中的实例的 RDP 连接以实现管理目的。完成设置资源位置后,可以关闭此实例,以便其不再易于访问。必须管理专用子网中的其他实例(例如 VDA 实例)时,可以重新启动堡垒主机实例。

任务概述

设置具有公用子网和专用子网的虚拟私有云 (VPC)。完成此任务后,AWS 会在公用子网中部署具有弹性 IP 地址的 NAT 网关。此操作使得专用子网中的实例能够访问 Internet。公用子网中的实例可由入站公共流量访问,但专用子网中的实例不可访问。

配置安全组。安全组用作控制 VPC 中的实例的流量的虚拟防火墙。您负责向安全组中添加允许公共子网中的实例与专用子网中的实例进行通信的规则。您还将这些安全组与 VPC 中的每个实例相关联。

创建 DHCP 选项集。如果使用 Amazon VPC,则默认将提供 DHCP 和 DNS 服务,这将影响您在 Active Directory 域控制器中配置 DNS 的方式。Amazon 的 DHCP 无法禁用,并且 Amazon 的 DNS 只能用于公共 DNS 解析,而不能用于 Active Directory 名称解析。要指定通过 DHCP 传递给实例的域和名称服务器,请创建 DHCP 选项集。该选项集将为您的 VPC 中的所有实例分配 Active Directory 域后缀并指定 DNS 服务器。要确保主机 (A) 和反向查找 (PTR) 记录在实例加入域时自动注册,请为要添加到专用子网中的每个实例配置网络适配器属性。

向 VPC 中添加堡垒主机和域控制器。通过堡垒主机,您可以登录专用子网中的实例以设置域并将实例加入该域。

任务 1:设置 VPC

  1. 在 AWS 管理控制台中,选择 VPC
  2. 在 VPC 控制板中,选择 Create VPC(创建 VPC)。
  3. 选择  VPC and more(VPC 及更多)。
  4. 在“NAT gateways ($)”(NAT 网关($))下,选择 In 1 AZ1 per AZ
  5. 在“DNS”选项下,保留 Enable DNS hostnames(启用 DNS 主机名)处于选中状态。
  6. 选择创建 VPC。AWS 将创建公用子网和专用子网、Internet 网关、路由表和默认安全组。

任务 2:配置安全组

此任务将为您的 VPC 创建并配置以下安全组:

  • 与您的公用子网中的实例关联的公共安全组。
  • 与您的专用子网中的实例关联的专用安全组。

要创建安全组,请执行以下操作:

  1. 在 VPC 控制面板中,选择 Security Groups(安全组)。
  2. 为公共安全组创建安全组。选择创建安全组,然后输入组的名称标记和说明。在“VPC”中,选择之前创建的 VPC。选择是,创建

配置公用安全组

  1. 在安全组列表中,选择“Public security group”(公用安全组)。

  2. 选择入站规则选项卡,然后选择编辑以创建以下规则:

    类型
    所有流量 选择“Private security group”(专用安全组)。
    所有流量 选择“Public security group”(公用安全组)。
    ICMP 0.0.0.0/0
    22 (SSH) 0.0.0.0/0
    80 (HTTP) 0.0.0.0/0
    443 (HTTPS) 0.0.0.0/0
    1494 (ICA/HDX) 0.0.0.0/0
    2598 (Session Reliability)(2598(会话可靠性)) 0.0.0.0/0
    3389 (RDP) 0.0.0.0/0
  3. 完成后,选择保存

  4. 选择出站规则选项卡,然后选择编辑以创建以下规则:

    类型 目标
    所有流量 选择“Private security group”(专用安全组)。
    所有流量 0.0.0.0/0
    ICMP 0.0.0.0/0
  5. 完成后,选择保存

配置专用安全组

  1. 在安全组列表中,选择“Private security group”(专用安全组)。

  2. 如果尚未设置来自公共安全组的流量,则必须设置 TCP 端口;请选择入站规则选项卡,然后选择编辑以创建以下规则:

    类型
    所有流量 选择“Private security group”(专用安全组)。
    所有流量 选择“Public security group”(公用安全组)。
    ICMP 选择“Public security group”(公用安全组)。
    TCP 53 (DNS) 选择“Public security group”(公用安全组)。
    UDP 53 (DNS) 选择“Public security group”(公用安全组)。
    80 (HTTP) 选择“Public security group”(公用安全组)。
    TCP 135 选择“Public security group”(公用安全组)。
    TCP 389 选择“Public security group”(公用安全组)。
    UDP 389 选择“Public security group”(公用安全组)。
    443 (HTTPS) 选择“Public security group”(公用安全组)。
    TCP 1494 (ICA/HDX) 选择“Public security group”(公用安全组)。
    TCP 2598 (Session Reliability)(TCP 2598(会话可靠性)) 选择“Public security group”(公用安全组)。
    3389 (RDP) 选择“Public security group”(公用安全组)。
    TCP 49152–65535 选择“Public security group”(公用安全组)。
  3. 完成后,选择保存。

  4. 选择出站规则选项卡,然后选择编辑以创建以下规则:

    类型 目标
    所有流量 选择“Private security group”(专用安全组)。
    所有流量 0.0.0.0/0
    ICMP 0.0.0.0/0
    UDP 53 (DNS) 0.0.0.0/0
  5. 完成后,选择保存

任务 3:启动实例

以下步骤将创建两个 EC2 实例并解密 Amazon 生成的默认管理员密码:

  1. 在 AWS 管理控制台中,选择 EC2
  2. 在 EC2 控制面板中,选择 Launch Instance(启动实例)。
  3. 选择 Windows Server 计算机映像和实例类型。
  4. Configure Instance Details(配置实例详细信息)页面上,输入实例的名称并选择以前设置的 VPC。
  5. Subnet(子网)中,为每个实例做以下选择:

    • Bastion host(堡垒主机):选择“Public subnet”(公用子网)
    • Domain Controller(域控制器):“Private subnet”(专用子网)
  6. Auto-assign Public IP address(自动分配公用 IP 地址)中,为每个实例做以下选择:

    • Bastion host(堡垒主机):选择 Enable(启用)。
    • Domain controller(域控制器):选择 Use default setting(使用默认设置)或 Disable(禁用)。
  7. Network Interfaces(网络接口)中,为域控制器输入您的专用子网 IP 范围内的主 IP 地址。
  8. 如有必要,请在 Add Storage(添加存储)页面上修改磁盘大小。
  9. Tag Instance(标记实例)页面上,输入每个实例的友好名称。
  10. Configure Security Groups(配置安全组)页面上,选择 Select an existing security group(选择现有安全组),然后为每个实例做以下选择:

    • Bastion host(堡垒主机):选择“Public security group”(公用安全组)。
    • 域控制器:选择专用安全组。
  11. 检查所做的选择,然后选择 Launch(启动)。
  12. 创建新密钥对或选择现有密钥对。如果创建新密钥对,请下载您的私钥 (.pem) 文件并将其保存在一个安全的位置。获取实例的默认管理员密码时,必须提供您的私钥。
  13. 选择 Launch Instances(启动实例)。选择 View Instances(查看实例)以显示您的实例列表。请等到新启动的实例通过所有状态检查后再进行访问。
  14. 获取每个实例的默认管理员密码:

    1. 在实例列表中,选择实例,然后选择 Connect(连接)。
    2. 转到 RDP client(RDP 客户端)选项卡,选择 Get Password(获取密码),并在出现提示时上载您的私钥 (.pem) 文件。
    3. 选择 Decrypt Password(解密密码)以获取人类可读的密码。AWS 将显示默认密码。
  15. 重复执行步骤 2 中的步骤,直到创建了两个实例:

    • 您的公用子网中的一个堡垒主机实例
    • 您的专用子网中用作域控制器的实例。

任务 4:创建 DHCP 选项集

  1. 在 VPC 控制面板中,选择 DHCP Options Sets(DHCP 选项集)。

  2. 输入以下信息:

    • Name tag(名称标记):为选项集输入一个友好名称。
    • Domain name(域名):输入配置域控制器实例时使用的完全限定域名。
    • Domain name servers(域名服务器):输入分配给域控制器实例的专用 IP 地址和字符串 AmazonProvidedDNS,以逗号分隔。
    • NTP servers(NTP 服务器):将此字段留空。
    • NetBIOS name servers(NetBIOS 名称服务器):输入域控制器实例的专用 IP 地址。
    • NetBIOS node type(NetBIOS 节点类型):输入 2
  3. 选择是,创建。

  4. 将新选项集与您的 VPC 相关联:

    1. 在 VPC 控制面板中,选择 Your VPCs(您的 VPC),然后选择之前设置的 VPC。
    2. 依次选择 Actions(操作)> Edit DHCP Options Set(编辑 DHCP 选项集)
    3. 系统提示时,选择创建的新选项集,然后选择 Save(保存)。

任务 5:配置实例

  1. 使用 RDP 客户端连接到堡垒主机实例的公用 IP 地址。系统提示时,输入管理员帐户的凭据。

  2. 在堡垒主机实例中,启动远程桌面连接并连接到要配置的实例的专用 IP 地址。系统提示时,输入实例的管理员凭据。

  3. 为专用子网中的所有实例配置 DNS 设置:

    1. 依次选择开始 > 控制面板 > 网络和 Internet > 网络和共享中心 > 更改适配器设置。双击显示的网络连接。
    2. 选择属性 > Internet 协议版本 4 (TCP/IPv4) > 属性
    3. 选择高级 > DNS。确保以下设置处于启用状态,然后选择确定

      • 在 DNS 中注册此连接的地址
      • 在 DNS 注册中使用此连接的 DNS 后缀
  4. 要配置域控制器,请执行以下操作:

    1. 使用服务器管理器,添加具有所有默认功能的 Active Directory 域服务角色。
    2. 将实例提升为域控制器。提升过程中,启用 DNS 并使用创建 DHCP 选项集时指定的域名。系统提示时,重新启动实例。

创建连接

在 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。

AWS 租赁

AWS 提供以下租赁选项:共享租赁(默认类型)和专用租赁。共享租赁意味着来自不同客户的多个 Amazon EC2 实例可能位于同一个物理硬件上。专用租赁意味着您的 EC2 实例仅与已部署的其他实例一起在硬件上运行。其他客户不使用同一个硬件。

您可以使用 MCS 通过 PowerShell 来预配 AWS 专用主机。

使用 PowerShell 配置 AWS 专用主机租赁

可以使用通过 PowerShell 定义的主机租赁创建计算机目录。

Amazon [EC2] 专用主机是具有完全专用的 [EC2] 实例容量的物理服务器,允许您按套接字或 VM 使用现有软件许可证。

专用主机具有基于实例类型的预设利用率。例如,针对 C4 大型实例类型分配的一个专用主机最多运行 16 个实例。请参阅 AWS 站点以了解详细信息。

用于预配到 AWS 主机的要求包括:

  • 导入的 BYOL(自带许可)映像 (AMI)。通过专用主机,使用并管理您的现有许可证。
  • 分配了具有足够利用率的专用主机,可满足预配请求。
  • 启用自动放置

要使用 PowerShell 预配到 AWS 中的专用主机,请使用参数 TenancyType 设置为主机New-ProvScheme cmdlet。

请参阅 Citrix 开发人员文档以了解详细信息。

AWS 实例属性捕获

创建目录以在 AWS 中使用 Machine Creation Services (MCS) 预配计算机时,可以选择一个 AMI 来表示该目录的主映像/黄金映像。在该 AMI 中,MCS 使用磁盘的快照。在早期版本中,如果您希望在计算机上使用角色或标记,则可以使用 AWS 控制台对其进行单独设置。 默认启用此功能。

提示:

您必须拥有与 AMI 关联的 VM,才能使用 AWS 实例属性捕获功能。

为了改进此过程,MCS 从从中获取 AMI 的实例中读取属性,并将计算机的标识和访问管理 (IAM) 角色和标记应用于为给定目录预配的计算机。使用此可选功能时,目录创建过程会查找选定的 AMI 源实例,读取一组有限的属性。然后,这些属性将存储在 AWS 启动模板中,该模板用于为该目录预配计算机。目录中的任何计算机都会继承捕获的实例属性。

捕获的属性包括:

  • IAM 角色 - 应用于预配的实例。
  • 标记 - 应用于预配的实例、其磁盘和 NIC。这些标记应用于临时 Citrix 资源,包括:S3 存储桶和对象、卷和工作线程资源以及 AMI、快照和启动模板。

提示:

临时 Citrix 资源的标记是可选的,可使用自定义属性 AwsOperationalResourcesTagging 进行配置。

捕获 AWS 实例属性

在为 AWS 托管连接创建预配方案时,可以通过指定自定义属性 AwsCaptureInstanceProperties 来使用此功能:

New-ProvScheme -CustomProperties “AwsCaptureInstanceProperties,true” …<standard provscheme parameters

请参阅 Citrix 开发人员文档以了解详细信息。

应用 AWS 实例属性和标记运行资源

在创建目录以使用 MCS 在 AWS 中预配计算机时,可以控制是否将 IAM 角色和标记属性应用到这些计算机。还可以控制是否将计算机标记应用到运行资源。

AWS 运行资源标记

Amazon Machine Image (AMI) 表示用于在 Amazon 云环境中创建虚拟机的一种虚拟设备,通常称为 EC2。可以使用 AMI 部署使用 EC2 环境的服务。创建目录以使用适用于 AWS 的 MCS 预配计算机时,可以选择 AMI 作为该目录的黄金映像。

重要:

使用运行资源标记需要通过捕获实例属性和启动模板来创建目录。

要创建 AWS 目录,必须首先为希望成为黄金映像的实例创建 AMI。MCS 从该实例读取标记并将其合并到启动模板中。然后,启动模板标记将应用于在 AWS 环境中创建的所有 Citrix 资源,包括:

  • 虚拟机
  • VM 磁盘
  • VM 网络接口
  • S3 存储桶
  • S3 对象
  • 启动模板
  • AMI

标记运行资源

要使用 PowerShell 标记资源,请执行以下操作:

  1. 从 DDC 主机打开 PowerShell 窗口。
  2. 运行命令 asnp citrix 以加载 Citrix 特定的 PowerShell 模块。

要为已预配的 VM 标记资源,请使用新自定义属性 AwsOperationalResourcesTagging。此属性的语法为:

New-ProvScheme -CustomProperties “AwsCaptureInstanceProperties,true; AwsOperationalResourcesTagging,true” …<standard provscheme parameters>

定义 IAM 权限

使用本部分中的信息定义 AWS 上的 Citrix DaaS 的 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 DaaS 所需操作的权限。

重要:

使用上例中提供的策略文本列出 Citrix DaaS 在 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 创建隔离安全组时,才需要与 SecurityGroups 相关的 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 资源访问管理)。

更多信息