Terraform を使用して AWS WAF ソリューションのセキュリティオートメーションをデプロイする - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Terraform を使用して AWS WAF ソリューションのセキュリティオートメーションをデプロイする

作成者: Dr. Rahul Sharad Gaikwad (AWS)、Tamilselvan P (AWS)

コードリポジトリ: aws-waf-automation-terraform-samples

環境:PoC またはパイロット

テクノロジー: セキュリティ、アイデンティティ、コンプライアンス、インフラストラクチャ、コンテンツ配信 DevOps

ワークロード:その他すべてのワークロード

AWS サービス: AWS WAF

[概要]

AWS WAF は、ウェブアクセスコントロールリスト (ACL) で定義してデプロイするカスタマイズ可能なルールを使用して、一般的な悪用からアプリケーションを保護するウェブアプリケーションファイアウォールです。AWS WAF ルールの設定は、特に専任のセキュリティチームを持たない組織にとっては難しい場合があります。このプロセスを簡素化するために、Amazon Web Services (AWS) は AWS WAF 向けセキュリティ自動化ソリューションを提供しています。このソリューションでは、ウェブベースの攻撃をフィルタリングする一連の AWS WAF ルールを含む単一のウェブ ACL が自動的にデプロイされます。Terraform のデプロイ時に、どの保護機能を含めるかを指定できます。このソリューションをデプロイすると、AWS WAF は既存の Amazon CloudFront ディストリビューションまたは Application Load Balancer へのウェブリクエストを検査し、ルールに一致しないリクエストをブロックします。

Security Automations for AWS WAF ソリューションは、「Security Automations for AWS WAF Implementation Guide」の指示 CloudFormation に従って AWS を使用してデプロイできます。 AWS WAF このパターンは、 HashiCorp Terraform を優先Infrastructure as Code (IaC) ツールとして使用してクラウドインフラストラクチャをプロビジョニングおよび管理している組織にとって代替のデプロイオプションを提供します。このソリューションをデプロイすると、Terraform は変更をクラウドに自動的に適用し、AWS WAF 設定と保護機能をデプロイして設定します。

前提条件と制限

前提条件

  • アクティブなAWS アカウント

  • インストールおよび必要な権限を設定済みの AWS コマンドラインインターフェイス (AWS CLI)。詳細については、「使用の開始 (AWS CLI ドキュメント)」を参照してください。

  • インストールおよび設定済みの Terraform。詳細については、「Terraform のインストール (Terraform ドキュメント)」を参照してください。

製品バージョン

  • AWS CLI バージョン 2.4.25 以降

  • Terraform バージョン 1.1.9 以降

アーキテクチャ

ターゲットアーキテクチャ

このパターンは、AWS WAF ソリューションのセキュリティ自動化をデプロイします。ターゲットアーキテクチャの詳細については、「Security Automations for AWS WAF Implementation Guide」の「Architecture overview」を参照してください。このデプロイの AWS Lambda 自動化、アプリケーションログパーサー、AWS WAF ログパーサー、IP リストパーサー、アクセスハンドラーの詳細については、「Security Automations for AWS WAF Implementation Guide」のコンポーネントの詳細を参照してください。

Terraform デプロイ

terraform apply を実行すると、Terraform は次のことを行います。

  1. Terraform は、.esting.tfvars ファイルからの入力に基づいて IAM ロールとLambda 関数を作成します。

  2. Terraform は、.esting.tfvars ファイルからの入力に基づいて AWS WAF ACL ルールと IP セットを作成します。

  3. Terraform は、testing.tfvars ファイルからの入力に基づいて、Amazon Simple Storage Service (Amazon S3) バケット、Amazon EventBridge ルール、AWS Glue データベーステーブル、および Amazon Athena ワークグループを作成します。

  4. Terraform は AWS CloudFormation スタックをデプロイしてカスタムリソースをプロビジョニングします。

  5. Terraform は、test.tfvars ファイルからの指定された入力に基づいて Amazon API Gateway リソースを作成します。

自動化とスケール

このパターンを使用して、複数の AWS アカウントと AWS リージョン用の AWS WAF ルールを作成し、AWS クラウド環境全体に AWS WAF ソリューションのセキュリティ自動化をデプロイできます。

