🔥

【AWS】AWS WAF で海外からのアクセスをブロックしてみた

に公開

はじめに

個人開発しているサービスのリソースをチェックしたところ、アプリケーションやデータベースの CPU が一時的に高騰していることが何度かありました。

ログを確認したところ、海外から短時間で大量のアクセスがあり、これが原因であることがわかりました。

そこで、AWS WAF を導入し、海外からのアクセスをブロックすることにしました。

今回、AWS WAF を使用するのは初めてだったので、概要やコスト、設定方法を調べながら進めました。

本記事は、それらの内容を備忘録も兼ねてまとめたものです。

少しでも皆様の参考になりますと幸いです。

注意点

AWS WAF とは

概要

AWS WAF(Web Application Firewall)とは、AWS が提供する Web アプリケーションを保護するためのセキュリティサービスです。

設定したルールに基づいて、Web アクセスを許可、ブロック、監視することができます。

保護できる主なリソースには Amazon CloudFront、Application Load Balancer(ALB)、Amazon API Gateway などがあります。

このようなリソースに対して適切なルールを設定することで、サーバーへアクセスが届く前にブロックすることができます。

https://aws.amazon.com/jp/waf

コスト

AWS WAF のコスト体系は以下の通りです。

AWS WAF を導入するサービスがアクセスされる回数や、設定内容によってコストが変動するため、事前にどれくらいのコストがかかるのかを試算しておくことが重要です。

https://aws.amazon.com/jp/waf/pricing

AWS WAF を設定する

設定前

今回は、海外からのアクセスを再現するために Google Apps Script を使用します。

以下のコードを実行し、指定の URL にアクセスした場合の HTTP ステータスコードを確認します。

function fetchAndLogStatusCode() {
  const url = 'XXXXXXXXXX';

  const response = UrlFetchApp.fetch(url, { "muteHttpExceptions": true });

  const statusCode = response.getResponseCode();

  Logger.log('HTTPステータスコード:' + statusCode);
}

実行したところ、以下のようにログに出力されました。

HTTPステータスコード:200

また、サーバーのログから IP アドレスを確認し、国を確認したところ、アメリカからのアクセスであることがわかりました。

まだ AWS WAF を設定していないため、海外からもアクセスできている状態であることがわかります。

設定手順

では、実際に AWS WAF を設定していきます。

今回は、日本からのアクセスのみを許可し、それ以外は全てブロックする設定を Application Load Balancer に適用します。

AWS マネジメントコンソールにログインし、AWS WAF のダッシュボードにアクセスし、「Create web ACL」をクリックします。

  • Resource type:Regional resources を選択します。

  • Region:対象のリージョンを選択します。

  • Name:Web ACL の名前を入力します。

  • CloudWatch metric name:Web ACL で使用する CloudWatch のメトリクス名を入力します。

  • Associated AWS resources:Application Load Balancer を選択します。

  • Resource level DDoS protection:DDoS 保護のレベルを選択します。

「Next」をクリックします。

「Add rules」>「Add my own rules and rule groups」をクリックします。

  • Rule type:Rule builder を選択します。

  • Rule

    • Name:ルールの名前を入力します。
    • Type:「Regular rule」を選択します。

  • If a request:matches the statement を選択します。

  • Statement

    • Inspect:Originates from a country in を選択します。
    • Country codes:Japan - JP を選択します。
    • IP address to use to determine the country of origin:Source IP address を選択します。

  • Action:Allow を選択します。

「Add rule」をクリックします。

  • Default action:Block を選択します。

「Next」をクリックします。

「Next」をクリックします。

「Next」をクリックします。

最後に、設定内容を確認し、「Create web ACL」をクリックします。

これで AWS WAF の設定が完了しました。

設定後

では、先ほどの Google Apps Script のコードを再度実行し、HTTP ステータスコードを確認します。

function fetchAndLogStatusCode() {
  const url = 'XXXXXXXXXX';

  const response = UrlFetchApp.fetch(url, { "muteHttpExceptions": true });

  const statusCode = response.getResponseCode();

  Logger.log('HTTPステータスコード:' + statusCode);
}

実行したところ、以下のようにログに出力されました。

HTTPステータスコード:403

無事に海外からのアクセスがブロックされていることが確認できました。

まとめ

AWS WAF を使用して、海外からのアクセスをブロックする方法について解説しました。

海外からのアクセスをブロックすることで、セキュリティ面だけでなく、パフォーマンス面においても効果があると思います。

簡単に設定できるので、ぜひ試してみてください。

最後までご覧いただき、ありがとうございました。

参考文献

https://www.netassist.ne.jp/techblog/25475

https://blog.serverworks.co.jp/aws-waf-block-from-overseas-countries

GitHubで編集を提案
株式会社L&E Group

Discussion