View a markdown version of this page

セキュリティ - AWS での分散負荷テストソリューション

セキュリティ

AWS インフラストラクチャでシステムを構築すると、お客様と AWS の間でセキュリティ上の責任が分担されます。この責任共有モデルにより、ホストオペレーティングシステムと仮想化レイヤーからサービスが運用されている施設の物理的なセキュリティに至るまでのコンポーネントを AWS が運用、管理、制御するため、お客様の運用上の負担を軽減するのに役立ちます。AWS セキュリティの詳細については、「AWS クラウドセキュリティ」を参照してください。

IAM ロール

AWS Identity and Access Management (IAM) ロールにより、AWS クラウドのサービスとユーザーに対してアクセスポリシーとアクセス許可を詳細に割り当てることができます。このソリューションでは、リージョン別のリソースを作成するために、ソリューションの AWS Lambda 関数にアクセス権を付与する IAM ロールを作成します。

Amazon CloudFront

このソリューションは、Amazon S3 バケットでホストされ、Amazon CloudFront で配布されるウェブ UI をデプロイします。レイテンシーを軽減し、セキュリティを向上させるために、このソリューションには、オリジンアクセスアイデンティティを持つ CloudFront ディストリビューションが含まれています。オリジンアクセスアイデンティティは、ソリューションのウェブサイトのバケットにあるコンテンツに、パブリックアクセスを提供する CloudFront ユーザーです。デフォルトでは、CloudFront ディストリビューションは TLS 1.2 を使用して最高レベルのセキュリティプロトコルを適用します。詳細については、「Amazon CloudFront デベロッパーガイド」の「Amazon S3 オリジンへのアクセスの制限」を参照してください。

CloudFront は追加のセキュリティ対策を有効にして、各ビューワーのレスポンスに HTTP セキュリティヘッダーを追加します。詳細については、「CloudFront レスポンスの HTTP ヘッダーを追加または削除する」を参照してください。

このソリューションでは、デフォルトの CloudFront 証明書を使用します。サポートされる最小のセキュリティプロトコルは TLS v1.0 です。TLS v1.2 または TLS v1.3 の使用を必ず適用するには、デフォルトの CloudFront 証明書の代わりにカスタム SSL 証明書を使用する必要があります。詳細については、「SSL/TLS 証明書を使用するように CloudFront ディストリビューションを設定する方法を教えてください」を参照してください。

Amazon API Gateway

このソリューションは、エッジ最適化 Amazon API Gateway エンドポイントをデプロイして、カスタムドメインではなくデフォルトの API ゲートウェイエンドポイントを使用して負荷テストの機能用の RESTful API を提供します。デフォルトのエンドポイントを使用するエッジ最適化 API については、API ゲートウェイは TLS-1-0 セキュリティポリシーを使用します。詳細については、「Amazon API Gateway デベロッパーガイド」の「REST API の操作」を参照してください。

このソリューションでは、デフォルトの API ゲートウェイの証明書を使用します。サポートされる最小のセキュリティプロトコルは TLS v1.0 です。TLS v1.2 または TLS v1.3 の使用を必ず適用するには、デフォルトの API ゲートウェイの証明書の代わりに SSL 証明書のあるカスタムドメインを使用する必要があります。詳細については、「REST API のカスタムドメイン名を設定する」を参照してください。

AWS Fargate セキュリティグループ

デフォルトで、このソリューションは、AWS Fargate セキュリティグループのアウトバウンドルールを公開します。AWS Fargate がどこにでもトラフィックを送信しないようにするには、アウトバウンドルールを特定の Classless Inter-Domain Routing (CIDR) に変更します。

このセキュリティグループには、同じセキュリティグループに属する任意の送信元へのポート 50,000 のローカルトラフィックを許可するインバウンドルールも含まれています。これは、コンテナが互いに通信できるようにするために使用されます。

Amazon VPC

VPC: Amazon VPC サービスに基づく仮想プライベートクラウド (VPC) は、AWS クラウド内の論理的に隔離されたプライベートネットワークを提供します。

デプロイ中に AWS CloudFormation パラメータで独自の VPC を指定できます。VPC は負荷を生成する ECS タスクでのみ使用されます。ウェブコンソールと API はこの VPC 内にデプロイされません。既存の VPC を指定しない場合、ソリューションは必要なネットワーク設定で新しい VPC を作成します。既存の VPC を使用する場合は、負荷テストタスクを正常に実行するために、次の要件を満たしている必要があります。

VPC の要件

