5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

terraformAdvent Calendar 2021

Day 17

CVE-2021-44228をブロックするAWS WAFをTerraformで作成する

Last updated at Posted at 2021-12-17

はじめに

こんにちは、インフラエンジニアの@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が紐づいています。

スクリーンショット 2021-12-18 044642.png

WAFにAWSManagedRulesKnownBadInputsRuleSetというマネージドルールが紐づいており
log4j周りの攻撃をブロックするルールが含まれています。

スクリーンショット 2021-12-18 044725.png

動作確認

以下のcurlコマンドを利用すると403でブロックされていることを確認できます。

curl http://${ALB_ENDPOINT} -H 'User-Agent: ${jndi' -o /dev/null -w '%{http_code}\n' -s
5
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?