

# ソリューションをデプロイする
<a name="deploy-the-solution"></a>

このソリューションは、[AWS CloudFormation テンプレートとスタック](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-whatis-concepts.html)を使用してデプロイを自動化します。CloudFormation テンプレートは、このソリューションに含まれる AWS リソースとそのプロパティを指定します。CloudFormation スタックは、テンプレートに記述されているリソースをプロビジョニングします。

## デプロイプロセスの概要
<a name="deployment-process-overview"></a>

CloudFormation テンプレートを起動する前に、このガイドで説明しているアーキテクチャと設定の考慮事項を確認してください。このセクションのステップバイステップの手順に従って、ソリューションを設定してアカウントにデプロイします。

 **デプロイ時間:** 約 15 分

**注記**  
すでにこのソリューションをデプロイしている場合は、「[ソリューションのアップデート](update-the-solution.md)」でアップデートの手順を参照してください。

 [前提条件](prerequisites.md) 
+ CloudFront ディストリビューションを設定する
+ ALB を設定します

 [ステップ 1. スタックを起動する](step-1.-launch-the-stack.md) 
+ AWS アカウントで CloudFormation テンプレートを起動します。
+ 必須パラメータの値を入力します: **スタック名**、**Application Access Log Bucket Name**
+ 他のテンプレートパラメータを確認して、必要に応じて調整します。

 [ステップ 2. ウェブ ACL をウェブアプリケーションに関連付ける](step-2.-associate-the-web-acl-with-your-web-application.md) 
+ CloudFront ウェブディストリビューションまたは ALB を、このソリューションが生成するウェブ ACL に関連付けます。ディストリビューションまたはロードバランサーを必要な数だけ関連付けることができます。

 [ステップ 3. ウェブアクセスロギングを設定する](step-3.-configure-web-access-logging.md) 
+ CloudFront ウェブディストリビューションまたは ALB のウェブアクセスロギングをオンにして、ログファイルを適切な Amazon S3 バケットに送信します。ユーザー定義のプレフィックスに一致するフォルダにログを保存します。ユーザー定義プレフィックスが使用されていない場合は、ログを AWSLogs (デフォルトのログプレフィックス `AWSLogs/`) に保存します。詳細については、「[ステップ 1. スタックを起動する」の **Application Access Log Bucket Prefix** パラメータを参照してください。詳細については「Step 1. Launch the stack](step-1.-launch-the-stack.md)」を参照してください。

# AWS CloudFormation テンプレート
<a name="aws-cloudformation-templates"></a>

このソリューションには、1 つのメイン AWS CloudFormation テンプレートと 2 つのネストされたテンプレートが含まれています。ソリューションをデプロイする前に CloudFormation テンプレートをダウンロードできます。

