View a markdown version of this page

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

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

安全性

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

IAM 角色

AWS Identity and Access Management (IAM) 角色允许客户向 AWS 云上的服务和用户分配精细的访问策略和权限。此解决方案创建 IAM 角色,这些角色向解决方案的 AWS Lambda 函数授予创建区域资源的访问权限。

亚马逊 CloudFront

此解决方案部署了托管在 Amazon S3 存储桶中的网页用户界面,该存储桶由亚马逊 CloudFront分发。为了帮助减少延迟和提高安全性,该解决方案包括一个具有原始访问身份的 CloudFront 分发,即提供对解决方案网站存储桶内容的公开访问权限的 CloudFront 用户。默认情况下,该 CloudFront 发行版使用 TLS 1.2 来强制执行最高级别的安全协议。有关更多信息,请参阅《亚马逊 CloudFront 开发者指南》中的限制对 Amazon 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 Gateway 终端节点而不是自定义域为负载测试功能提供 RESTful API。对于使用默认终端节点的边缘优化 API,API Gateway 使用 TLS-1-0 安全策略。有关更多信息,请参阅 Amazon API Gateway 开发者指南中的使用 RES T API

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

AWS Fargate 安全组

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

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

Amazon VPC

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

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

VPC 要求

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

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

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

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

  • VPC 必须提供对 ECR、 CloudWatch 日志、S3 和物联网核心端点的访问权限。

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

注意

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

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

  • 连接到 VPC 的互联网网关

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

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

选项 1:NAT 网关

  • 在每个带有私有子网的可用区中部署 NAT 网关

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

选项 2:VPC 终端节点

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

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

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

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

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

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

其他 VPC 配置也可能起作用。

重要

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

安全组配置

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

  • 所有出站流量

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

网络压力测试

根据 Amazon EC2 测试政策,您有责任使用此解决方案。该政策涵盖从 Amazon EC2 实例向其他 Amazon EC2 实例、AWS 服务或外部终端节点运行的大容量网络测试。这些测试有时被称为压力测试、负载测试或比赛日测试。查看该政策,了解网络压力测试和 DDoS 模拟(EC2 禁止使用,D DoS 模拟测试政策单独涵盖这些模拟)之间的区别,并注意 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 服务器集成,则该解决方案将使用 Amazon Bedrock AgentCore Gateway 为 AI 代理提供对负载测试数据的安全访问。 AgentCore Gateway 会验证每个请求的 Amazon Cognito 身份验证令牌,确保只有经过授权的用户才能访问 MCP 服务器。MCP 服务器 Lambda 函数实现只读访问模式,从而防止 AI 代理修改测试配置或结果。所有 MCP 服务器交互都使用与 Web 控制台相同的权限边界和访问控制。

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 Certifice Manager 用户指南中的托管证书续订

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

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

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

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

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

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

Third-party 测试框架

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

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

Apache JMeter

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

注意

对于单个 HTTP 端点测试类型,Apache JMeter 也在幕后运行。在 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 的整个过程中根据您的安全要求对其进行评估。