AWS
S3
CloudFront
APIGateway
AWSWAF

API Gatewayの前にWAFを設定する

More than 1 year has passed since last update.


概要

API Gatewayを使うとき手が届かないむずかゆいところがたくさんあります(HTTPSのみしか受け付けないとか、前段にWAFおけないとか)。このうちのWAFを設定するという部分に今回は取り組んだときのTipsを残しておきます。


  • API Gateway + CloudFront + AWS WAF (+ S3)

  • AWS WAFのIP Match Conditionのみを利用


前提

以前に投稿した、

「CloudFrontに複数オリジン(API GatewayオリジンとS3オリジン)の設定」の通り、下記の環境が構築されている前提とします。なお、今回はAPIGatewayの前段におくことがメインなのでS3はオプションです。

arch.png


アーキテクチャ構成

AWS WAFが入ることで下記の構成になります。

arch2.png


AWS WAFの概要

詳細は公式ドキュメントやブログ等でたくさんの方が紹介していただいているのでそちらを参照してください。


AWS WAFの設定

今回はIP Match Conditionを設定します。下記手順でコンポーネントを構築していきます。


  1. IPSetsの作成

  2. Ruleの作成

  3. WebACLの作成


IPSetsの作成

非常に簡単です。CIDR形式でIPを登録してIPアドレスの集合を作るだけです。

ip_create.png

ip_setting.png

ip_result.png


Ruleの作成

CloudFront->APIGatewayへのルーティングになるため、CloudFrontを指定しています。

rule_create.png

rule_setting.png

rule_result.png


WebACLの作成

作成したIPSets、RulesをWebACLに設定します。

acl_setting_1.png

acl_setting_2.png

acl_setting_3.png

acl_setting_4.png

acl_result.png


結果



  • IPSetsに設定したIPからは問題なくアクセスできます。


    • API Gatewayは単純にSuccessと返すだけのMockエンドポイントを用意し、prodステージにデプロイしました。


      • リソース名:success



    • ブラウザから動作確認






  • IPSets外のブラウザからアクセスしてみます。


    • アクセスブロックされました!
      wafblock.png




まとめ


  • APIGatewayの前段にWAFを置く構成を構築しました。

  • IP Match Condition以外にSQLインジェクションやXSSなど他にも設定がたくさんあります。IP Match Conditionだけでいうと超シンプルに作れます。