Citrix Virtual Apps and Desktops

AWS EC2 的连接方式

创建和管理连接和资源描述了创建连接的向导。以下信息涵盖了 AWS 云环境特有的详细信息。

先决条件

在创建到 AWS EC2 的连接之前,请执行以下操作:

定义 IAM 权限

在创建主机连接之前,需要为 IAM 用户或角色正确定义 IAM 权限策略,以便 Citrix 获得适当的权限,代表您在 AWS 账户中预配和管理资源。使用本节中的信息为 AWS 上的 Citrix Virtual Apps and Desktops 定义 IAM 权限。Amazon 的 IAM 服务允许账户拥有多个用户,这些用户可以进一步组织成组。这些用户可以拥有不同的权限,以控制其执行与账户相关的操作的能力。有关 IAM 权限的更多信息,请参阅 IAM JSON 策略参考

要将 IAM 权限策略应用于新的用户组,请执行以下操作:

  1. 登录到 AWS 管理控制台,并从下拉列表中选择 IAM 服务
  2. 选择 创建新的用户组
  3. 为新的用户组键入名称,然后选择 继续
  4. 权限 页面上,选择 自定义策略,然后选择 选择
  5. 权限策略 键入名称。
  6. 策略文档 部分中,输入相关权限。

输入策略信息后,选择 继续 以完成将 IAM 权限策略应用于用户组。组中的用户仅被授予执行 Citrix Virtual Apps and Desktops 所需操作的权限。

重要提示:

使用本文示例中提供的策略文本,列出 Citrix Virtual Apps and Desktops 在 AWS 账户中执行操作时所使用的操作,而无需将这些操作限制到特定资源。Citrix 建议您将此示例用于测试目的。对于生产环境,您可能需要对资源添加进一步的限制。

添加 IAM 权限

在 AWS 管理控制台的 IAM 部分添加权限:

  1. 摘要 面板中,选择 权限 选项卡。
  2. 选择 添加权限

    身份和访问管理 (IAM)

  3. 添加权限到 屏幕中,授予权限:

    授予 IAM 策略权限

  4. 在 JSON 部分,为您的环境包含 所需的 AWS 权限

    JSON 格式示例

建立新的连接

您可以使用以下方式创建到 Amazon EC2 的连接:

注意:

检查您的代理服务器或防火墙限制,并确保以下地址可访问:https://*.amazonaws.com。此外,请确保 Citrix Gateway 服务连接 中提及的所有地址均可访问。

如果这些地址无法访问,则在创建或更新主机连接时可能会导致失败。

使用 Web Studio 创建连接

  1. 导航到 托管 > 添加连接和资源 页面。
  2. 连接 页面上,按照以下步骤配置连接:

    1. 选择 创建新连接
    2. 区域 中,选择您为 AWS 环境设置的资源位置。
    3. 选择 Amazon EC2 作为连接类型。
    4. 选择以下方法之一来预配资源:

      • 如果您选择 使用此 AWS 账户预配资源,则选择 使用 IAM 用户访问密钥使用 IAM 角色。对于 IAM 用户访问密钥,请提供具有适当 IAM 权限策略的 IAM 用户的 API 密钥秘密密钥,以便 Citrix 管理您的 AWS 账户中的资源。对于 IAM 角色,请确保您已为 Delivery Controller 实例 分配 IAM 角色,并具有适当的 IAM 权限策略,以便 Citrix 管理您的 AWS 账户中的资源。有关详细信息,请参阅 基于角色的身份验证指南
      • 如果您选择 使用跨账户访问预配资源,则提供账户 B 中 IAM 角色的 ARN,账户 A 中的 Delivery Controller 必须承担该角色并在其中执行预配操作。
    5. 输入连接名称,然后单击 下一步
  3. 虚拟机位置 页面上,指定必须预配 VM 的位置。选择用于创建新 VM 的云区域、VPC 和可用区。
  4. 网络 页面上:

    1. 请为在可用区或本地区域中先前选择的资源输入一个名称。
    2. 在您之前菜单中配置的 VPC 中选择一个或多个子网。
  5. 点击浏览剩余页面,直到出现 摘要 页面。
  6. 点击 完成 以创建到 Amazon EC2 的主机连接。

