View a markdown version of this page

安全性 - AWS 上的分布式负载测试

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

安全性

当您在 AWS 基础设施上构建系统时,AWS 和您如何共同分担安全责任。此责任共担模式能够减轻您的运营负担,因为 AWS 负责运行、管理和控制各种组件,包括主机操作系统、虚拟化层和服务运行所在设施的物理安全性。有关 AWS 安全性的更多信息,请访问 AWS 云安全性。

IAM 角色

AWS 身份和访问管理 (IAM) 角色允许客户为 AWS 云上的服务和用户分配精细的访问策略和权限。该解决方案创建 IAM 角色,授予该解决方案的 AWS Lambda 函数创建区域资源的访问权限。

亚马逊 CloudFront

该解决方案部署了托管在 Amazon S3 存储桶中的网络用户界面,该存储桶由亚马逊 CloudFront分发。为了帮助减少延迟和提高安全性,该解决方案包括一个带有原始访问身份的 CloudFront 分发,该 CloudFront 用户提供对解决方案网站的存储桶内容的公开访问权限。默认情况下,该 CloudFront 发行版支持最高 TLS 1.3 的连接,使用查看器支持的最高协议版本。有关更多信息,请参阅《亚马逊 CloudFront 开发者指南》中的限制对 Amaz on S3 源的访问。

CloudFront 激活其他安全缓解措施,将 HTTP 安全标头附加到每个查看者的响应中。有关更多信息,请参阅在 CloudFront 响应中添加或删除 HTTP 标头。

此解决方案使用默认 CloudFront 证书,其支持的最低安全协议为 TLS v1.0。要强制使用 TLS v1.2 或 TLS v1.3,必须使用自定义 SSL 证书而不是默认 CloudFront 证书。有关更多信息,请参阅如何配置我的 CloudFront 发行版以使用 SSL/TLS 证书。

Amazon API Gateway

该解决方案部署边缘优化的 Amazon API Gateway 终端节点,使用默认 API 网关终端节点而不是自定义域为负载测试功能提供 RESTful API。对于使用默认端点进行边缘优化 API,API 网关使用 TLS-1-0 安全策略。有关更多信息,请参阅亚马逊 API 网关开发者指南中的使用 REST API。

此解决方案使用默认 API 网关证书,该证书支持的最低安全协议为 TLS v1.0。要强制使用 TLS v1.2 或 TLS v1.3,必须使用带有自定义 SSL 证书的自定义域,而不是默认的 API 网关证书。有关更多信息,请参阅为 REST API 设置自定义域名。

AWS Fargate 安全组

默认情况下,此解决方案向公众开放 AWS Fargate 安全组的出站规则。如果您想阻止 AWS Fargate 向任何地方发送流量,请将出站规则更改为特定的无类 Inter-Domain 路由 (CIDR)。

该安全组还包括一条入站规则,该规则允许端口 50,000 上的本地流量流向属于同一安全组的任何来源。这用于允许容器相互通信。

Amazon VPC

VPC:基于亚马逊 VPC 服务的虚拟私有云 (VPC) 为您在 AWS 云中提供逻辑隔离的私有网络。

部署期间,您可以在 AWS CloudFormation 参数中指定自己的 VPC。该 VPC 仅供产生负载的 ECS 任务使用;Web 控制台和 API 未部署在此 VPC 中。如果您未指定现有 VPC,则该解决方案会使用所需的网络配置创建一个新的 VPC。如果您选择使用现有 VPC,则它必须满足以下要求才能成功运行负载测试任务。

VPC 要求

下面列出了在 AWS 上进行分布式负载测试的 VPC 的最低要求。

  • VPC 必须包含至少两个可用区

  • VPC 必须包含至少两个子网,每个子网位于单独的可用区中

  • VPC 子网可以是公有的,也可以是私有的,但它们必须使用相同的配置(都是公共的或都是私有的)

  • VPC 必须提供对 ECR、 CloudWatch 日志、S3 和 AWS IoT Core 终端节点的访问权限。

  • VPC 必须提供对负载测试目标服务的访问权限。

注意

如果您没有符合这些条件的 VPC,则可以使用 VPC 向导快速创建 VPC。有关更多信息,请参阅创建 VPC。

公共子网可以通过包括以下内容来满足这些要求:

  • 连接到 VPC 的互联网网关

  • 通往互联网网关的路由 (0.0.0.0/0)

