🔎

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の設定より小さくします。

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

今回使用したコード

https://github.com/na8esin/terragrunt-sample/commit/0292ce2d964539696cc8d79d388b565b4f6bc386

しくみのテックブログ

Discussion