【目次】
1. はじめに
2019/11/25 AWS から new AWS WAF がリリースされました。今回は何が変わったかを解説します。
第1回 : 【new AWS WAF】変更点まとめ (本記事)
第2回 : 【new AWS WAF】AWS マネジメントコンソール操作(マネージドルール編)
第3回 : 【new AWS WAF】AWS マネジメントコンソール操作(オリジナルルール編)
第4回 : 【new AWS WAF】AWS マネジメントコンソール操作(パターンセット・ルールグループ編)
第5回 : 【new AWS WAF】JSON 解説
2. 変更点
変更点は以下の通りです。
・ ネーミングが変わります
・ WAF Capacity Unit (WCU) の導入
・ マネジメントコンソールの変更
・ ルールが一部変更
・ ドキュメント形式でのルールの管理が可能
・ AWS Managed Rules (AMR) のリリース
・ マネージドルールのレベルコントロールを公式でサポート
・ネーミングが変わります
今までの AWS WAF は AWS WAF Classic となります。
new AWS WAF が AWS WAF となります。
・WAF Capacity Unit (WCU)の導入
ルールに対して処理コストがかかるイメージに変更されました。今までは10個のルール、5個の正規表現のパターンセットという形で数の制限でしたが、WCU になるとそれぞれの処理要素に対して処理コストを計上、適用する処理要素の数で計算し、その合計が Capacity を超えない範囲でルールを登録することになります。1 Web ACL あたり 1500 WCU が使用できます。AWSのサポートに制限緩和申請をすることで、制限値をあげることも可能です。
留意事項:
・ WCU となっても正規表現の数には、制限(10個)があります。
また、パターンセット内に記載できる正規表現の数も10個までの制限が存在します。
・ IP 制限について
パターンセットの形式になり、一つのパターンセット内で 10,000 IP 記載できます。
・ 文字列マッチ条件について
文字列マッチ条件で「〜で始まる」「含む」を指定していましたが、WCU の処理コストがそれぞれ異なるので、注意が必要です。
※文字列の変換処理でも処理コストが計上されるため、注意してください。
公式情報
https://docs.aws.amazon.com/waf/latest/developerguide/limits.html
制限事項
リソース | デフォルトの制限 |
リージョンごとのWeb ACL | 100 |
リージョンごとのルールグループ | 100 |
Web ACL ごとの Web ACL キャパシティユニット(WCU) | 1,500 |
ルールグループごとの WCU | 1,500 |
リージョンごとの IP セット | 100 |
リージョンごとの正規表現セット | 10 |
正規表現セットごとの一意の正規表現パターン | 10 |
Web ACL ごとのレートベースのルール | 10 |
Web ACL ごとの1秒あたりのリクエスト(Application Load Balancerにのみ適用) | 100,000 |
WCU の計算例
SQL インジェクションの条件を URL, cookie header, body の3箇所で検知しようとした場合
・ 3(検知箇所) × 20(SQL インジェクションのWCU ) = 60 WCU
・ マネージドルールは1000 WCU
両方使用した場合に合計で1060 WCU になります。この WCU 内で必要な設定を行うことになります。
ルール条件
一致ステートメント | WCU |
国別一致 | 1 |
IP セット一致 | 1 |
正規表現パターンセット | パターンセットごとに25 |
サイズ制約 | 1 |
SQLi 攻撃 | 20 |
ストリングマッチ | 一致のタイプに依存 |
XSS 攻撃 | 40 |
論理的条件
論理ステートメント | WCU |
AND ロジック | 紐づいたルールに基づく |
NOT ロジック | 紐づいたルールに基づく |
OR ロジック | 紐づいたルールに基づく |
特殊な条件
ステートメント | WCU |
レートベース | 紐づいた絞り込み条件に基づく |
マネージドルールグループ | ルールグループによって定義されます。 |
ルールグループ | ルールグループを作成するときにこれを定義します。 |
・WEB コンソールの変更
マネージドルールが重視され、マネージドルールを選びやすいコンソールになっています。ルールグループの機能が AWS Firewall Manager から AWS WAF 側へ移動しました。
コンソールの操作については次のブログで解説していきます。
・ルール設定方法が一部変更になりました
・以前のcondition部分での OR 条件が可能になりました。
例えば、国の制限で作成していたルールに該当の国以外でブラックリスト IP をプラスするようなことが可能です。
・複数のデコード処理が可能になりました。
URL デコードした後に小文字に統一するといったことが可能です。
・CIDR での表現に制限がなくなりました。
今までは以下の内容でした。
IPv4 アドレス範囲: /8、および /16 から /32 までの範囲をサポートしています。
IPv6 アドレス範囲: /24、/32、/48、/56、/64、および /128 をサポートしています。
・FieldToMatch フィールドで使用されていた項目の変更
URI は UriPath に変わりました。
・ドキュメント形式でのルールの管理が可能
様々な API を駆使してルールの更新が行われていましたが、JSON 形式での管理でWeb ACL の更新の API を実施するだけで反映が可能です。
JSON ファイルで管理すれば以前の状態に戻すことがすぐに可能です。
IP Set と Regex Set については別ファイルで管理して ARN で呼び出す形となります。
・ AWS Managed Rules (AMR) のリリース
AWS から公式のマネージドルールがリリースされました。
また、マネージドルールを複数使用することも可能になりました。
複数使用に合わせて、「 OWASP Top 10 」対応のルールや「 IP reputation list 」がリリースされました。さらに、「 WordPress 」や「 PHP 」等の限定したルールも複数リリースしています。
・マネージドルールのレベルコントロールが公式でサポート
WafCharm では、WafCharmの管理画面でAWS WAF Classicのマネージドルールに内包されているルールの BLOCK / COUNT の変更機能を提供しています。new AWS WAF では、マネージドルール内の個別ルールの変更が AWS マネジメントコンソールから可能になり、誤検知した際は、個別ルールの COUNT への変更が容易に可能となりました。
3. 気になる疑問
・旧AWS WAFはどうなるの?
AWS WAF Classic としてサービスは継続されます。引き続き WafCharm もご利用いただけます。
・AWS WAF Classic から new AWS WAF へ移行するにはどうするの?
以下の公式情報を参考に new AWS WAF へ設定を行ってください。
https://docs.aws.amazon.com/ja_jp/waf/latest/developerguide/waf-migrating-from-classic.html
4. おわりに
AWS WAF のとても大きな変更がありました。自身でルールを書く仕組みは、比較的容易ではありますが、 WCU での制限もあり、適切なルールを作成・選択することは、引き続き難しい状況かと思います。その部分を解消するためにマネージドルールを使いましょうというメッセージに見えるので、今まで使用していなかった方はマネージドルールの検討をこの機会にしてみてはいかがでしょうか。