私有子网可以通过使用 NAT 网关或 VPC 终端节点来满足这些要求,如下所述。

选项 1:NAT 网关

  • 在每个带有私有子网的 AZ 中部署 NAT 网关

  • 配置路由表以路由互联网流量 (0.0.0.0/0) 通过 NAT 网关

选项 2:VPC 终端节点

在您的 VPC 中创建以下 VPC 终端节点:

  • 亚马逊 ECR API 终端节点:com.amazonaws.<region>.ecr.api

  • 亚马逊 ECR DKR 终端节点:com.amazonaws.<region>.ecr.dkr

  • 亚马逊 CloudWatch 日志终端节点:com.amazonaws.<region>.logs

  • 亚马逊 S3 网关终端节点:com.amazonaws.<region>.s3

  • AWS IoT Core 终端节点(如果使用实时数据图表,则为必填项)com.amazonaws.<region>.iot.data

其他 VPC 配置也可能有效。

重要

连接到每个 VPC 终端节点接口的安全组必须允许端口 443 上来自 ECS 任务安全组的入站 TCP 流量。

安全组配置

在部署期间,该解决方案将在您的 VPC 内创建一个安全组,以允许 ECS 集群中的任务传输以下流量:

  • 所有出站流量

  • 端口 50000 上来自同一安全组中其他任务的入站流量,以促进工作人员和领导任务之间的协调。

网络压力测试

您有责任根据亚马逊 EC2 测试政策使用此解决方案。该政策涵盖从亚马逊 EC2 实例到其他 Amazon EC2 实例、AWS 服务或外部终端节点运行的大容量网络测试。这些测试有时被称为压力测试、负载测试或游戏日测试。查看该政策,了解网络压力测试和 DDoS 模拟(在 EC2 上禁止,由 DDoS 模拟测试政策另行规定)之间的区别,并请注意,AWS 可能会在高流量下采用流量工程或整形。在运行大批量测试之前,请参阅策略页面以了解当前阈值和指南。

限制访问公共用户界面

限制访问 Web 控制台的方法取决于您选择的部署选项。

默认 (CloudFront + S3) 部署 — 要限制对 IAM 和 Amazon Cognito 提供的身份验证和授权机制之外的面向公众的用户界面的访问,您可以将 AWS WAF Web ACL 与分配关联起来。 CloudFront 考虑使用 AWS WAF 安全自动化解决方案,该解决方案部署了一组预先配置的 AWS WAF 规则,用于过滤常见的 Web 攻击。默认 CloudFront + S3 模板不会自动部署 WAF 资源。

ALB + ECS Fargate 部署 — 该解决方案使用托管规则自动在 ALB 前面部署 AWS WAF Web ACL,为抵御常见的基于 Web 的攻击提供基本保护。您可以自定义 WAF 规则以满足您的特定安全要求,包括添加 IP-based 允许或阻止列表、地理限制、速率限制或其他 AWS 托管规则组。有关修改 WAF 配置的说明,请参阅部署说明中的 WAF 集成部分。

MCP 服务器安全(可选)

如果您部署可选的 MCP 服务器集成,则该解决方案使用亚马逊 Bedrock AgentCore Gateway 为 AI 代理提供对负载测试数据的安全访问。 AgentCore Gateway 会验证每个请求的 Amazon Cognito 身份验证令牌,因此只有获得授权的用户才能访问 MCP 服务器。所有 MCP 服务器交互都使用与 Web 控制台相同的权限边界和访问控制。

MCP 服务器访问模式参数控制 AI 代理可以执行的操作。在默认ReadOnly模式下,MCP 服务器仅公开读取工具。MCP 服务器 Lambda 函数上的 AWS 身份和访问管理 (IAM) 策略仅允许向解决方案的 API GET 发出请求,因此代理无法修改测试配置或结果。在ReadWrite模式下,代理还可以创建、修改、删除和启动测试场景。ReadWrite仅当您的用例要求代理更改测试时才选择。

凭证轮换 — 如果您使用基于服务(机器对机器)的身份验证连接 MCP 客户端,则该解决方案会使用长期的客户端密钥创建一个 Amazon Cognito 应用程序客户端。您有责任轮换该机密并将其安全存储。我们建议至少每 90 天轮换一次。有关步骤,请参阅 “使用解决方案” 中的 “轮换 MCP 服务器客户端密钥”。

