はじめに
こんにちは、インフラエンジニアの@yktr_sreです。
この記事はterraform Advent Calendar 2021の17日目の記事です。
先日 CVE-2021-44228としてJavaベースのロギングライブラリである「Apache Log4j」に深刻な脆弱性が発表されました。
CVSSのスコアでも10.0と非常にクリティカルなものになっており
脆弱性の対象になっているライブラリを利用している場合は対策が必須となっています。
具体的な対策手法は今回の本筋から外れるので省きますが
AWS WAFにて当該の脆弱性を狙った攻撃をブロックするルールが提供されています。
今回はWAFの作成からALBに紐づけるところまでTerraformで構築します。
コード
wafv2
resource "aws_wafv2_web_acl" "example" {
name = "waf-acl-example"
description = "WAF ACL for log4j"
scope = "REGIONAL"
default_action {
allow {}
}
rule {
name = "rule-log4j"
priority = 1
override_action {
count {}
}
statement {
managed_rule_group_statement {
name = "AWSManagedRulesKnownBadInputsRuleSet"
vendor_name = "AWS"
}
}
visibility_config {
cloudwatch_metrics_enabled = true
metric_name = "AWSManagedRulesKnownBadInputsRuleSet-metrics"
sampled_requests_enabled = true
}
}
visibility_config {
cloudwatch_metrics_enabled = true
metric_name = "metric-example"
sampled_requests_enabled = true
}
}
resource "aws_wafv2_web_acl_association" "example" {
resource_arn = aws_lb.example.arn
web_acl_arn = aws_wafv2_web_acl.example.arn
}
ALB
resource "aws_lb" "example" {
internal = false
subnets = ["subnet-XXXXXXXX", "subnet-XXXXXXXX"]
security_groups = ["default"]
}
resource "aws_lb_listener" "example" {
load_balancer_arn = aws_lb.example.arn
port = "80"
protocol = "HTTP"
default_action {
type = "forward"
target_group_arn = aws_lb_target_group.example.arn
}
}
resource "aws_lb_target_group" "example" {
name = "example-lb-tg"
port = 80
protocol = "HTTP"
vpc_id = "vpc-XXXXXXXX"
}
設定確認
ALBにWAFが紐づいています。
WAFにAWSManagedRulesKnownBadInputsRuleSetというマネージドルールが紐づいており
log4j周りの攻撃をブロックするルールが含まれています。
動作確認
以下のcurlコマンドを利用すると403でブロックされていることを確認できます。
curl http://${ALB_ENDPOINT} -H 'User-Agent: ${jndi' -o /dev/null -w '%{http_code}\n' -s