## メインスタック
<a name="main-stack"></a>

 [https://s3.amazonaws.com/solutions-reference/security-automations-for-aws-waf/latest/aws-waf-security-automations.template](https://s3.amazonaws.com/solutions-reference/security-automations-for-aws-waf/latest/aws-waf-security-automations.template) **aws-waf-security-automations.template** - このテンプレートをエントリポイントとして使用して、アカウントでソリューションを起動します。デフォルト設定では、事前設定されたルールを使用して AWS WAF ウェブ ACL がデプロイされます。また、ニーズに応じてテンプレートをカスタマイズすることもできます。

## WebACL スタック
<a name="webacl-stack"></a>

 [https://s3.amazonaws.com/solutions-reference/security-automations-for-aws-waf/latest/aws-waf-security-automations-webacl.template](https://s3.amazonaws.com/solutions-reference/security-automations-for-aws-waf/latest/aws-waf-security-automations-webacl.template) **aws-waf-security-automations-webacl.template** – このネストされたテンプレートは、ウェブ ACL、IP、セット、その他の関連リソースなどの AWS WAF リソースをプロビジョニングします。

## Firehose Athena スタック
<a name="firehose-athena-stack"></a>

 [https://s3.amazonaws.com/solutions-reference/security-automations-for-aws-waf/latest/aws-waf-security-automations-firehose-athena.template](https://s3.amazonaws.com/solutions-reference/security-automations-for-aws-waf/latest/aws-waf-security-automations-firehose-athena.template) **aws-waf-security-automations-firehose-athena.template** – このネストされたテンプレートは、[AWS Glue](https://aws.amazon.com/glue/)、Athena、および Firehose に関連するリソースをプロビジョニングします。これは、**Scanner & Probe** Athena ログパーサー、**HTTP Flood** Lambda または Athena ログパーサーのいずれかを選択したときに作成されます。

**注記**  
AWS CloudFormation のリソースは、AWS Cloud Development Kit (AWS CDK) のコンストラクトで作成されています。

この AWS CloudFormation テンプレートは、AWS WAF ソリューションのセキュリティオートメーションを AWS クラウドにデプロイします。

# 前提条件
<a name="prerequisites"></a>

このソリューションは、CloudFront または ALB でデプロイされたウェブアプリケーションで動作するように設計されています。これらのリソースのいずれかが設定されていない場合は、このソリューションを起動する前に該当するタスクを完了してください。

## CloudFront ディストリビューションを設定する
<a name="configure-a-cloudfront-distribution"></a>

次の手順に従い、ウェブアプリケーションの静的および動的コンテンツ用に CloudFront でディストリビューションを設定します。詳細な手順については、「[Amazon CloudFront 開発者ガイド](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html)」を参照してください。

1. CloudFront のウェブアプリケーション用のディストリビューションを作成します。「[ディストリビューションを作成する](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-creating-console.html)」を参照してください。

1. 静的オリジンおよび動的オリジンを設定します。「[CloudFront ディストリビューションでさまざまなオリジンを使用する](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DownloadDistS3AndCustomOrigins.html)」を参照してください。

1. ディストリビューションの動作を指定します。「[ディストリビューションを作成または更新する場合に指定する値](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html)」を参照してください。
**注記**  
エンドポイントとして `CloudFront` を選択した場合は、米国東部 (バージニア北部) リージョンに WAFV2 リソースを作成する必要があります。

## ALB を設定します
<a name="configure-an-alb"></a>

着信トラフィックをウェブアプリケーションに分散するように ALB を設定するには、「*Application Load Balancer ユーザーガイド*」の「[Application Load Balancer の作成](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html)」を参照してください。

# ステップ 1. スタックを起動する
<a name="step-1.-launch-the-stack"></a>

この自動 AWS CloudFormation テンプレートは、AWS クラウドにソリューションをデプロイします。

1. [AWS マネジメントコンソール](https://aws.amazon.com/console)にサインインして、**[ソリューションを起動]** を選択して `waf-automation-on-aws.template` CloudFormation テンプレートを起動します。

    [https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=WAFSecurityAutomations&templateURL=https:%2F%2Fs3.amazonaws.com%2Fsolutions-reference%2Fsecurity-automations-for-aws-waf%2Flatest%2Faws-waf-security-automations.template&redirectId=ImplementationGuide](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=WAFSecurityAutomations&templateURL=https:%2F%2Fs3.amazonaws.com%2Fsolutions-reference%2Fsecurity-automations-for-aws-waf%2Flatest%2Faws-waf-security-automations.template&redirectId=ImplementationGuide) 

1. テンプレートはデフォルトで米国東部 (バージニア北部) リージョンで起動します。別の AWS リージョンでこのソリューションを起動するには、コンソールのナビゲーションバーのリージョンセレクターを使用します。エンドポイントとして `CloudFront` を選択した場合は、ソリューションを米国東部 (バージニア北部) (`us-east-1`) リージョンにデプロイする必要があります。
**注記**  
定義する入力パラメータ値に応じて、このソリューションに必要なリソースは異なります。これらのリソースは現在、特定の AWS リージョンでのみ使用できます。そのため、これらのサービスが利用可能な AWS リージョンでこのソリューションを起動する必要があります。詳細については、「[サポートしている AWS リージョン](plan-your-deployment.md#supported-aws-regions)」を参照してください。

1. **[テンプレートの指定]** ページで、正しいテンプレートを選択したことを確認し、**[次へ]** を選択します。

1. **[スタックの詳細を指定]** ページの **[スタック名]** フィールドで AWS WAF 設定に名前を割り当てます。これは、テンプレートが作成するウェブ ACL の名前にもなります。

1. **[パラメータ]** で、テンプレートのパラメータを確認し、必要に応じて変更します。特定の機能をオプトアウトするには、必要に応じて `none` または `no` を選択します。このソリューションでは、次のデフォルト値を使用します。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/solutions/latest/security-automations-for-aws-waf/step-1.-launch-the-stack.html)

1. [**次へ**] を選択します。

1. **[スタックオプションの設定]** ページでは、スタック内のリソースのタグ (キー値のペア) を指定し、追加オプションを設定できます。[**次へ**] を選択します。

1. **[確認および作成]** ページで、設定を確認して確定します。テンプレートによって IAM リソースと必要な追加機能が作成されることを承認するボックスを選択します。

1. **[送信]** を選択してスタックをデプロイします。

   AWS CloudFormation コンソールの **[ステータス]** 列でスタックのステータスを確認します。約 15 分で CREATE\$1COMPLETE ステータスが表示されます。
**注記**  
このソリューションには、AWS Lambda 関数 `Log Parser` と `IP Lists Parser` に加えて、Lambda 関数 `helper` と `custom-resource` が含まれています。この 2 つの関数は、初期設定時、またはリソースの更新時や削除時にのみ実行されます。  
このソリューションを使用すると、AWS Lambda コンソールにすべての関数が表示されますが、3 つの主要なソリューション関数のみが定期的にアクティブになります。他の 2 つの関数は関連付けられたリソースを管理するために必要になるため削除しないでください。

スタックリソースの詳細を表示するには、**[出力]** タブを選択します。これには、**BadBotHoneypotEndpoint** 値が含まれます。この値を覚えておいてください。[ウェブアプリケーションにハニーポットリンクを埋め込む](embed-the-honeypot-link-in-your-web-application-optional.md)際に使用します。

# ステップ 2. ウェブ ACL をウェブアプリケーションに関連付ける
<a name="step-2.-associate-the-web-acl-with-your-web-application"></a>

CloudFront ディストリビューションまたは ALB を更新して、「[ステップ 1. スタックを起動する](step-1.-launch-the-stack.md)」で生成したリソースを使用して AWS WAF とロギングをアクティブにします。

1. [AWS WAF コンソール](https://console.aws.amazon.com/wafv2/)にサインインします。

1. 使用したいウェブ ACL を選択します。

1. [**Associated AWS resources (関連付けられた AWS リソース)**] タブで [**Add AWS resources (AWS リソースの追加)**] を選択します。

1. **[リソースタイプ]** で、CloudFront ディストリビューションまたは ALB を選択します。

1. リストからリソースを選択し、**[追加]** を選択して変更を保存します。

# ステップ 3. ウェブアクセスロギングを設定する
<a name="step-3.-configure-web-access-logging"></a>

ウェブアクセスログを適切な Amazon S3 バケットに送信して、このデータを Log Parser Lambda 関数で使用できるように、CloudFront または ALB を設定します。

## Amazon CloudFront ディストリビューションからのウェブアクセスログを保存する
<a name="store-web-access-logs-from-a-cloudfront-distribution"></a>

1. [Amazon CloudFront コンソール](https://console.aws.amazon.com/cloudfront/)にサインインします。

1. ウェブアプリケーションのディストリビューションを選択し、**[ディストリビューション設定]** を選択します。

1. **[全般]** タブで、**[編集]** を選択します。

1. **[AWS WAF ウェブ ACL]** で、作成されたウェブ ACL ソリューション (**スタック名**パラメータ) を選択します。

1. [**Logging**] で、[**On**] を選択します。

1. **[ログ用のバケット]** で、ウェブアクセスログの保存に使用する S3 バケットを選択します。これは、メインスタックで使用され、CloudFront がログを書き込むアクセス許可を持つ新規または既存の S3 バケットにすることができます。ドロップダウンリストに、現在の AWS アカウントに関連付けられているバケットが一覧表示されます。詳細については、*Amazon CloudFront 開発者ガイド*の「[基本的な CloudFront ディストリビューションの開始方法](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/GettingStarted.SimpleDistribution.html)」を参照してください。

1. ログプレフィックスを、ソリューションのデプロイに使用されるプレフィックスに設定します。プレフィックスは、メインスタックの **[パラメータ]** タブ、**[AppAccessLogBucketPrefixParam]** (デフォルト `AWSLogs/`) にあります。

1. [**Yes, edit**] を選択して変更を保存します。

詳細については、「*Amazon CloudFront デベロッパーガイド*」の「[標準ログ (アクセスログ) の設定および使用](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html)」を参照してください。

## Application Load Balancer からのウェブアクセスログを保存する
<a name="store-web-access-logs-from-an-application-load-balancer"></a>

1. [Amazon Elastic Compute Cloud (Amazon EC2) コンソール](https://console.aws.amazon.com/ec2/)にログインします。

1. ナビゲーションペインで、**[ロードバランサー]** を選択します。

1. ウェブアプリケーションの ALB を選択します。

1. **[Description]** (説明) タブで、**[Edit attributes]** (属性の編集) を選択します。

1. [**Enable access logs**] を選択します。

1. **[S3 location]** に、ウェブアクセスログの保存に使用する S3 バケットの名前を入力します。これは、メインスタックで使用され、Application Load Balancer がログを書き込むアクセス許可を持つ新規または既存の S3 バケットにすることができます。

1. ログプレフィックスを、ソリューションのデプロイに使用されるプレフィックスに設定します。プレフィックスは、メインスタックの **[パラメータ]** タブ、**[AppAccessLogBucketPrefixParam]** (デフォルト `AWSLogs/`) にあります。

1. **[保存]** を選択します。

詳細については、「*Elastic Load Balancing ユーザーガイド*」の「[Application Load Balancer のアクセスログ](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html)」を参照してください。