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を学びたい人にオススメ!/
