API Gatewayの前にWAFを設定する

  • 0
    Like
  • 0
    Comment

    概要

    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だけでいうと超シンプルに作れます。