[AWS WAF] CloudfrontでIPフィルタしたい

  • ファイルがS3にある
  • 独自ドメインで公開したい
  • かつSSL対応したい
  • 特定IPのみアクセス許可したい

S3にあるファイルに対して、独自ドメイン+SSLということで
Cloudfrontを使うんですが、Cloudfront単体だとIPフィルタ等を
設定できない。

調べると、AWS WAF(Web Application Firewall)が設定可能ということでやってみた。

ざっくりAWS WAFの概念

  1. Conditions
    • フィルタするための対象を定義するもの。
    • IPアドレス
    • User-Agent
    • URLにSQLが含まれているか、などなど
  2. Rules
    • Conditionsを含むか、含まないかを定義するもの
    • 特定のIPアドレスに該当する or しない
    • 特定のUser-Agentを含む or 含まない などなど
  3. Web ACLs
    • 複数のRulesをまとめた、エンドポイント
    • それぞれのRulesに対してどうするか、を定義する
    • 「特定のIPアドレスに該当しない」(Rules)リクエストを「拒否」する 等
    • この単位でCloudfrontやEC2 Application Load Balancerに設定ができる

こんな感じ。シンプル。

まずはConditionsから作る

WebACLsを作成すると、RulesもConditionsもまとめて一緒に作れるけど、
説明のため、順番に作ってみる。

今回はIPアドレスによるフィルタをしたいので、IP match Conditions(左のメニューのIP addresses)
を作る。

  1. Create Condition押す
  2. わかりやすい名前と、対象となるIPアドレスを入力する(ここではサンプルとして7.7.7.7/32)
  3. regionはCloudfrontで使うならGlobal、そうでないなら適切なregion(設定したいロードバランサがあるregion)を選択する
  4. おわり

複数のIPアドレスを設定したり、サブネットマスクでの指定も可能です。

次にRulesを作る

  1. Create ruleを押す
  2. わかりやすい名前とRegionを設定する(Rule typeはとりあえず置いとく)
  3. Add conditions
    1. does or does not (今回は does)
    2. originate from IP address (IPアドレスを指定)
    3. さきほどConditionsで作ったIPAddressを指定

これで、
「リクエストが特定のIPアドレスに該当する」というルールを作成できました。

最後にWeb ACLsを作る

  1. Configure web ACLを押す
  2. 最初に説明出て来るのでNext
  3. 次の画面で名前とRegionを適当に設定しNext
  4. 次の画面でConditions作れるんですが、前述で作ったのでここは何もせずにNext
  5. Create rules画面で先程作ったRulesを設定する
    1. Select a ruleで前述で作ったRulesを指定してAdd rule to web ACLを押す
    2. 次に、そのRuleに対してどうするかを設定する
    • 今回は設定したIPアドレスのみ許可したいので、Allowを選択
    1. 最後にルール外のリクエストをどうするかを指定する
    • 設定したIPアドレス以外は拒否したいので、「Block all ~」のほうを選択
    1. Review and createを押す
  6. Confirm and create 押す
  7. おわり

これで特定のIPアドレスのみを許可するファイアーウォールが作れました。
あとはCloudfrontでもいいし、ALBにでも設定できます。

DDosを防いでくれるAWS Shieldのほうもためしてみたいなー

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です