ツール

AWS サービス

  • AWS コマンドラインインターフェイス (AWS CLI)」は、オープンソースのツールであり、コマンドラインシェルのコマンドを使用して AWS サービスとやり取りすることができます。

  • AWS WAF は、保護されたウェブアプリケーションリソースに転送される HTTP と HTTPS リクエストをモニタリングできるウェブアプリケーションファイアウォールです。

その他のサービス

  • Git はオープンソースの分散型バージョン管理システムです。

  • HashiCorp Terraform は、コードを使用してクラウドインフラストラクチャとリソースをプロビジョニングおよび管理するためのコマンドラインインターフェイスアプリケーションです。

コードリポジトリ

このパターンのコードは、 GitHub AWS WAF Automation Using Terraform リポジトリにあります。

ベストプラクティス

  • 静的ファイルは別の S3 バケットに配置してください。

  • 変数をハードコーディングすることは避けてください。

  • カスタムスクリプトの使用を制限してください。

  • 命名規則を採用してください。

エピック

タスク説明必要なスキル

Git をインストールする。

Getting started」(Git Web サイト) の指示に従って、ローカルワークステーションに Git をインストールします。

DevOps エンジニア

リポジトリをクローン作成します。

ローカルワークステーションで次のコマンドを入力し、コードリポジトリをクローンします。repo URL を含むコマンド全体をコピーするには、このパターンの「追加情報」セクションを参照してください。

git clone <repo-URL>.git
DevOps エンジニア

変数を更新してください。

  1. 次のコマンドを入力し、クローンされたディレクトリに移動します。

    cd terraform-aws-waf-automation
  2. 任意のテキストエディタで testing.tfvars ファイルを開きます。

  3. testing.tfvars ファイル内の変数の値を更新します。

  4. ファイルを保存して閉じます。

DevOps エンジニア
タスク説明必要なスキル

Terraform の設定を初期化します。

次のコマンドを入力し、Terraform 設定ファイルを含む作業ディレクトリを初期化します。

terraform init
DevOps エンジニア

Terraform プランをプレビューしてください。

次のコマンドを入力します。Terraform は設定ファイルを評価して、宣言されたリソースのターゲット状態を判断します。次に、ターゲットの状態を現在の状態と比較し、プランを作成します。

terraform plan -var-file="testing.tfvars"
DevOps エンジニア

プランを検証してください。

プランを確認し、ターゲット AWS アカウントで必要なアーキテクチャが設定されていることを確認します。

DevOps エンジニア

ソリューションをデプロイします。

  1. 次のコマンドを入力してプランを適用します。

    terraform apply -var-file="testing.tfvars"
  2. yes を入力して確定します。Terraform は、構成ファイルに宣言されている目標状態を達成するために、インフラストラクチャを作成、更新、または破棄します。シーケンスの詳細については、このパターンの「アーキテクチャ」セクションにある「Terraform デプロイ」を参照してください。

DevOps エンジニア
タスク説明必要なスキル

変更を確認します。

  1. Terraform コンソールで、出力が期待どおりの結果であることを確認します。

  2. AWS マネジメントコンソールにサインインします。

  3. Terraform コンソールの出力が AWS アカウントに正常にデプロイされていることを確認します。

DevOps エンジニア

(オプション) インフラストラクチャをクリーンアップします。

このソリューションによって行われたすべてのリソースと設定の変更を削除するには、次の操作を行います。

  1. Terraform コンソールで、次のコマンドを入力します。

    terraform destroy -var-file="testing.tfvars”
  2. yes を入力して確定します。

DevOps エンジニア

トラブルシューティング

問題ソリューション

WAFV2 IPSet: WAFOptimisticLockException エラー

terraform destroy コマンドの実行時にこのエラーが発生した場合は、IP セットを手動で削除する必要があります。手順については、「IP セットの削除」(AWS WAF ドキュメント) を参照してください。

関連リソース

AWS リファレンス

Terraform のリファレンス

追加情報

次のコマンドは、このパターンの GitHub リポジトリをクローンします。

git clone https://github.com/aws-samples/aws-waf-automation-terraform-samples.git