AWS WAF のログを収集する

以下でサポートされています。

このドキュメントでは、Google Security Operations フィードを設定して AWS ウェブ アプリケーション ファイアウォール(WAF)のログを収集する方法について説明します。パーサーは、未加工の JSON 形式のログを Google SecOps UDM に準拠した構造化形式に変換します。IP アドレス、URL、ユーザー エージェント、セキュリティ ルールの詳細などのフィールドを抽出し、対応する UDM フィールドにマッピングして、一貫した表現と分析を実現します。

始める前に

*次の前提条件を満たしていることを確認します。

  • Google SecOps インスタンス
  • AWS への特権アクセス

Amazon S3 バケットを構成する

  1. バケットの作成のユーザーガイドに沿って、Amazon S3 バケットを作成します。
  2. 後で使用するために、バケットの名前リージョンを保存します。
  3. IAM ユーザーの作成のユーザーガイドに沿って、ユーザーを作成します。
  4. 作成した [ユーザー] を選択します。
  5. [セキュリティ認証情報] タブを選択します。
  6. [アクセスキー] セクションで [アクセスキーを作成] をクリックします。
  7. [ユースケース] として [サードパーティ サービス] を選択します。
  8. [次へ] をクリックします。
  9. 省略可: 説明タグを追加します。
  10. [アクセスキーを作成] をクリックします。
  11. [CSV ファイルをダウンロード] をクリックして、[アクセスキー] と [シークレット アクセスキー] を保存し、後で使用できるようにします。
  12. [完了] をクリックします。
  13. [権限] タブを選択します。
  14. [権限ポリシー] セクションで、[権限を追加] をクリックします。
  15. [権限を追加] を選択します。
  16. [ポリシーを直接アタッチする] を選択します。
  17. AmazonS3FullAccess ポリシーを検索して選択します。
  18. [次へ] をクリックします。
  19. [権限を追加] をクリックします。

WAF ウェブ ACL(アクセス制御リスト)を作成する

AWS WAF をまだ設定していない場合は、WAF ウェブ ACL(アクセス制御リスト)を作成する必要があります。既存のセットアップの場合は、次の手順に進んでください。

  1. AWS コンソールで [AWS WAF & Shield] を検索して選択します。
  2. [ウェブ ACL を作成] をクリックします。
  3. 次の設定を指定します。
    • 名前: ACL に名前を付けます(例: my-waf-web-acl)。
    • リージョン: WAF を適用するリージョンを選択します。
    • CloudWatch メトリクス: 指標の収集を有効にして、アクティビティとトリガーされたルールを追跡します。
  4. 作成したら、ロギングを有効にするウェブ ACL を選択します。

AWS WAF ロギングを構成する方法

  1. AWS WAF コンソールで、ウェブ ACL の [ロギング] タブに移動します。
  2. [ロギングを有効にする] をクリックします。
  3. ログの宛先として [Amazon S3] を選択します。
  4. ログの保存先として、以前に作成した S3 バケットを選択します。
  5. 省略可: ログを整理するためのログ接頭辞(waf-logs/ など)を構成します。
  6. [保存] をクリックします。

S3 バケットの権限を確認する

AWS WAF がログを書き込むための適切な権限が S3 バケットに付与されていることを確認します。

  1. S3 コンソールに移動します。
  2. ログを保存するバケットを選択します。
  3. [権限] タブで、次のバケット ポリシーを追加して、AWS WAF がログを書き込めるようにします。

    {
      "Version": "2012-10-17",
      "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
                "Service": "wafv2.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::your-log-bucket-name/*"
          }
      ]
    }
    
  1. [保存] をクリックします。

フィードを設定する

Google SecOps プラットフォームでフィードを設定するには、次の 2 つのエントリ ポイントがあります。

  • [SIEM 設定] > [フィード]
  • [Content Hub] > [Content Packs]

[SIEM 設定] > [フィード] でフィードを設定する

このプロダクト ファミリー内で異なるログタイプに複数のフィードを構成するには、複数のフィードを構成するをご覧ください。

