TerraformでALBにAWS WAFv2を適用する。
ALB
適用対象のALB。
詳細は省略。
aws_lb
リソースについては公式ドキュメント
を参照。
resource "aws_lb" "example" {
name = "example-alb"
load_balancer_type = "application"
internal = false
idle_timeout = 3600
enable_deletion_protection = true
(省略)
}
WAF
WAFを作成する。
resource "aws_wafv2_web_acl" "example" {
name = "example-waf"
description = "Example WAF"
scope = "REGIONAL"
default_action {
allow {}
}
rule {
name = "core-rule-set"
priority = 101
override_action {
count {}
}
statement {
managed_rule_group_statement {
name = "AWSManagedRulesCommonRuleSet"
vendor_name = "AWS"
}
}
visibility_config {
cloudwatch_metrics_enabled = true
metric_name = "core-rule-set-rule-metric"
sampled_requests_enabled = true
}
}
rule {
...
}
rule {
...
}
visibility_config {
cloudwatch_metrics_enabled = false
metric_name = "waf-web-acl-metric"
sampled_requests_enabled = false
}
}
default_actionブロック
allow
かblock
を指定する。
どのルールにも一致しない場合に実行するデフォルトアクションを設定し、
allow
の場合はリクエストを通し、block
の場合はリクエストを止めるする。
ruleブロック
WAFのルールを設定する。
複数のルールを記述する場合はrule
ブロックを並べる。
resource "aws_wafv2_web_acl" "example" {
...
rule {
...
}
rule {
...
}
rule {
...
}
...
}
priority
はルールの優先度を指定する。
複数のルールを設定している場合にpriority
が小さいほど優先される。
statement
ブロックにはリクエストを処理するための条件を指定する。managed_rule_group_statement
はAWSが提供するルールセットを指定する。
その他、カスタムルールを指定できるrule_group_reference_statement
、複数条件を指定できるand_statement
やor_statement
などがある。
詳細はドキュメントを参照
。
visibility_configブロック
CloudWatchメトリクスの有効化設定とWebリクエストのサンプル収集の有効化設定。
ALBにAWS WAFを適用する
上記で作成したWAFをALBに適用するにはaws_wafv2_web_acl_association
リソースを使用する。
resource "aws_wafv2_web_acl_association" "example" {
resource_arn = aws_lb.example.arn # 適用対象のALB
web_acl_arn = aws_wafv2_web_acl.example.arn # 上記で作成したWAF
}
\手を動かしながらTerraformを学びたい人にオススメ!/