株式会社サーバーワークスでは一緒に働く仲間を募集しています
全国のTerrafrom愛好家のみなさま、こんにちは。
技術4課岩本です。
まず、Terraformを使って、IPリストを登録する方法は以下になります。
CloudFront(Grobal)用の場合
resource "aws_waf_ipset" "ipset" {
name = "tfIPSet"
ip_set_descriptors {
type = "IPV4"
value = "192.0.7.0/24"
}
}
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
に作成されます。
複数の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を登録される方、ぜひお試しください