

# アーキテクチャの詳細
<a name="architecture-details"></a>

このセクションでは、このソリューションを構成するコンポーネントと AWS のサービス、およびこれらのコンポーネントがどのように連携するのかについてのアーキテクチャの詳細について説明します。

## このソリューションで使用している AWS のサービス
<a name="aws-services-in-this-solution"></a>


| AWS のサービス | 説明 | 
| --- | --- | 
|   [AWS WAF](https://aws.amazon.com/waf/)   |   **コア**。AWS WAF ウェブ ACL、AWS マネージドルールのルールグループ、カスタムルール、および IP セットをデプロイします。AWS WAF API コールを行って、一般的な攻撃をブロックし、ウェブアプリケーションを保護します。  | 
|   [Amazon Data Firehose](https://aws.amazon.com/kinesis/data-firehose/)   |   **コア**。Amazon S3 バケットに AWS WAF ログを配信します。  | 
|   [Amazon S3](https://aws.amazon.com/s3/)   |   **コア**。AWS WAF ログ、CloudFront ログ、ALB ログを保存します。  | 
|   [\$1 AWS Lambda](https://aws.amazon.com/lambda/)\$1   |   **コア**。カスタムルールをサポートするために複数の Lambda 関数をデプロイします。  | 
|   [Amazon EventBridge](https://aws.amazon.com/eventbridge/) ()   |   **コア**。Lambda を呼び出すイベントルールを作成します。  | 
|   [ Amazon Athena](https://aws.amazon.com/athena/)   |   **サポート**。Athena ログパーサーをサポートする Athena クエリとワークグループを作成します。  | 
|   [AWS Glue](https://aws.amazon.com/glue/)   |   **サポート**。Athena ログパーサーをサポートするデータベースとテーブルを作成します。  | 
|   [ Amazon SNS](https://aws.amazon.com/sns/)   |   **サポート**。Amazon Simple Notiﬁcation Service (Amazon SNS) の E メール通知を送信して、許可リストと拒否リストの IP 保持をサポートします。  | 
|   [AWS Systems Manager](https://aws.amazon.com/systems-manager/)   |   **サポート**。アプリケーションレベルのリソースの監視と、リソースの操作とコストデータの可視化を提供します。  | 

# ログパーサーオプション
<a name="log-parser-options"></a>

「[アーキテクチャの概要](architecture-overview.md)」で説明した通り、HTTP フラッドとスキャナーとプローブの保護を処理するには 3 つのオプションがあります。以下のセクションでは、これらの各オプションについて詳しく説明します。

## AWS WAF レートベースのルール
<a name="aws-waf-rate-based-rule"></a>

レートベースのルールは、HTTP フラッド保護に使用できます。デフォルトでは、レートベースのルールはリクエスト IP アドレスに基づき、リクエストを集約してレート制限します。このソリューションを使用すると、クライアント IP が連続的に更新される 5 分の間に許可するウェブリクエストの数を指定できます。IP アドレスが設定されたクォータに違反した場合、AWS WAF は、リクエストレートが設定されたクォータを下回るまで、ブロックされた新しいリクエストをブロックします。

リクエストクォータが 5 分あたり 2,000 リクエストを超え、カスタマイズを実装する必要がない場合は、レートベースのルールオプションを選択することをおすすめします。例えば、リクエストのカウント時に静的リソースアクセスを考慮しません。

さらに、他のさまざまな集約キーやキーの組み合わせを使用するようにルールを設定できます。詳細については、「[集約オプションとキー](https://docs.aws.amazon.com/waf/latest/developerguide/waf-rule-statement-type-rate-based-aggregation-options.html)」を参照してください。

## Amazon Athena ログパーサー
<a name="amazon-athena-log-parser"></a>

**HTTP Flood Protection** と **Scanner & Probe** **Protection** の両方のテンプレートパラメータには、Athena ログパーサーオプションが用意されています。アクティブにすると、CloudFormation は Athena を実行し、結果出力を処理し、AWS WAF を更新するオーケストレーションを担当する Athena クエリとスケジュールされた Lambda 関数をプロビジョニングします。この Lambda 関数は、5 分ごとに実行されるように設定された CloudWatch イベントによって呼び出されます。これは、**Athena Query Run Time Schedule** パラメータで設定できます。

AWS WAF レートベースのルールを使用できず、カスタマイズを実装するために SQL に精通している場合は、このオプションを選択することをお勧めします。デフォルトのクエリを変更する方法については、「[Amazon Athena クエリを表示する](view-amazon-athena-queries.md)」を参照してください。

HTTP フラッド保護は、AWS WAF アクセスログ処理に基づいており、WAF ログファイルを使用します。AWS WAF アクセスログのタイプは遅延時間が短いため、CloudFront や ALB のログ配信時間と比較して、HTTP フラッドのオリジンをより迅速に特定できます。ただし、レスポンスステータスコードを受信するには、**Activate Scanner & Probe Protection** テンプレートパラメータで CloudFront や ALB のログタイプを選択する必要があります。

**注記**  
不正なボットがハニーポットをバイパスして ALB または CloudFront と直接やり取りする場合、システムはログ分析を通じて悪意のある動作を検出します (ただし、HTTP フラッド保護およびスキャナーとプローブ保護の両方が Lambda ログパーサーを使用していない場合を除きます)。

## AWS Lambda ログパーサー
<a name="aws-lambda-log-parser"></a>

**HTTP Flood Protection** と **Scanner & Probe Protection** のテンプレートパラメータには、**AWS Lambda ログパーサー**オプションが用意されています。Lambda ログパーサーは、**AWS WAF レートベースのルール**および **Amazon Athena ログパーサー**オプションが利用できない場合にのみ使用します。このオプションの既知の制限は、処理中のファイルのコンテキスト内で情報が処理されることです。例えば、あるIPでは、定義されたクォータよりも多くのリクエストやエラーが生成される場合がありますが、この情報は複数のファイルに分割されているため、各ファイルにはクォータを超えるほどのデータが保存されません。

**注記**  
さらに、不正なボットがハニーポットをバイパスして ALB または CloudFront と直接やり取りする場合、検出では、選択したログパーサーオプションにより、悪意のあるアクティビティを効果的に特定してブロックします。

# コンポーネントの詳細
<a name="component-details"></a>

[アーキテクチャの図](architecture-overview.md#architecture-diagram)で説明した通り、このソリューションの 4 つのコンポーネントはオートメーションを使用して IP アドレスを検査し、AWS WAF ブロックリストに追加します。次のセクションでは、これらの各コンポーネントについて詳しく説明します。

## ログパーサー – アプリケーション
<a name="log-parser--application"></a>

アプリケーションログパーサーは、スキャナーとプローブから保護するのに役立ちます。

 **アプリケーションログパーサーフロー。**

![\[アプリログパーサーフロー\]](http://docs.aws.amazon.com/ja_jp/solutions/latest/security-automations-for-aws-waf/images/app-log-parser-flow.png)


1. CloudFront または ALB がウェブアプリケーションに代わってリクエストを受信すると、アクセスログを Amazon S3 バケットに送信します。

   1. (オプション) **[Activate HTTP Flood Protection]** と **[Activate Scanner & Probe Protection]** テンプレートパラメータで `Yes - Amazon Athena log parser` を選択すると、Lambda 関数はアクセスログが Amazon S3 に到着した時点で元のフォルダ *<customer-bucket>* `/AWSLogs` から新しくパーティション分割されたフォルダ *<customer-bucket>* `/AWSLogs-partitioned/` *<optional-prefix>* `/year=` *<YYYY>* `/month=` *<MM>* `/day=` *<DD>* `/hour=` *<HH>*/ に移動します。

   1. (オプション) **Keep Data in Original S3 location** テンプレートパラメータで [`yes`] を選択すると、ログは元の場所に残り、パーティション分割されたフォルダにコピーされ、ログストレージが複製されます。
**注記**  
Athena ログパーサーの場合、このソリューションは、このソリューションのデプロイ後に Amazon S3 バケットに到着する新しいログのみをパーティション分割します。パーティション分割したい既存のログがある場合は、このソリューションをデプロイした後、これらのログを手動で Amazon S3 にアップロードする必要があります。

1. **Activate HTTP Flood Protection** と **Activate Scanner & Probe Protection** のテンプレートパラメータでの選択に基づいて、このソリューションは次のいずれかを使用してログを処理します。

   1.  **Lambda** – 新しいアクセスログが Amazon S3 バケットに保存されるたびに、`Log Parser` Lambda 関数が開始されます。

   1.  **Athena** – デフォルトでは、**Scanner & Probe Protection** Athena クエリが 5 分ごとに実行され、出力が AWS WAF にプッシュされます。このプロセスは CloudWatch イベントによって開始されます。このイベントは Athena クエリの実行を担当する Lambda 関数を開始し、その結果を AWS WAF にプッシュします。

1. このソリューションは、ログデータを分析して、定義されたクォータよりも多くのエラーを生成した IP アドレスを特定します。次に、このソリューションは AWS WAF IP セット条件を更新して、お客様が定義した期間、それらの IP アドレスをブロックします。

## ログパーサー – AWS WAF
<a name="log-parser--aws-waf"></a>

**Activate HTTP Flood Protection** で [`yes - AWS Lambda log parser`] または [`yes - Amazon Athena log parser`] を選択すると、このソリューションは次のコンポーネントをプロビジョニングします。これらのコンポーネントは AWS WAF ログを解析して、定義したクォータを超えるリクエストレートでエンドポイントをフラッドするオリジンを識別してブロックします。

 **AWS WAF ログパーサーフロー。**

![\[WAF ログパーサーフロー\]](http://docs.aws.amazon.com/ja_jp/solutions/latest/security-automations-for-aws-waf/images/waf-log-parser-flow.png)


1. AWS WAF はアクセスログを受信すると、ログを Firehose エンドポイントに送信します。その後、Firehose は Amazon S3 内のパーティション分割されたバケット *<customer-bucket>* `/AWSLogs/` *<optional-prefix>* `/year=` *<YYYY>* `/month=` *<MM>* `/day=` *<DD>* `/hour=` *<HH>* `/` にログを配信します。

1. **Activate HTTP Flood Protection** と **Activate Scanner and Probe Protection** のテンプレートパラメータでの選択に基づいて、このソリューションは次のいずれかを使用してログを処理します。

   1.  **Lambda**: 新しいアクセスログが Amazon S3 バケットに保存されるたびに、`Log Parser` Lambda 関数が開始されます。

   1.  **Athena:** デフォルトで、スキャナーとプローブの Athena クエリが 5 分ごとに実行され、その出力が AWS WAF にプッシュされます。このプロセスは、Amazon CloudWatch イベントによって開始され、その後 Amazon Athena クエリの実行を担当する Lambda 関数が開始され、その結果が AWS WAF にプッシュされます。

1. このソリューションは、ログデータを分析して、定義されたクォータよりも多くのリクエストを送信した IP アドレスを特定します。次に、このソリューションは AWS WAF IP セット条件を更新して、お客様が定義した期間、それらの IP アドレスをブロックします。

## ログパーサー - 不正なボット
<a name="log-parser--badbot"></a>

不正なボットのログパーサーは、ハニーポットエンドポイントへのリクエストを検査して、不正なボットの送信元 IP アドレスを抽出します。

 **不正なボットのログパーサーフロー。**

![\[不正なボットのログパーサーフロー\]](http://docs.aws.amazon.com/ja_jp/solutions/latest/security-automations-for-aws-waf/images/badbot-log-parser-flow.png)


1. `Bad Bot Protection` がアクティブ化され、HTTP フラッド保護およびスキャナーとプローブ保護の両機能が無効になっている場合: システムは Log Lambda パーサーを使用し、[WAF ラベルフィルター](https://docs.aws.amazon.com/waf/latest/developerguide/waf-labels.html)に基づいて不正なボットリクエストのみをログに記録します。

1. Lambda 関数は、リクエストヘッダーを傍受して検査し、トラップエンドポイントにアクセスした送信元の IP アドレスを抽出します。

1. このソリューションは、ログデータを分析して、定義されたクォータよりも多くのリクエストを送信した IP アドレスを特定します。次に、このソリューションは AWS WAF IP セット条件を更新して、お客様が定義した期間、それらの IP アドレスをブロックします。

## IP リストパーサー
<a name="ip-lists-parser"></a>

`IP Lists Parser` Lambda 関数は、サードパーティーの IP 評価リストで識別された既知の攻撃者からの保護に役立ちます。

 **IP 評価リストパーサーフロー。**

![\[IP 評価リストフロー\]](http://docs.aws.amazon.com/ja_jp/solutions/latest/security-automations-for-aws-waf/images/ip-reputation-lists-flow.png)


1. 1 時間ごとの Amazon CloudWatch イベントにより `IP Lists Parser` Lambda 関数が起動されます。

1. Lambda 関数は、次の 3 つのソースからデータを収集して解析します。
   + Spamhaus DROP と EDROP リスト
   + Proofpoint Emerging Threats IP リスト
   + Tor exit node リスト

1. Lambda 関数は、AWS WAF ブロックリストを現在の IP アドレスで更新します。