1 つのフィードを設定する手順は次のとおりです。

  1. [SIEM 設定] > [フィード] に移動します。
  2. [Add New Feed] をクリックします。
  3. 次のページで、[単一フィードを設定] をクリックします。
  4. [フィード名] フィールドに、フィードの名前を入力します(例: AWS WAF ログ)。
  5. [ソースタイプ] として [Amazon S3] を選択します。
  6. [ログタイプ] として [AWS WAF] を選択します。
  7. [次へ] をクリックします。
  8. 次の入力パラメータの値を指定します。

    • リージョン: Amazon S3 バケットが配置されているリージョン。
    • S3 URI: バケット URI。
      • s3://your-log-bucket-name/waf-logs/
        • 次のように置き換えます。
          • your-log-bucket-name: バケットの実際の名前。
    • URI is a: [ディレクトリ] または [サブディレクトリを含むディレクトリ] を選択します。
    • Source deletion options: 取り込みの設定に応じて削除オプションを選択します。
    • アクセスキー ID: S3 バケットから読み取る権限を持つユーザーのアクセスキー。

    • シークレット アクセスキー: S3 バケットから読み取る権限を持つユーザーのシークレット キー。

    • アセットの名前空間: アセットの名前空間

    • Ingestion labels: このフィードのイベントに適用されるラベル。

  9. [次へ] をクリックします。

  10. [Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。

コンテンツ ハブからフィードを設定する

次のフィールドに値を指定します。

  • リージョン: Amazon S3 バケットが配置されているリージョン。
  • S3 URI: バケット URI。
    • s3://your-log-bucket-name/
      • your-log-bucket-name は、実際の S3 バケットの名前に置き換えます。
  • URI is a: バケット構造に応じて、[ディレクトリ] または [サブディレクトリを含むディレクトリ] を選択します。
  • Source deletion options: 取り込みの設定に応じて削除オプションを選択します。
  • アクセスキー ID: S3 バケットから読み取る権限を持つユーザーのアクセスキー。

  • シークレット アクセスキー: S3 バケットから読み取る権限を持つユーザーのシークレット キー。

詳細オプション

  • フィード名: フィードを識別する事前入力された値。
  • ソースタイプ: Google SecOps にログを収集するために使用される方法。
  • Asset Namespace: フィードに関連付けられた名前空間
  • Ingestion Labels: このフィードのすべてのイベントに適用されるラベル。

UDM マッピング テーブル

ログフィールド UDM マッピング ロジック
アクション security_result.action アクションが ALLOW の場合は、security_result.action を ALLOW に、security_result.severity を INFORMATIONAL に設定します。アクションが BLOCK の場合、security_result.action を BLOCK に設定します。アクションが CAPTCHA で、captchaResponse.responseCode が 405 の場合、security_result.action を BLOCK に設定し、security_result.action_details を「CAPTCHA {captchaResponse.failureReason}」に設定します。
captchaResponse.failureReason security_result.action_details action および captchaResponse.responseCode と組み合わせて使用され、security_result.action_details を決定します。
captchaResponse.responseCode security_result.action_details action と captchaResponse.failureReason と組み合わせて使用して、security_result.action_details を決定します。
httpRequest.clientIp principal.ip、principal.asset.ip principal.ip と principal.asset.ip に直接マッピングされます。
httpRequest.headers target.hostname、target.asset.hostname、network.http.user_agent、network.http.parsed_user_agent、network.http.referral_url、target.location.country_or_region、target.resource.attribute.labels、target.user.userid httpRequest.headers の各ヘッダーを反復処理します。ヘッダー名が「host」または「Host」の場合、値は target.hostname と target.asset.hostname にマッピングされます。ヘッダー名が「User-Agent」または「user-agent」の場合、値は network.http.user_agent にマッピングされ、network.http.parsed_user_agent に解析されます。ヘッダー名が「Referer」または「referer」の場合、値は network.http.referral_url にマッピングされます。ヘッダー名が「(?i)time-zone」の場合、値は target.location.country_or_region にマッピングされます。ヘッダー名が「authorization」の場合、値がデコードされ、ユーザー名が抽出されて target.user.userid にマッピングされます。他のすべてのヘッダーは、Key-Value ペアとして target.resource.attribute.labels に追加されます。
httpRequest.httpMethod network.http.method network.http.method に直接マッピングされます。
httpRequest.requestId network.session_id network.session_id に直接マッピングされます。
httpRequest.uri target.url target.url に直接マッピングされます。
httpSourceId target.resource.name target.resource.name に直接マッピングされます。
httpSourceName metadata.product_event_type metadata.product_event_type に直接マッピングされます。
ラベル security_result.rule_labels labels 内の各ラベルを反復処理します。ラベル名が空でない場合は、Key-Value ペアとして security_result.rule_labels に追加されます。
nonTerminatingMatchingRules security_result.action_details、security_result.rule_labels nonTerminatingMatchingRules の各ルールを反復処理します。アクションが ALLOW で、ルール アクションが CAPTCHA の場合、security_result.action_details を「CAPTCHA SUCCESSFUL」に設定し、キー「nonTerminatingCaptchaRuleName」を使用してルール ID を security_result.rule_labels に追加します。アクションが BLOCK または ALLOW で、ルール アクションが COUNT の場合、security_result.action_details を「COUNT RULE」に設定し、キー「nonTerminatingCountRuleName」を使用してルール ID を security_result.rule_labels に追加します。アクションが BLOCK または ALLOW で、ルール アクションが CHALLENGE の場合、security_result.action_details を「COUNT RULE」に設定し、キー「nonTerminatingChallengeRuleName」を使用してルール ID を security_result.rule_labels に追加します。
rateBasedRuleList security_result.rule_id、security_result.rule_name、security_result.description terminatingRuleType が「RATE_BASED」の場合、rateBasedRuleList の各ルールを反復処理します。terminatingRuleId がルール名と一致する場合、ルール ID、ルール名、説明はそれぞれ security_result.rule_id、security_result.rule_name、security_result.description にマッピングされます。
responseCodeSent network.http.response_code network.http.response_code に直接マッピングされ、整数に変換されます。
ruleGroupList intermediary.labels、security_result.rule_id、security_result.rule_name、security_result.description、security_result.detection_fields ruleGroupList の各ルールグループを反復処理します。ルールグループ ID は、Key-Value ペアとして intermediary.labels に追加されます。terminatingRuleType が「MANAGED_RULE_GROUP」で、terminatingRuleId がルールグループ ID と一致する場合、ルール ID、ルール名、説明はそれぞれ security_result.rule_id、security_result.rule_name、security_result.description にマッピングされます。terminatingRuleType が「GROUP」の場合、終了ルールの ID が抽出され、security_result.rule_name と security_result.description にマッピングされます。終了ルールグループ ID は、キー「terminatingRuleGroupName」とともに security_result.rule_labels に追加されます。terminatingRuleType が「REGULAR」の場合、終了ルールの action が抽出され、キー「terminatingRuleAction{index}」を使用して security_result.detection_fields に追加されます。
terminatingRuleId security_result.rule_id、security_result.rule_name、security_result.description terminatingRuleType が「RATE_BASED」、「MANAGED_RULE_GROUP」、「REGULAR」の場合、terminatingRuleId は security_result.rule_id と security_result.rule_name にマッピングされ、security_result.description の構築に使用されます。
terminatingRuleMatchDetails security_result.description、security_result.category_details、security_result.detection_fields terminatingRuleMatchDetails の各一致を反復処理します。security_result.description を「Terminating Rule」に設定します。条件タイプが空でない場合は、security_result.category_details に追加されます。ロケーションが空でない場合は、キー「location」を使用して security_result.detection_fields に追加されます。一致したデータ要素ごとに、キー「matchedData」を使用して security_result.detection_fields に追加されます。
terminatingRuleType security_result.rule_type security_result.rule_type に直接マッピングされます。
timestamp metadata.event_timestamp タイムスタンプに変換され、metadata.event_timestamp にマッピングされます。
webaclId intermediary.resource.name intermediary.resource.name に直接マッピングされます。
metadata.vendor_name 「AMAZON」に設定します。
metadata.product_name 「AWS Web Application Firewall」に設定します。
metadata.log_type 「AWS_WAF」に設定します。
network.application_protocol 「HTTP」に設定します。
metadata.event_type httpRequest.headers に「host」または「Host」ヘッダーが含まれている場合は、「NETWORK_HTTP」に設定されます。それ以外の場合は、「STATUS_UPDATE」に設定します。

さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。