AWS WAF を使用して IP アドレスまたは位置情報に基づいてアクセスを制限する - AWS 規範的ガイダンス

AWS WAF を使用して IP アドレスまたは位置情報に基づいてアクセスを制限する

Louis Hourcade (Amazon Web Services)

概要

AWS WAF は、可用性に影響を与えたり、セキュリティを侵害したり、リソースを過剰に消費させたりする一般的なウェブエクスプロイトやボットからウェブアプリケーションおよび API の保護に役立つウェブアプリケーションファイアウォールです。AWS WAF のウェブアクセスコントロールリスト (ウェブ ACL) を使用すると、トラフィックがアプリケーションに到達する方法を制御できます。ウェブ ACL では、正当なトラフィックを許可し、ボットトラフィックを制御し、一般的な攻撃パターンをブロックするように設計されたルールまたはルールグループをユーザーが追加します。詳細については、AWS WAF の仕組みを参照してください。

次のタイプのルールを AWS WAF ウェブ ACL に関連付けることができます。

  • マネージドルールグループ – AWS マネージドルールチームと AWS Marketplace 販売者は、事前設定されたルールセットを提供します。一部のマネージドルールグループは、ウェブアプリケーションを保護するために設計されています。他のものは、既知の脅威や一般的な脆弱性に対して広範な保護を提供します。

  • カスタムルールカスタムルールグループ – ウェブアプリケーションと API へのアクセスをカスタマイズするルールとルールグループを作成することもできます。例えば、特定の IP アドレスのリストまたは国のリストに基づいてトラフィックを制限できます。

このパターンと関連するコードリポジトリを使用することで、AWS Cloud Development Kit (AWS CDK) を使用してカスタムルールで AWS WAF ウェブ ACL をデプロイできます。これらのルールは、エンドユーザーの IP アドレスまたは位置情報に基づいてウェブアプリケーションリソースへのアクセスを制限します。オプションで、いくつかのマネージドルールグループをアタッチすることもできます。

前提条件と制限

前提条件 

機能制限

  • このパターンは、AWS WAF が利用可能な AWS リージョンでのみ使用できます。利用可能なリージョンについては、「AWS のサービス by Region」を参照してください。

ツール

AWS のサービス

  • AWS Cloud Development Kit (AWS CDK) は、AWS クラウドのインフラストラクチャをコードで定義してプロビジョニングするのに役立つソフトウェア開発フレームワークです。

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

コードリポジトリ:

このパターンのコードは、GitHub の IP and geolocation restriction with AWS WAF リポジトリで入手できます。コードは 2 つの AWS WAF ウェブ ACL をデプロイします。1 つ目は、Amazon API Gateway リソース向けのリージョナルウェブ ACL です。2 つ目は、Amazon CloudFront リソースのグローバルウェブ ACL です。どちらのウェブ ACL にも、次のカスタムルールが含まれています。

  • IPMatch は、許可されていない IP アドレスからのリクエストをブロックします。

  • GeoMatch は、許可されていない国からのリクエストをブロックします。

デプロイ中に、オプションで以下のすべてのマネージドルールグループをウェブ ACL にアタッチできます。

  • コアルールセット (CRS) – ルールグループには、ウェブアプリケーションに一般的に適用可能なルールが含まれています。これにより、OWASP Top 10 などの OWASP の出版物に記載されている、リスクが高く一般的に発生するいくつかの脆弱性を含む、さまざまな脆弱性の悪用に対する保護を支援します。

  • 管理者保護 – このルールグループには、公開されている管理ページへの外部アクセスをブロックするために役立つルールが含まれています。

  • 既知の不正な入力 – このルールグループは、無効であることが判明しているリクエストパターンおよび脆弱性の悪用または発見に関連付けられているリクエストパターンのブロックを支援します。

  • Amazon IP 評価リスト – このルールグループには、Amazon 内部脅威インテリジェンスに基づくルールが含まれています。これは、通常ボットやその他の脅威に関連付けられている IP アドレスのブロックを支援します。

  • Linux オペレーティングシステムマネージドルールグループ – このルールグループは、Linux 固有のローカルファイルインクルージョン (LFI) 攻撃など、Linux の脆弱性の悪用に関連するリクエストパターンのブロックを支援します。

  • SQL データベースマネージドルールグループ – このルールグループは、SQL インジェクション攻撃などの SQL データベースの悪用に関連するリクエストパターンのブロックを支援します。