AWS での分散負荷テストで使用する VPC の最小要件を以下に示します。

  • VPC には少なくとも 2 つの AZ が含まれている必要があります

  • VPC には、それぞれ個別の AZ に少なくとも 2 つのサブネットが含まれている必要があります

  • VPC サブネットはパブリックでもプライベートでもかまいませんが、同じ設定 (両方ともパブリック、または両方ともプライベート) を使用する必要があります

  • VPC は、ECR、CloudWatch Logs、S3、および IoT Core のエンドポイントへのアクセスを提供する必要があります。

  • VPC は、負荷テストの対象となるサービス (複数可) へのアクセスを提供する必要があります。

注記

これらの基準を満たす VPC がない場合は、VPC ウィザードを使用して VPC をすばやく作成できます。詳細については、「Create a VPC (VPC を作成する)」を参照してください。

パブリックサブネットは、以下を含めることでこれらの要件を満たすことができます。

  • VPC にアタッチされたインターネットゲートウェイ

  • インターネットゲートウェイへのルート (0.0.0.0/0)

プライベートサブネットは、以下に説明するように、NAT ゲートウェイまたは VPC エンドポイントを使用してこれらの要件を満たすことができます。

オプション 1: NAT ゲートウェイ

  • プライベートサブネットを持つ各 AZ に NAT ゲートウェイをデプロイする

  • インターネット行きのトラフィック (0.0.0.0/0) を NAT ゲートウェイ経由でルーティングするようにルートテーブルを設定する

オプション 2: VPC エンドポイント

VPC に次の VPC エンドポイントを作成します。

  • Amazon ECR API エンドポイント: com.amazonaws.<region>.ecr.api

  • Amazon ECR DKR エンドポイント: com.amazonaws.<region>.ecr.dkr

  • Amazon CloudWatch Logs エンドポイント: com.amazonaws.<region>.logs

  • Amazon 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 では禁止されており、DDoS シミュレーションテストポリシーで個別にカバーされています) の区別を理解し、AWS はトラフィック量が多い場合にトラフィックエンジニアリングまたはシェーピングを採用する可能性があることに注意してください。大量のテストを実行する前に、現在のしきい値とガイダンスについて、ポリシーページを確認してください。

パブリックユーザーインターフェイスへのアクセス制限

ウェブコンソールへのアクセスを制限する方法は、選択したデプロイオプションによって異なります。

デフォルトの (CloudFront + S3) デプロイ - IAM および Amazon Cognito が提供する認証および認可メカニズムを超えてパブリックユーザーインターフェイスへのアクセスを制限するには、AWS WAF ウェブ ACL を CloudFront ディストリビューションに関連付けることができます。一般的なウェブベースの攻撃をフィルタリングする、一連の事前設定された AWS WAF ルールをデプロイする AWS WAF Security Automations ソリューションの使用を検討してください。デフォルトの CloudFront + S3 テンプレートでは、WAF リソースは自動的にデプロイされません。

ALB + ECS Fargate のデプロイ - このソリューションは、一般的なウェブベースの攻撃に対するベースライン保護を提供するマネージドルールを備えた AWS WAF ウェブ ACL を ALB の前に自動的にデプロイします。IP ベースの許可リストまたはブロックリストの追加、地理的制限、レート制限、AWS マネージドルールグループの追加など、特定のセキュリティ要件を満たすように WAF ルールをカスタマイズできます。WAF 設定を変更する手順については、デプロイ手順の「WAF 統合」セクションを参照してください。

MCP サーバーのセキュリティ (オプション)

オプションの MCP サーバー統合をデプロイする場合、ソリューションは Amazon Bedrock AgentCore Gateway を使用して AI エージェントの負荷テストデータへの安全なアクセスを提供します。AgentCore Gateway は、リクエストごとに Amazon Cognito 認証トークンを検証し、認可されたユーザーのみが MCP サーバーにアクセスできることを確認します。MCP サーバー Lambda 関数は読み取り専用アクセスパターンを実装し、AI エージェントがテスト設定や結果を変更できないようにします。すべての MCP サーバーインタラクションは、ウェブコンソールと同じアクセス許可の境界とアクセスコントロールを使用します。

ALB + ECS Fargate がホストするウェブコンソールのセキュリティ (オプション)

ALB + ECS Fargate デプロイオプションを選択した場合、次のセキュリティ上の考慮事項が適用されます。

  • VPC ブロックパブリックアクセスの互換性 - ALB + ECS Fargate オプションは、VPC ブロックパブリックアクセス (BPA) ポリシーがパブリック CloudFront ディストリビューションからのトラフィックをブロックする環境向けに設計されています。ALB は、VPC 内の内部ロードバランサーとしてデプロイでき、企業ネットワーク、VPN、または AWS PrivateLink を介してのみアクセスでき、パブリックインターネットへの露出ゼロの要件を満たします。

  • ACM 証明書管理 - ALB は HTTPS 終了に ACM 証明書を使用します。証明書が有効であり、有効期限が切れる前に更新されていることを確認するのはお客様の責任です。ACM は管理する証明書を自動的に更新しますが、インポートされた証明書は手動で更新する必要があります。詳細については、AWS Certificate Manager ユーザーガイドの「マネージド証明書の更新」を参照してください。

  • AWS WAF 保護 - WAF はデフォルトで ALB + ECS Fargate テンプレートを使用してデプロイされます。詳細については、「パブリックユーザーインターフェイスへのアクセス制限」を参照してください。