重要注意事项

使用 Studio 创建连接时:

  • 为 Citrix 定义适当的 IAM 权限,以便管理您的 AWS 资源。
  • 如果您使用 IAM 用户访问密钥让 Citrix 管理您的 AWS 资源,则必须提供 API 密钥和秘密密钥值。您可以从 AWS 导出包含这些值的密钥文件,然后将其导入。您还必须提供区域、可用区、VPC 名称、子网地址、域名、安全组名称和凭据。
  • 如果您使用 IAM 角色让 Citrix 管理您的 AWS 资源,则必须确保为所有 Delivery Controller 分配具有适当 IAM 权限的角色。有关详细信息,请参阅基于角色的身份验证指南
  • 根 AWS 账户的凭据文件(从 AWS 控制台检索)的格式与为标准 AWS 用户下载的凭据文件不同。因此,Citrix Virtual Apps and Desktops 无法使用该文件填充 API 密钥和秘密密钥字段。请确保您使用的是 AWS Identity Access Management (IAM) 凭据文件。
  • 该区域可以是可用区或本地区域。

使用 PowerShell 命令行界面创建连接

  1. 打开 PowerShell 命令行管理工具窗口。
  2. Run asnp citrix* to load the Citrix-specific PowerShell modules.
  3. 请运行以下命令。以下是一个示例:

    $connectionName = "demo-hostingconnection"
    $cloudRegion = "us-east-1"
    $apiKey = "aaaaaaaaaaaaaaaaaaaa"
    $apiSecret = “bbbbb”
    $secureKey = ConvertTo-SecureString -String $apiSecret
    $zoneUid = "00000000-0000-0000-0000-000000000000"
    $connectionPath = "XDHyp:\Connections\" + $connectionName
    
    $connection = New-Item -Path $connectionPath -ConnectionType "<name of the connection>" -HypervisorAddress " "@("https://ec2.cn-north-1.amazonaws.com.cn") -Persist -Scope @() -UserName $apiKey -SecurePassword $secureKey -ZoneUid $zoneUid
    
    New-BrokerHypervisorConnection -HypHypervisorConnectionUid $connection.HypervisorConnectionUid
    
    $hostingUnitName = "demo-hostingunit"
    $availabilityzone = "us-east-1a"
    $vpcName = "Default VPC"
    $jobGroup = [Guid]::NewGuid()
    $hostingUnitPath = "XDHyp:\HostingUnits\" + $HostingUnitName
    $rootPath = $connectionPath + "\" + $vpcName + ".virtualprivatecloud\"
    $availabilityZonePath = @($rootPath + $availabilityzone + ".availabilityzone")
    $networkPaths = (Get-ChildItem $availabilityZonePath[0] | Where ObjectType -eq "Network") | Select-Object -ExpandProperty FullPath # will select all the networks in the availability zone
    
    New-Item -Path $hostingUnitPath -AvailabilityZonePath $availabilityZonePath -HypervisorConnectionName $connectionName -JobGroup $jobGroup -PersonalvDiskStoragePath @() -RootPath $rootPath -NetworkPath $networkPaths
    <!--NeedCopy-->
    

注意:

要使用基于角色的身份验证创建连接,请将 apiKey 和 apiSecret 指定为 role_based_auth

限制事项

如果您在 AWS 控制台中更改 AWS 虚拟私有云 (VPC) 的名称,则 Citrix Cloud™ 中现有的托管单元将中断。当托管单元中断时,您无法创建目录或向现有目录添加计算机。要解决此问题,请将 AWS VPC 的名称改回原始名称。

跨账户资源预配