エピック

タスク説明必要なスキル

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

次のコマンドを入力して、IP and geolocation restriction with AWS WAF リポジトリをローカルワークステーションにクローンします。

git clone https://github.com/aws-samples/ip-and-geolocation-restriction-with-waf-cdk.git
Git

ルールを設定します。

  1. クローンしたリポジトリで app.py ファイルを開きます。

  2. 次の変数の値を変更して、ルールをカスタマイズします。

    aws_acccount = "AWS_ACCOUNT" region = "AWS_REGION" ip_list = ["CIDR_RANGE_1", "CIDR_RANGE_2"] geo_list = ["COUNTRY_CODE_1", "COUNTRY_CODE_2"] aws_managed_rules = True

    コードの説明は以下のとおりです。

    • aws_account はターゲット AWS アカウントの ID です。

    • region は API Gateway リソースのウェブ ACL のターゲット AWS リージョンです。

      注記

      CloudFront リソースのウェブ ACL はグローバルであり、us-east-1 リージョンにデプロイされます。

    • ip_list は、アクセスが許可されている CIDR 範囲のリストです。

    • geo_list は、アクセスが許可されている国のリストです。有効な値については、AWS WAF のドキュメントを参照してください。

    • aws_managed_rules は、マネージドルールグループがウェブ ACL に追加されるかどうかを制御します。この値が True の場合、追加されます。この値が False の場合、除外されます。

  3. app.py ファイルを保存して閉じます。

AWS 全般、Python
タスク説明必要なスキル

AWS 環境のブートストラップ。

まだ完了していない場合は、AWS CDK アプリケーションをデプロイする前に AWS 環境をブートストラップする必要があります。

  1. AWS CDK CLI で、次のコマンドを入力して us-east-1 リージョンをブートストラップします。

    cdk bootstrap aws://<account-id>/us-east-1
  2. API Gateway のウェブ ACL を us-east-1 以外のリージョンにデプロイする場合は、次のコマンドを入力してターゲットリージョンをブートストラップします。

    cdk bootstrap aws://<account-id>/<region>
AWS 全般

AWS CDK アプリケーションをデプロイします。

  1. AWS CDK アプリケーションのテストを行うには、次のコマンドを入力します。

    cdk deploy --all
  2. AWS CloudFormation スタックデプロイが完了するまで待ちます。

AWS 全般
タスク説明必要なスキル

ウェブ ACL が正常にデプロイされたことを確認します。

  1. AWS マネジメントコンソールにサインインして AWS WAF コンソールを開きます。

  2. ナビゲーションペインで [Web ACLs] (ウェブ ACL) を選択します。

  3. AWS リージョンのリストで、[グローバル (CloudFront)] を選択します。

  4. 新しい CloudFront ウェブ ACL がデプロイされたことを確認し、定義した IP アドレスと位置情報ルールが含まれていることを確認します。このウェブ ACL のデフォルト名は WebACLCloudfront-<ID> です。

  5. AWS リージョンのリストで、スタックをデプロイしたリージョンを選択します。

  6. API Gateway リソースの新しいウェブ ACL がデプロイされたことを確認します。定義した IP アドレスと位置情報ルールが含まれていることを確認します。このウェブ ACL のデフォルト名は WebACLApiGW-<ID> です。

AWS 全般

(オプション) ウェブ ACL をリソースに関連付けます。

Application Load Balancer、API Gateway、CloudFront ディストリビューションなどの AWS リソースに AWS WAF ウェブ ACL を関連付けます。手順については、「Associating or disassociating a web ACL with an AWS resource」を参照してください。例については、AWS CDK ドキュメントの「class CfnWebACLAssociation (construct)」を参照してください。

AWS 全般
タスク説明必要なスキル

スタックを削除します。

  1. すべての AWS リソースからウェブ ACL の関連付けを解除します。手順については、AWS WAF ドキュメントを参照してください。

  2. AWS CDK CLI で、次のコマンドを入力して AWS CDK アプリケーションを削除します。

    cdk destroy --all
AWS 全般

関連リソース