TerraformでAWS WAFに複数(大量)のBlackListIPを登録する

記事タイトルとURLをコピーする

全国のTerrafrom愛好家のみなさま、こんにちは。
技術4課岩本です。

まず、Terraformを使って、IPリストを登録する方法は以下になります。

CloudFront(Grobal)用の場合

resource "aws_waf_ipset" "ipset" {
  name = "tfIPSet"

  ip_set_descriptors {
    type  = "IPV4"
    value = "192.0.7.0/24"
  }
}

参考:aws_waf_ipset

ALB用の場合

resource "aws_wafregional_ipset" "ipset" {
  name = "tfIPSet"
  ip_set_descriptor {
    type = "IPV4"
    value = "192.0.7.0/24"
  }
}
  • CloudFront(Grobal)の際はip_set_descriptors、ALB用の場合はip_set_descriptor点に注意ください
  • ALB用はproviderセクションで指定したregionに作成されます。

参考:aws_wafregional_ipset

複数のIPリストを登録する。

ファイル

  • aws-waf.tf
variable "blacklist" {
  type = "list"
}

resource "aws_wafregional_ipset" "ipset" {
  name              = "Block-List2"
  ip_set_descriptor = "${ var.blacklist }"
}
  • blacklist.tfvars
blacklist = [
{ "value" = "111.222.333.111/32" type = "IPV4" },
{ "value" = "111.222.333.112/32" type = "IPV4" },
{ "value" = "111.222.333.113/32" type = "IPV4" },
{ "value" = "111.222.333.114/32" type = "IPV4" },
....snip....
]

コマンド

$ terraform plan -var-file=blacklist.tfvars

解説

ip_set_descriptor にて、定義した変数blacklistを読み込んでいます。
変数blacklistは、明示的に定義しないとMAP形式として自動的に認識されます。
ただしip_set_descriptorはでは、LIST形式の入力を求められます。
そこで、type = "list"として、明示的にLIST形式で宣言をしています。
IPリストは、外部ファイルとして切り出し、コマンドオプション-var-file=blacklist.tfvarsとして実行時に読み込むようにしました。
IPリストが大量にあり、Terraform内で利用する他の変数値との混同を避けるためです。

AWS WAFに大量のIPを登録される方、ぜひお試しください。