Open5

AWS WAFについて

yo-orangeyo-orange

※一部、生成AIを活用しています。あくまで個人メモです。

AWS WAFについてメモ

AWSの基本的な知識がある方向けに、AWS WAFの設定と構成についてまとめる。

AWS WAFの概要

AWS WAFは、WebアプリケーションやAPIを保護するためのマネージドセキュリティサービスです。L7レベルでのトラフィック制御を行い、SQLインジェクションやクロスサイトスクリプティングなどの一般的な攻撃から、アプリケーション固有の脅威まで対応します。

AWS WAFの主要コンポーネント

AWS WAFは以下の主要コンポーネントで構成されています:

  1. Web ACL (Web Access Control List)
  2. ルール
  3. 条件

これらの関係性を図示すると以下のようになります:

Web ACLとルールの動作

  1. Web ACLは、CloudFront、ALB、API Gatewayなどのリソースに関連付けられます。
  2. インバウンドトラフィックは、Web ACL内のルールによって評価されます。
  3. ルールは優先順位に従って順次評価され、マッチしたルールのアクションが実行されます。
  4. すべてのルールを通過した場合、Web ACLのデフォルトアクションが適用されます。

設定のポイント

  1. Web ACLの作成

    • 保護対象のリソースごとにWeb ACLを作成します。
    • リージョンを考慮して設定します
      • CloudFrontの場合はグローバル、ALBの場合はリージョナル
  2. ルールの選択と作成

    • AWS管理ルール(マネージドルール)の利用
    • カスタムルールの作成
    • ルールグループの活用
  3. ルールの優先順位設定

    • 重要度の高いルールを上位に配置します。
    • パフォーマンスを考慮し、処理の軽いルールを先に評価することも検討します。
  4. Web ACLとリソースの関連付け

    • CloudFront、ALB、API Gatewayなどの保護対象リソースにWeb ACLを関連付けます。

注意点

  • ルール数の制限を考慮し、必要最小限のルールセットを維持します。
  • 新しい脅威に対応するため、定期的なルールの見直しと更新が重要です。
  • 本番環境への適用前に、テスト環境でのバリデーションを行い、誤検知や過剰なブロックがないか確認します。
  • ログ機能を活用し、WAFの動作とセキュリティイベントを監視します。

AWS WAFは、これらのコンポーネントと設定を通じて、柔軟かつ強力なWebアプリケーション保護を実現します。適切に構成することで、様々な脅威からアプリケーションを効果的に守ることができます。

yo-orangeyo-orange

Web ACL Capacity Unitsの考え方と、WebACLは基本的に1つのリソースに1つまで。

yo-orangeyo-orange

AWS WAF(Web Application Firewall)解説ドキュメント

調べてた内容を生成AIで仕立て直してもらったものです。ハルシネーションの可能性あり。

1. AWS WAFとは

AWS WAFは、Webアプリケーションを保護するためのマネージドセキュリティサービスです。SQL インジェクション、クロスサイトスクリプティングなどの一般的な攻撃や、アプリケーション固有の脅威からWebアプリケーションを保護します。

2. AWS WAFの主要コンポーネント

2.1 Web ACL (Web Access Control List)

  • トラフィックを制御するルールの集合体
  • CloudFront、ALB、API Gatewayなどのリソースに関連付けて使用

2.2 ルール

  • カスタムルール:ユーザーが独自に定義するルール
  • マネージドルール:AWSが提供する事前定義されたルール
  • ルールグループ:複数のルールをまとめたもの

2.3 条件

ルールの評価基準(例:IPアドレス、HTTPヘッダー、URIパスなど)

3. Web ACLキャパシティーユニット(WCU)

  • ルールの複雑さを数値化したもの
  • Web ACLの最大キャパシティは5,000 WCU
  • 基本料金には1,500 WCUまでが含まれる

4. ルールの優先順位

  • 数値が小さいほど優先度が高い
  • Web ACL内の各ルールには一意の優先度を設定する必要がある

5. カスタムルールの設定

カスタムルールでは以下の要素を対象に設定可能:

  1. HTTPヘッダー
  2. URIパス
  3. クエリ文字列
  4. リクエスト本文
  5. IPアドレス
  6. 国(地理的位置情報)
  7. リクエストサイズ

設定可能なアクション:

  • Allow:リクエストを許可
  • Block:リクエストをブロック
  • Count:リクエストをカウントのみ(ログ記録用)
  • CAPTCHA:CAPTCHAチャレンジを要求
  • Challenge:JavaScriptチャレンジを要求

6. AWS WAFの設定方法

6.1 AWS Management Console

  • 視覚的なインターフェースで直感的に設定可能
  • ルールの優先順位は自動的に割り当てられる

6.2 AWS CLI

  • コマンドラインから詳細な設定が可能
  • 複雑な条件設定も可能

例:

aws wafv2 create-rule-group \
  --name "MyRuleGroup" \
  --scope REGIONAL \
  --capacity 10 \
  --rules '[
    {
      "Name": "Rule1",
      "Priority": 1,
      "Statement": {
        "AndStatement": {
          "Statements": [
            {
              "ByteMatchStatement": {
                "SearchString": "User-Agent: Test",
                "FieldToMatch": {
                  "SingleHeader": {
                    "Name": "User-Agent"
                  }
                },
                "TextTransformations": [
                  {
                    "Priority": 0,
                    "Type": "NONE"
                  }
                ],
                "PositionalConstraint": "CONTAINS"
              }
            },
            {
              "ByteMatchStatement": {
                "SearchString": "/test/",
                "FieldToMatch": {
                  "UriPath": {}
                },
                "TextTransformations": [
                  {
                    "Priority": 0,
                    "Type": "NONE"
                  }
                ],
                "PositionalConstraint": "STARTS_WITH"
              }
            }
          ]
        }
      },
      "Action": {
        "Block": {}
      },
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "Rule1Metric"
      }
    }
  ]' \
  --visibility-config \
    SampledRequestsEnabled=true,CloudWatchMetricsEnabled=true,MetricName=MyRuleGroupMetric

6.3 Terraform

  • インフラストラクチャをコードとして管理
  • バージョン管理や自動化が容易

例:

resource "aws_wafv2_web_acl" "example" {
  name        = "example-waf-acl"
  description = "Example WAF Web ACL"
  scope       = "REGIONAL"

  default_action {
    allow {}
  }

  rule {
    name     = "IPSetRule"
    priority = 1

    action {
      block {}
    }

    statement {
      ip_set_reference_statement {
        arn = aws_wafv2_ip_set.example.arn
      }
    }

    visibility_config {
      cloudwatch_metrics_enabled = true
      metric_name                = "IPSetRuleMetric"
      sampled_requests_enabled   = true
    }
  }

  visibility_config {
    cloudwatch_metrics_enabled = true
    metric_name                = "example-waf-acl-metric"
    sampled_requests_enabled   = true
  }
}

7. ベストプラクティス

  1. マネージドルールとカスタムルールを組み合わせて使用する
  2. ルールの優先順位を適切に設定する
  3. WCU制限を考慮してルールを設計する
  4. 定期的にルールを見直し、更新する
  5. テスト環境で十分に検証してから本番環境に適用する

AWS WAFを適切に設定することで、Webアプリケーションのセキュリティを大幅に向上させることができます。