ヘッドレス (独自のウェブサーバーを使用) セキュリティ (オプション)

ヘッドレスデプロイオプションを選択し、独自のウェブサーバーでウェブコンソールをホストする場合は、以下のセキュリティ上の考慮事項について責任を負うことになります。

  • HTTPS 設定 - ウェブサーバーで HTTPS を設定することを強くお勧めします。

  • アクセスコントロール - アクセスコントロール、ファイアウォールルール、ネットワークセキュリティをウェブサーバーに実装するのはお客様の責任です。

  • セキュリティ強化 - パッチ適用、モニタリング、侵入検出など、組織のセキュリティ強化標準をウェブサーバーに適用します。

サードパーティーのテストフレームワーク

AWS での分散負荷テストには、Apache JMeter、Grafana K6、Locust の 3 つのサードパーティーテストフレームワークがバンドルされています。AWS 責任共有モデルでは、負荷テストを実行する前に、これらのフレームワークとそのバンドルされたバージョンが組織のセキュリティ要件を満たしているかどうかを評価する責任は、お客様にあります。このソリューションは、各フレームワークを変更せずに分散し、ビルド時と実行時に SHA512 チェックサムを使用してバンドルされたバイナリを検証します。

各フレームワークのインストール時期とプロビジョニング方法の詳細については、「テストフレームワークのプロビジョニング」を参照してください。

Apache JMeter

Apache JMeter のバンドルバージョンには既知のセキュリティ脆弱性があり、Taurus テスト自動化フレームワークおよびソリューションが依存する JMeter プラグインエコシステムとの互換性を損なうことなく、外部から完全にパッチを適用することは不可能です。負荷テストを実行する前に、Apache JMeter セキュリティアドバイザリを確認し、セキュリティの脆弱性を引き起こす可能性があるかどうかを評価してください。

注記

Apache JMeter は、単一の HTTP エンドポイントテストタイプの内部でも実行されます。ウェブコンソールで URL、メソッド、ヘッダー、本文ペイロードを設定すると、ソリューションは JMeter テストプランを生成し、バンドルされた JMeter バイナリを使用してそれを実行します。したがって、このセクションで説明する JMeter のセキュリティ上の考慮事項は、単一の HTTP エンドポイントテストにも適用されます。

パッチが適用されたバージョンの JMeter が必要な場合は、2 つのオプションがあります。どちらのオプションにもテストアーカイブが必要で、JMeter テストタイプでのみ使用できます。

  • パッチが適用された JMeter バイナリを指定する - パッチが適用された JMeter バイナリをテストアーカイブに含めます。このソリューションは、バンドルされたバージョンの代わりにバイナリを使用します。

  • 個々のプラグイン JAR を上書きする - プラグイン上書きメカニズムを使用して、特定の脆弱性のあるプラグイン JAR をパッチ適用されたバージョンに置き換えます。詳細については、「JMeter テスト」を参照してください。

単一の HTTP エンドポイントのテストタイプはテストアーカイブを受け付けないため、バンドルされた JMeter バイナリまたはプラグインを上書きすることはできません。パッチが適用された JMeter で HTTP エンドポイントテストを実行する必要がある場合は、JMeter テストタイプを使用して、パッチが適用された JMeter バイナリまたはプラグイン JAR を含む JMeter スクリプト (.jmx) または .zip アーカイブを指定します。

Grafana K6

K6 は AGPL-3.0 ライセンスの下にリリースされています。ウェブコンソールでは、新しい K6 テストを作成するときに、ライセンス確認メッセージが表示されます。このソリューションのリリース時点では、K6 のバンドルバージョンには既知のセキュリティ脆弱性は確認されていません。このソリューションは K6 の新しい脆弱性を継続的にモニタリングしません。K6 の使用期間を通じて、セキュリティ要件に照らして評価するのはお客様の責任です。

Locust

このソリューションのリリース時点では、Locust のバンドルバージョンには既知のセキュリティ脆弱性は確認されていません。このソリューションは Locust の新しい脆弱性を継続的にモニタリングしません。Locust の使用期間を通じて、セキュリティ要件に照らして評価するのはお客様の責任です。