在某些用例中,Delivery Controller 希望放置在单独的 AWS 账户(共享服务账户或站点组件账户)中,并具有跨账户访问权限的 IAM 角色(跨账户 IAM 角色),以及在单独的辅助 AWS 账户(工作负载账户)中预配的 MCS 计算机目录,而无需在单独的账户中部署额外的 Delivery Controller。为了支持此类场景,此功能使用 VPC 对等和通过 IAM 角色进行的跨账户访问,使管理多个 AWS 账户的企业能够在不同的 AWS 账户之间进行预配。

借助 VPC 对等,您可以让您的 Delivery Controller 和不同区域或账户中预配的 VM 之间能够相互通信。

借助 使用 IAM 角色进行跨账户访问,您可以允许主账户(Delivery Controller 账户)承担 IAM 角色,以访问辅助账户(计算机目录 VM)中的 AWS 资源。

要允许 Delivery Controller 访问辅助账户的资源,请在承担辅助账户的 IAM 角色后创建主机连接。

先决条件

在为跨账户预配创建主机连接之前,请设置以下内容:

设置 VPC 对等

我们假设 VPC A 位于主账户(账户 A)中,并且包含 Delivery Controllers 和 Active Directory。VPC B 位于辅助账户(账户 B)中,您希望在此处预配虚拟机。

要在账户 A 和账户 B 之间设置 VPC 对等连接,请执行以下操作:

  1. 创建 VPC 对等连接。请参阅:

  2. 转到您的 VPC A 以及与公共子网关联的路由表。
  3. Click Edit Routes > Add route. Add VPC B’s CIDR block in the Destination column and add the VPC peering you created in the Target column.
  4. 重复步骤 2 和 3,但使用 VPC A 和 VPC B 的私有子网(添加 VPC A 的 CIDR 块)。请参阅 更新 VPC 对等连接的路由表
  5. 转到与 VPC A 关联的私有安全组。
  6. 选择 操作,然后选择 编辑入站规则
  7. 选择 添加规则。对于类型,选择 所有流量,然后在 源列 中添加:

    • 如果区域不同,请添加 VPC B 的 CIDR 块。
    • 如果账户不同但区域相同,请添加 VPC B 的账户 ID 和私有安全组 ID,并用正斜杠分隔(例如,123456789012/sg-1a2b3c4d)
  8. 重复步骤 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 位于辅助账户(账户 B)中,您希望在此处预配 VM。

  1. 按照前面提到的步骤设置跨账户 VPC 对等连接。
  2. 在账户 B 中创建具有最少 Citrix IAM 权限的 IAM 角色和策略。请参阅 IAM 教程:使用 IAM 角色委派跨 AWS 账户的访问权限。假设此角色的 ARN 为“arn:aws:iam::5678:role/citrix-role”。
  3. 将信任策略添加到角色“arn:aws:iam::5678:role/citrix-role”,以便账户 A 角色“arn:aws:iam::1234:role/primary-account-citrix-role”可以访问它,详情请参阅 - 身份和访问管理中的跨账户资源访问
  4. 在账户 A 中创建之前提到的名为“primary-account-citrix role”的 IAM 角色和策略,该角色和策略可以承担 IAM 角色并从账户 B 传递 IAM 角色 (arn:aws:iam::5678:role/citrix-role)。
  5. 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,也会被忽略。
  • MaximumAssumeRoleDurationInSecondsDurationInSeconds 必须介于 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 和网络。

编辑一个连接

您可以编辑现有主机连接以:

编辑提供 IAM 权限的选项

  1. 右键单击现有 Amazon EC2 连接。
  2. 在“连接属性”页面上,单击“编辑设置”。
  3. 选择一个选项以为 Citrix 提供 IAM 权限以管理资源。输入所需详细信息,然后单击“保存”。

修改同时进行的最大操作数量

在 Studio 中为 Amazon EC2 创建主机连接时,将显示以下默认值:

选项 绝对值 百分比
同时操作(所有类型) 125 100
每分钟最大新操作数 150 不适用
最大并发的预配操作数量 100 不适用

MCS 默认支持 100 个最大并发预配操作。

