🔎
Regex pattern setsで否定先読みが使えない
概要
wafのip制限を特定のパスでかけたくない場合にRegex pattern setsで否定先読みが使えない
内容
例えば、/aaa から始まるパスを含まない正規表現は^(?!\/aaa).*$のようになると思いますが下記の画像のようにエラーになります。

(?!の部分がダメみたいです。
terraformを実行すると、さらにエラーになっている箇所を狭めて教えてくれます。
resource "aws_wafv2_regex_pattern_set" "example" {
name = "example"
description = "Example regex pattern set"
scope = "CLOUDFRONT"
regular_expression {
regex_string = "^(?!\\/aaa).*$" # terraform内ではバックスラッシュ2つ必要
}
tags = {
Tag1 = "watanabe"
}
}
"regular_expression.0.regex_string": error parsing regexp: invalid or unsupported Perl syntax: `(?!`
(?!の部分がダメそうです。
それならどうするのか?
自分の調べたところによると、Web ACLのルールに直接追加すればOKでした。
IPアドレスによる許可設定がすでにある状態で、下記のようなルールを追加して、PriorityをIPの設定より小さくします。

特定のパスだけをルールから除外する設定は難しいので、逆に特定のパスは許可してしまおうという発想でした。
今回使用したコード
Discussion