本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 AWS 服务
AWS Identity and Access Management
使用 IAM 角色访问 AWS 服务,并在与之关联的 IAM 策略中具体说明,是一种最佳实践,它规定只有 WorkSpaces 应用程序会话中的用户才能访问服务,而无需管理其他证书。遵循在 WorkSpaces 应用程序中使用 IAM 角色的最佳实践。
创建 IAM 策略来保护 Amazon S3 存储桶,这些存储桶是为了在主文件夹和应用程序设置中保留用户数据而创建的。这样可以防止非WorkSpaces 应用程序管理员进行访问。
VPC 端点
VPC 终端节点可在您的 VPC 与支持的 AWS 服务以及由提供支持的 VPC 终端节点服务之间建立私有连接 AWS PrivateLink。 AWS PrivateLink 是一种允许您使用私有 IP 地址私密访问服务的技术。VPC 和其他服务之间的通信不会离开 Amazon 网络。如果仅 AWS 服务需要访问公共互联网,则 VPC 终端节点将完全取消对 NAT 网关和互联网网关的要求。
在自动化例程或开发人员需要对应用程序进行 API 调用的环境中,为 WorkSpaces 应用程序 API 操作创建接口 VPC 终端节点。 WorkSpaces 例如,如果私有子网中有 EC2 实例没有公共互联网访问权限,则可以使用 WorkSpaces 应用程序 API 的 VPC 终端节点来调用 AppStream 2.0 API 操作,例如 CreateStreamingURL。下图显示了一个示例设置,其中 Lambda 函数和 EC2 实例使用 WorkSpaces 应用程序 API 和流式 VPC 终端节点。
VPC 端点
流式传输 VPC 端点允许您通过 VPC 端点流式传输会话。流式接口端点用于维护 VPC 内的流式传输流量。流式传输流量包括像素、USB、用户输入、音频、剪贴板、文件上传和下载以及打印机流量。要使用 VPC 终端节点,必须在 WorkSpaces 应用程序堆栈中启用 VPC 终端节点设置。相比从互联网访问能力有限的地点通过公共互联网流式传输用户会话,这可以作为一种替代方案,并且它可以通过 Direct Connect 实例进行访问。通过 VPC 端点流式传输用户会话需要满足以下条件:
-
与接口端点关联的安全组必须允许从用户连接的 IP 地址范围对端口
443(TCP) 和端口1400–1499(TCP) 进行入站访问。 -
子网的网络访问控制列表必须允许从短暂网络端口
1024-65535(TCP) 到用户连接的 IP 地址范围的出站流量。 -
需要互联网连接才能对用户进行身份验证并交付 WorkSpaces 应用程序运行所需的 Web 资产。
要详细了解如何使用 WorkSpaces 应用程序限制 AWS 服务流量,请参阅有关从 VPC 终端节点创建和流式传输的管理指南。
当需要完全的公共互联网访问时,最好在映像生成器上禁用 Internet Explorer 增强安全配置 (ESC)。有关更多信息,请参阅禁用 Internet Explorer 增强安全配置的 WorkSpaces 应用程序管理指南。
在您的实例上配置实例元数据服务 (IMDS)
本主题介绍实例元数据服务(IMDS)。
实例元数据是有关 Amazon Elastic Compute Cloud (Amazon EC2) 实例的数据,可供应用程序用来配置或管理正在运行的实例。实例元数据服务(IMDS)是实例上的组件,在实例上进行编码,用于安全访问实例元数据。有关更多信息,请参阅《Amazon EC2 用户指南》中的实例元数据和用户数据。
代码可以使用以下两种方法之一从正在运行的实例访问实例元数据:实例元数据服务版本 1 (IMDSv1) 或实例元数据服务版本 2 (IMDSv2)。 IMDSv2 使用面向会话的请求并缓解了几种可用于尝试访问 IMDS 的漏洞。有关这两种方法的信息,请参阅《Amazon EC2 用户指南》中的配置实例元数据服务。
为 IMDS 提供的资源支持
Always-On、按需、单会话和多会话队列以及所有映像生成器在运行 WorkSpaces 应用程序映像 IMDSv2 时,均 IMDSv1 支持 2024 年 1 月 16 日或之后发布的代理版本或托管映像更新。
Elastic Fleets 和 AppBlock Builders 实例也同时支持 IMDSv1 和。 IMDSv2
IMDS 属性设置示例
以下是选择IMDS方法的两个示例:
Java v2 开发工具包示例
以下示例 IMDSv1 使用disableIMDSV1属性禁用请求
CreateFleetRequest request = CreateFleetRequest.builder() .name("TestFleet") .imageArn("arn:aws:appstream:us-east-1::image/TestImage") .instanceType("stream.standard.large") .fleetType(FleetType.ALWAYS_ON) .computeCapacity(ComputeCapacity.builder() .desiredInstances(5) .build()) .description("Test fleet description") .displayName("Test Fleet Display Name") .enableDefaultInternetAccess(true) .maxUserDurationInSeconds(3600) .disconnectTimeoutInSeconds(900) .idleDisconnectTimeoutInSeconds(600) .iamRoleArn("arn:aws:iam::123456789012:role/TestRole") .streamView(StreamView.APP) .platform(PlatformType.WINDOWS) .maxConcurrentSessions(10) .maxSessionsPerInstance(2) .tags(tags) .disableIMDSV1(true) .build();
将禁用设置为 true IMDSV1 以禁用 IMDSv1 和强制执行 IMDSv2。
将禁用设置IMDSV1为 false 可同时启用 IMDSv1 和 IMDSv2。
CLI 示例
以下示例 IMDSv1 使用--disable-imdsv1属性禁用请求
aws appstream create-fleet --name test-fleet --image-arn "arn:aws:appstream:us-east-1::image/test-image" --disable-imdsv1 --instance-type stream.standard.small --compute-capacity DesiredInstances=2 --max-user-duration-in-seconds 57600 --disconnect-timeout-in-seconds 57600 --region us-east-1
设置--disable-imdsv1为 true 可禁用 IMDSv1 和强制执行 IMDSv2。
设置--no-disable-imdsv1为 false 可同时启用 IMDSv1 和 IMDSv2。