通过访问编辑连接屏幕上的 Citrix Studio 高级部分来配置这些值。

或者,您可以使用远程 PowerShell SDK 为您的环境设置最佳的并发操作最大数量。

使用 PowerShell 自定义属性 MaximumConcurrentProvisioningOperations 来指定并发 AWS 预配操作的最大数量。

在配置之前:

  • 确保您已安装适用于云的 PowerShell SDK。
  • 请注意,MaximumConcurrentProvisioningOperations 的默认值为 100。

执行以下步骤来自定义 MaximumConcurrentProvisioningOperations 值:

  1. 请打开一个 PowerShell 窗口。
  2. 运行 asnp citrix* 以加载思杰特定的 PowerShell 模块。
  3. 输入 cd xdhyp:\Connections\
  4. 输入 dir 以列出连接。
  5. 更改或初始化自定义属性字符串:

    • 如果自定义属性字符串有值,请将自定义属性复制到记事本中。然后,将 MaximumConcurrentProvisioningOperations 属性更改为您首选的值。您可以输入 1 到 1000 之间的值。 例如,<Property xsi:type="IntProperty" Name="MaximumConcurrentProvisioningOperations" Value="xyz"/>

    • 如果自定义属性字符串为空或为 null,则必须通过输入架构和 MaximumConcurrentProvisioningOperations 属性的正确语法来初始化该字符串。

  6. PowerShell 窗口中,从记事本粘贴修改后的自定义属性,并将一个变量分配给修改后的自定义属性。如果您初始化了自定义属性,请在语法后添加以下行:

    $customProperties = '<CustomProperties xmlns="http://schemas.citrix.com/2014/xd/machinecreation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Property xsi:type="IntProperty" Name="MaximumConcurrentProvisioningOperations" Value="100"/></CustomProperties>'

    此字符串将 MaximumConcurrentProvisioningOperations 属性设置为 100。在自定义属性字符串中,您必须将 MaximumConcurrentProvisioningOperations 属性设置为符合您需求的值。

  7. 输入 Get-XDAuthentication,系统将提示您输入凭据。
  8. 运行 $cred = Get-Credential,系统可能会提示您仅输入密码(或用户名和密码)。系统还可能会提示您输入应用程序 ID 和关联的密钥。对于使用基于角色的身份验证的连接,role_based_auth 既是用户名也是密码。否则,请输入 AWS API ID 和密钥。
  9. 运行 set-item -PSPath 'XDHyp:\Connections<connection-name>' -CustomProperties $customProperties -username $cred.username -Securepassword $cred.password。您必须将 <connection-name> 设置为连接的名称。
  10. 输入 dir 以验证更新后的 CustomProperties 字符串。

配置每个网络接口的安全组

编辑主机连接时,您现在可以使用 PowerShell 命令配置每个弹性网络接口 (ENI) 允许的最大安全组数量。有关 AWS 安全组配额值的信息,请参阅 安全组

要配置每个网络接口的安全组,请执行以下操作:

  1. 打开一个 PowerShell 命令行窗口。
  2. 运行 asnp citrix* 以加载 思杰 专用 PowerShell 模块。
  3. 运行 cd xdhyp:\Connections\
  4. 运行 dir 以列出连接。
  5. 运行以下 PowerShell 命令以配置每个网络接口的安全组:

    Set-HypHypervisorConnectionMetadata -HypervisorConnectionName aws -Name "Citrix_MachineManagement_Options" -Value " AwsMaxENISecurityGroupLimit=<number>"
    <!--NeedCopy-->
    

    注意:

    如果您没有为 AwsMaxENISecurityGroupLimit 设置值,则它将采用默认值 5。

服务终结点 URL

标准区域服务终结点 URL

当您使用 MCS 时,将添加一个新的 AWS 连接,其中包含 API 密钥和 API 秘密。MCS 使用此信息以及经过身份验证的帐户,通过 AWS DescribeRegions EC2 API 调用查询 AWS 以获取支持的区域。查询是使用通用 EC2 服务终结点 URL https://ec2.amazonaws.com/ 进行的。使用 MCS 从支持的区域列表中选择连接的区域。系统会自动为该区域选择首选的 AWS 服务终结点 URL。但是,创建服务终结点 URL 后,您将无法再设置或修改该 URL。

