AWS WAFってなに?とりあえず作ってみた!

記事タイトルとURLをコピーする

こんにちは!

クラウドインテグレーション部(CI部)技術2課の反町です。

今後AWS WAFを使う機会がありそうので、WAFの基本を学んでとりあえずAWSコンソールから作ってみよう!と思ったので、コンソールの作業手順をブログにまとめます。

※画像が多いかつ長めです

WAF(Web Application Firewall) とは

WAF(Web アプリケーションファイアウォール)とは、Web アプリケーションの通信をフィルター、監視、ブロックするためのソフトウェアまたは、ハードウェアのセキュリティ対策です。一般のファイアウォールや IDS/IPS との違いは、アプリケーションレベルで通信の中身を解析し、特定の条件にマッチする通信を検知・遮断する点です。WAF の代表的な用途には、SQL インジェクション、クロスサイトスクリプティングなど、アプリケーションの脆弱性を悪用した攻撃の遮断やアプリケーション層の DDoS 対策、不正なボットによるアクセスの遮断などがあります。

引用元:WAF(Web アプリケーションファイアウォール)とは?| AWS

AWSでいうファイアーウォールのセキュリティグループなどとの違いは、ネットワークレベルの通信制御ではなくその上の階層であるアプリケーションレベルでの通信制御ができる。それがWAFなんですね。

AWS WAFとクラウドWAFの違い

AWS WAFと似たような形でWAFを提供しているサービスがありますが、そこの違いは料金にありました。

多くのクラウドWAFサービスは初期導入費用が掛かったり、ライセンス費用が掛かります。そのあたりAWS WAFは費用を抑えつつ気軽に始められるという点が特徴的なようです。

WAFを作成する前に

WAFを作成するためには何が必要なのかわからなかったのでAWSドキュメントを見ているとハンズオン動画がありました!

今回はこのハンズオン動画を参考にAWS WAFを触ってみたいと思います。

動画自体は1時間半くらいあり、ハンズオンも丁寧にやっていると2時間半くらいかかってしまいますが、このブログではAWS WAFのハンズオンの部分だけ抜き出して記載しようと思います。

AWS Hands-on for Beginners - Amazon CloudFrontおよびAWS WAFを用いて エッジサービスの活用方法を学ぼう | AWS

WAFに必要なリソースを作成する

WAFを利用するためにいくつか必要なリソースがあったので作成しました。

構成

AWS WAFを作る前はユーザーがCloudFrontで設定したドメインをブラウザに入力すると静的コンテンツが表示されるように構成されています。

f:id:swx-miyu-sorimachi:20220128172306p:plain

  • CloudFront:S3をオリジンとして静的コンテンツをエッジロケーションから表示させる

  • S3:静的コンテンツを格納しCloudFrontのオリジンとして設定する

ユーザーとCloudFrontとの間でアクセス制御を行うためWAFを作成します。

AWS WAFを作ってみる

カスタムルールで作成

「Create web ACL」をクリックしてWAFの作成に進みます。 f:id:swx-miyu-sorimachi:20220128175715p:plain

step1

名前とリソースの関連付けを行います。

任意の名前とリーソースタイプ(今回はCloudFront)を選択します。 f:id:swx-miyu-sorimachi:20220128175835p:plain

下にスクロールしてCloudFrontを関連付けます。「Add AWS resources」をクリックします。 f:id:swx-miyu-sorimachi:20220128180030p:plain

リソースタイプはCloudFrontを選択し、作成しておいたCloudFrontにチェックを入れて「Add」をクリックします。 f:id:swx-miyu-sorimachi:20220128180455p:plain

リソースの関連付けがされていることを確認して「Next」をクリックします。 f:id:swx-miyu-sorimachi:20220128180556p:plain

step2

アクセス制御ルールの設定を行います

「Add rules」から「Add my own rules and rule groups」をクリックします。 f:id:swx-miyu-sorimachi:20220128181315p:plain

ルールタイプは「Rule builder」で任意のルール名を設定して、今回はタイプを「Regular rule」で進めます。 f:id:swx-miyu-sorimachi:20220128181505p:plain

下へスクロールしてリクエストがステートメントと一致したときにどう対応するかというルール設定を行います。 今回は日本からのアクセスを拒否する設定をします。

なので、Inspectは「Originates from a country in」、Countryは「Japan」に設定します。 f:id:swx-miyu-sorimachi:20220128182149p:plain

ThenのActionで、その時(Japanの時)は拒否なので「Block」を選択して「Add rule」をクリックします。 f:id:swx-miyu-sorimachi:20220128182300p:plain

カスタムルールが追加されたことを確認し、それ以外のアクセスのデフォルトアクションは許可するので「Default action」を「Allow」に設定して「Next」をクリックします。 f:id:swx-miyu-sorimachi:20220128182447p:plain

その他のstep

ルール設定した後はすべてデフォルトの設定で進めます。 f:id:swx-miyu-sorimachi:20220128182637p:plain f:id:swx-miyu-sorimachi:20220128182653p:plain

step5

内容を確認して「Create web ACL」をクリックします。 f:id:swx-miyu-sorimachi:20220128182704p:plain f:id:swx-miyu-sorimachi:20220128182827p:plain

CloudFrontへの関連付けを確認する

これでAWS WAFがCloudFrontに関連付けられてアクセス制御ができるようになっているはずなのでデプロイ時間の数分待ってCloudFrontを確認しに行きます。 f:id:swx-miyu-sorimachi:20220128183941p:plain

ちゃんとAWS WAFのところに作成したWAFが記載されていました~!

実際にCloudFrontのドメインにブラウザからアクセスしてみると、日本からのアクセスなのでアクセス拒否されました!! f:id:swx-miyu-sorimachi:20220128184132p:plain

追加でmanaged ruleを作成

再度AWS WAFの画面に戻ってマネージドルールの追加をしてみます。

作成したWAFの画面の「Add rule」から「Add namaged rule groups」をクリックします。 f:id:swx-miyu-sorimachi:20220128184610p:plain

AWS managed rule groupsをクリックします。 f:id:swx-miyu-sorimachi:20220128184649p:plain

今回は「Core rule set」の「Add to web ACL」を有効にして「Add rules」をクリックします。 f:id:swx-miyu-sorimachi:20220128184851p:plain f:id:swx-miyu-sorimachi:20220128184905p:plain

優先度はデフォルトで「Save」をクリックします。 f:id:swx-miyu-sorimachi:20220128184954p:plain

AWS WAFの画面にルールが追加されていることを確認します。 f:id:swx-miyu-sorimachi:20220128185049p:plain

このようにAWSが用意しているマネージドルールもあり、気軽に利用開始できるのがAWS WAFの特徴かなと感じました。

まとめ

今回はハンズオンに従ってとりあえずどんなサービスなのかコンソールからどのように作成するのか触ってみました。 シンプルに使う方法はわかりました。より深い内容のブログは今後に期待です!!