初めに
オークファンのライです。
一年ぶりの記事ですね!
この時期は、AWSがre:Inventを開催し、いろいろ新機能を発表し、記事を読むだけで一日終わりますねw
その中に、WAFに大きなアップデートがあり、AWS WAFはv2になりました。
早速WAFv2をやってみます
今回は 特定のパスにアクセスできるIPを制限してみる
作ってみる
IP set
- IPを登録して作成する
- CIDR何個も登録した場合は、改行区切りで書く
Rule Group
- ルールはあとに作成するので、一旦パス
- キャパシティはとりあえず
100
にした- ※ 注意、あとに変更できない
- ルールがまだ作ってないので、すきっぷ
- 作成する
Rule
- このルールのキャパシティは
3
ですね
- また試しにもう一個条件入れてみる
-
Query
がtest
が入るとブロックする条件を追加する
-
- 現在のブロック条件は
指定したIPかつパスが/testかつQueryがtest
入るリクエストですね
- キャパシティが
13
になった- 計算式が不明
ACL
アクセスしてみる
-
http://{ALB_HOST}/
にアクセス -
http://{ALB_HOST}/test?test=1
にアクセスすると -
次は本番の
特定のパスにアクセスできるIPを制限してみる
特定のパスにアクセスできるIPを制限してみる
-
えっ、ちょっと待って、
AND
Statementと併用できない- これで特定のパスだけ、特定のIPしかアクセスできないことを設定できない
-
この場合、現在はJsonで自分が書くしかないみたい
- 右上の
Rule JSON editor
をクリックする
- 右上の
- https://docs.aws.amazon.com/waf/latest/APIReference/API_CheckCapacity.html#API_CheckCapacity_RequestSyntax
- IPsetのARNはどこにも記載していない。。。
- 自分でなんとなく指定するしかない
- ちなみに、IPsetのページで
IPset ID
を確認することができる
- ちなみに、IPsetのページで
arn:aws:wafv2:ap-northeast-1:{AWSのアカウントID}:regional/ipset/{IPset Name}/{IPset ID}
- 自分でなんとなく指定するしかない
{
"Name": "test-rule2",
"Priority": 0,
"Statement": {
"AndStatement": {
"Statements": [
{
"NotStatement": {
"Statement": {
"IPSetReferenceStatement": {
"ARN": "arn:aws:wafv2:ap-northeast-1:{AWSのアカウントID}:regional/ipset/{IPset Name}/{IPset ID}"
}
}
}
},
{
"ByteMatchStatement": {
"SearchString": "/test2",
"FieldToMatch": {
"UriPath": {}
},
"PositionalConstraint": "STARTS_WITH",
"TextTransformations": [
{
"Priority": 0,
"Type": "NONE"
}
]
}
}
]
}
},
"Action": {
"Block": {}
},
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "test-rule2"
}
}
- 保存して終了
-
test-rule2
が作成できました-
test-rule2
を選択し、Edit
をクリックして修正画面に入る
-
- 何故か
"SearchString": "/test2"
のところが、勝手にBuffer
に変更されている
- とりあえず、テストしてみよう。。。
アクセスしてみる
-
指定したIPで
http://{ALB_HOST}/test2
にアクセス -
他のIPで
http://{ALB_HOST}/test2
にアクセス- ブロックされた
-
Buffer
に変更されましたが、一応ブロックしてますね
-
- ブロックされた
最後に
ACLごとのルールの数が緩和され、AWSマネージドルールグループも使えるWAFv2ですが、色々設定が便利になった反面、使いにくくなったところもありますね。
特に以下数点気になる事があります
- ルールグループやACL内にしかルールを定義できない
- ルールを使い回す事ができない
- ルールグループのキャパシティが変更できない
- 簡単に変更できるのも問題になるけどね
- GUIで簡単に複雑なルール条件を作ることができない
- Json Editorの利用が必要
- WAFv2のJson Editorで作成したルールの中身を勝手に変更される
- 正直、使いにくい
- 日本語のドキュメントが整っていない
現在はまだ使い勝手が悪いですが、
いつか上記のことを更新で改善されたら、今の旧WAFのACLをWAFv2に移行しようと思います