所需的 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",
                "ec2:DescribeInstanceStatus"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}
<!--NeedCopy-->

创建、更新或删除 VM

创建、更新或删除计算机目录,其中 VM 作为 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:DescribeInstanceStatus",
                "ec2:DescribeInstanceTypes",
                "ec2:DescribeLaunchTemplates",
                "ec2:DescribeLaunchTemplateVersions",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribeRegions",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeSnapshots",
                "ec2:DescribeSubnets",
                "ec2:DescribeTags",
                "ec2:DescribeSpotInstanceRequests",
                "ec2:CancelSpotInstanceRequests",
                "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-->

注意:

  • 与SecurityGroups相关的EC2部分仅在目录创建期间需要为准备VM创建隔离安全组时才需要。一旦完成此操作,这些权限就不再需要。

导入虚拟机

通过导入虚拟机来创建计算机目录。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "ec2:DescribeInstances",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeAvailabilityZones",
                "ec2:DescribeSubnets",
                "ec2:DescribeVolumes",
                "ec2:DescribeSpotInstanceRequests"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}
<!--NeedCopy-->

注意:

ec2:DescribeSpotInstanceRequests仅在要导入虚拟机的AWS区域中存在竞价型实例时才需要。

直接磁盘上传和下载

直接磁盘上传消除了计算机目录预配对卷工作器的要求,转而使用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: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 密钥管理服务官方文档

基于 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 时,在 Delivery Controller ec2 实例上配置所需的 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:CancelSpotInstanceRequests",
                "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 部分。
  • iam:PassRole 权限部分仅在 role_based_auth 时才需要。
  • 可以根据您的要求和环境添加特定的资源级权限,而不是完全访问权限。有关更多详细信息,请参阅 AWS 文档 揭秘 EC2 资源级权限AWS 资源的访问管理
  • 仅当您使用卷工作器方法时,才使用 ec2:CreateNetworkInterfaceec2:DeleteNetworkInterface 权限。

验证主机连接上的权限

您可以验证主机连接上的权限,以执行与创建和管理 MCS 计算机目录相关的任务。此实施可帮助您提前找出在不同场景(例如创建、删除和更新 VM、VM 的电源管理以及 EBS 加密)中所需的缺失权限,从而避免在关键时刻受阻。

您可以使用 PowerShell 命令 Test-HypHypervisorConnection 验证主机连接上的权限。该命令的结果被捕获为一个列表,列表中的每个项目都分为三个部分。

  • 类别:用户可以执行的用于创建和管理 MCS 计算机目录的操作或任务。
  • 纠正措施:管理员必须执行的步骤,以解决用户缺失权限的差异。
  • 缺失权限:某个类别缺失的权限列表。

要验证权限,请执行以下操作:

  1. 创建到 AWS 的主机连接。
  2. 从交付控制器™ 主机打开 PowerShell 窗口。
  3. 运行 asnp citrix* 以加载思杰专用的 PowerShell 模块。
  4. 运行以下命令,以验证您是否具备查询自身权限所需的权限。

    Test-HypHypervisorConnection -LiteralPath "XDHyp:\Connections\AWSCon"
    <!--NeedCopy-->
    
  5. 在您添加了查询自身权限所需的缺失权限后,运行以下命令以验证您是否在以下类别中拥有权限:

    • 创建、更新、删除
    • 电源管理
    • EBS 加密
    Test-HypHypervisorConnection -LiteralPath "XDHyp:\Connections\AWSCon" [-SecurePassword -Password] "password" -UserName "" -CustomProperties ""
    <!--NeedCopy-->
    

有关添加权限的更多信息,请参阅 添加 IAM 权限

后续步骤

更多信息

AWS EC2 的连接方式