ALB + ECS Fargate 托管的 Web 控制台安全(可选)

如果您选择 ALB + ECS Fargate 部署选项,则以下安全注意事项适用:

  • VPC 区块公有访问兼容性 — ALB + ECS Fargate 选项专为 VPC 区块公有访问 (BPA) 策略阻止来自公共分配的流量的环境而设计。 CloudFront ALB 可以在您的 VPC 中作为内部负载均衡器部署,只能通过您的公司网络、VPN 或 AWS 进行访问 PrivateLink,满足零公共互联网暴露要求。

  • ACM 证书管理 — ALB 使用 ACM 证书来终止 HTTPS。您有责任确保证书仍然有效并在到期前续订。ACM 会自动续订其管理的证书,但导入的证书必须手动续订。有关更多信息,请参阅 AWS 证书管理器用户指南中的托管证书续订。

  • AWS WAF 保护 — 默认情况下,WAF 使用 ALB + ECS Fargate 模板部署。有关详细信息,请参阅限制访问公共用户界面。

无头(自带 Web 服务器)安全(可选)

如果您选择无头部署选项并在自己的 Web 服务器上托管 Web 控制台,则需要考虑以下安全问题:

  • HTTPS 配置 — 我们强烈建议在您的 Web 服务器上配置 HTTPS。

  • 访问控制 — 您负责在 Web 服务器上实施访问控制、防火墙规则和网络安全。

  • 安全强化 — 将组织的安全强化标准应用于 Web 服务器,包括修补、监控和入侵检测。

Third-party 测试框架

AWS 上的分布式负载测试捆绑了三个第三方测试框架:Apache JMeter、Grafana k6 和 Locust。在 AWS 共担责任模式下,您有责任在运行负载测试之前评估这些框架及其捆绑版本是否符合组织的安全要求。该解决方案无需修改即可分发每个框架,并在构建时和运行时使用 SHA512 校验和验证捆绑的二进制文件。

有关何时安装每个框架及其配置方式的详细信息,请参阅测试框架配置。

Apache JMeter

Apache JMeter 的捆绑版本存在已知的安全漏洞,如果不破坏与 Taurus 测试自动化框架和该解决方案所依赖的 JMeter 插件生态系统的兼容性,则无法在外部对这些漏洞进行全面修补。在运行负载测试之前,请查看 Apache JMeter 安全公告,并评估它们是否可能为您带来安全漏洞。

注意

Apache JMeter 还针对简单 HTTP 端点测试类型在后台运行。当您在 Web 控制台中配置 URL、方法、标头和正文负载时,该解决方案会生成 JMeter 测试计划并使用捆绑的 JMeter 二进制文件执行该计划。因此,本节中描述的 JMeter 安全注意事项也适用于简单 HTTP 端点测试。

如果你需要补丁版本的 JMeter,你有两个选择。这两个选项都需要测试存档,并且仅适用于 JMeter 测试类型:

  • 提供打补丁的 JMeter 二进制文件 — 在测试存档中加入已修补的 JMeter 二进制文件。该解决方案使用您的二进制文件代替捆绑版本。

  • 覆盖单个插件 JAR — 使用插件覆盖机制将特定的易受攻击的插件 JAR 替换为已修补的版本。有关更多信息,请参阅 JMeter 测试。

简单 HTTP 端点测试类型不接受测试存档,因此无法覆盖捆绑的 JMeter 二进制文件或插件。如果你需要使用打补丁的 JMeter 运行 HTTP 端点测试,请使用 JMeter 测试类型并提供 JMeter 脚本 (.jmx) 或包含已修补的 JMeter 二进制文件或插件 JAR 的 .zip 存档。

Grafana k6

k6 是根据AGPL-3.0 许可发布的。当您创建新的 k6 测试时,Web 控制台会显示许可证确认消息。在本解决方案发布时,在 k6 的捆绑版本中未发现任何已知的安全漏洞。该解决方案不会持续监控 k6 中是否存在新漏洞;您有责任在使用 k6 的整个过程中根据您的安全要求对其进行评估。

蝗虫

在本解决方案发布时,在 Locust 的捆绑版本中未发现任何已知的安全漏洞。该解决方案不会持续监控 Locust 是否存在新漏洞;您有责任在使用 Locust 的整个过程中根据您的安全要求对其进行评估。