[アップデート] Amazon CloudFront の AWS WAF 有効化機能で、構成やアクセス履歴に基づいて追加設定の推奨事項が表示されるようになりました

2023.09.28

いわさです。

数ヶ月前のアップデートで Amazon CloudFront のコンソール上で AWS WAF を有効化する機能が追加されています。

本日のアップデートでこちらの機能が拡張され、追加のセキュリティ設定を推奨してくれるようになりました。

何か推奨事項が表示されるようだが、使い勝手がよくわからないなと思ったので実際に検証してみましたので紹介したいと思います。

先にまとめ

  • オリジンタイプやパスパターンなどのディストリビューション構成に応じて、CloudFront の WAF 有効化画面にて追加をルールを推奨してくれる
  • レートリミットは実際のアクセス履歴に応じて超過しているかどうか教えてくれるので、レートリミットの上限調整やブロック設定の判断が出来る

検証内容

まず、ALB - EC2 (Apache) な適当な Web アプリケーションをデプロイしておきます。

デプロイが完了したら、パブリックアクセスが出来るか確認します。

% curl http://hoge-web-alb-420199122.ap-northeast-1.elb.amazonaws.com
hoge

はい。良さそうですね。
この Web アプリケーションをオリジンに CloudFront を構成してみたいと思います。

Amazon CloudFront でディストリビューション構成時に推奨事項が表示される

とりあえずオリジンドメインだけ指定して、後は適当な設定で進めてみましょう。

AWS WAF を有効化する箇所にて「セキュリティ保護を有効にする」を ON にします。
そうすると、次のように追加で SQL protections と Rate limiting を有効化してはどうかと推奨事項が表示されました。デフォルトは未選択の状態です。

Rate limiting の場合はレートリミットのしきい値を設定します。

この状態でディストリビューションを作成すると、自動で WebACL が作成されディストリビューションにアタッチされるのですが、従来の 3 つのルールに加えて次の 2 のルールが追加されていることが確認出来ました。

ディストリビューションの詳細画面でも推奨オプションが表示されて有効化されているかどうかが確認出来ますね。以下はオプションを有効化していない場合の表示です。

オリジンタイプごとに推奨事項が異なるようだ

色々なパターンを試している中で、S3 静的ホスティングをオリジンに指定したところ追加のオプションが表示されないことに気がつきました。

何もオプションが表示されない。

いくつか確認してみたところ、どうやらオリジンタイプによって推奨事項が決まっているようなので、確認した内容を紹介します。

オリジンタイプ:ELB

最初に試したパターンですが、オリジンに ELB を指定した場合です。

この場合は Core protections に加えて、SQL protections と Rate limiting が推奨されています。

オリジンタイプ:S3 Static Website

次に試した S3 静的ホスティングの場合です。

この場合は Core protections のみが推奨されています。

オリジンタイプ:Lambda 関数 URL

Lambda 関数 URL を有効化してオリジンに指定した場合です。

この場合も Core protections のみとなりました。
これは動的なのでもうちょっと推奨事項出してくれても良い気もします。

オリジンタイプ:API Gateway

リージョナルな API Gateway をオリジンに指定した場合です。

この場合は Core protections に加えて、SQL protections と Rate limiting が推奨されています。

オリジンタイプ:カスタムオリジン

最後に、適当な外部ドメインを指定した場合です。この場合は CloudFront 上はカスタムオリジンとして認識されています。

この場合も API Gateway や ELB と同様に追加の推奨事項が表示されていますね。

パスパターンによっても推奨事項が変化するようだ

次に、アップデートアナウンスに記載されているように WordPress の場合も確認してみます。
コンテンツはキャッシュさせつつ、wp-adminはキャッシュさせないような動作をよく行うと思います。

その場合を想定して次のように/wp-admin/*パスパターンのビヘイビアを追加してみました。

すると、 SQL protections が表示されずに、新たに WordPress protections が表示されました。

WAF の構成画面でも SQL protections は表示されずに WordPress protections が選択出来る状態になっています。

アクセス履歴に基づいてレートリミットの推奨事項を表示してくれる

ここまではディストリビューションの設定内容に応じて推奨事項を表示してくれているように思えますが、レートリミットについてはどうやら実際のアクセス履歴に基づいて追加の情報を表示してくれるようです。

前提として先程のオプションで Rate limiting を有効化しています。

そうするとディストリビューション詳細画面の AWS WAF の確認エリアに次のように Monitor mode に関するツールチップが表示されます。
レートリミットが 100 に設定されているが超過はしていないという点と、カウントモードになっているのでブロックモードにここから変更出来るようです。

レートリミットを超過させてみると

ここで、レートリミットを超過させてみます。なんでも良いのですが Apache Benchmark で 150 回アクセスさせてみました。

% ab -n 150 -c 1 http://di79lgfvvgomh.cloudfront.net/
This is ApacheBench, Version 2.3 <$Revision: 1903618 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking di79lgfvvgomh.cloudfront.net (be patient).....done


Server Software:        Apache/2.4.57
Server Hostname:        di79lgfvvgomh.cloudfront.net
Server Port:            80

Document Path:          /
Document Length:        5 bytes

Concurrency Level:      1
Time taken for tests:   9.479 seconds
Complete requests:      150
Failed requests:        0
Total transferred:      69600 bytes
HTML transferred:       750 bytes
Requests per second:    15.82 [#/sec] (mean)
Time per request:       63.191 [ms] (mean)
Time per request:       63.191 [ms] (mean, across all concurrent requests)
Transfer rate:          7.17 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       25   30   2.5     30      36
Processing:    27   33   3.1     33      44
Waiting:       27   33   3.1     33      44
Total:         53   63   4.6     63      75

Percentage of the requests served within a certain time (ms)
  50%     63
  66%     65
  75%     67
  80%     67
  90%     69
  95%     71
  98%     73
  99%     74
 100%     75 (longest request)

少し待ってみると次のようにコンソール上の表示が変わりました。

ツールチップを確認してみると、直近に超過していて、どの程度アクセスがあったのか確認出来るようになっています。

また、この実績を踏まえてレートリミット値を調整するか、あるいはブロックモードに変更させるかを判断出来るようになっていますね。これはかなり使いやすくていいですね。

さいごに

本日は Amazon CloudFront の AWS WAF 有効化機能で、構成やアクセス履歴に基づいて追加設定の推奨事項が表示されるようになったので確認してみました。

これまでは固定のルールだったのですが、オリジンの内容に応じて従来よりも適切なルールを自動設定することが出来るようになりました。
AWS WAF のルール決めは最初迷うところなのでこういった推奨事項表示してくれるのはかなり良いのではないでしょうか。

また、レートリミットについては実際の超過状況を確認しながら調整やブロック設定の判断が出来るので、これはかなり使いやすそうですね。