Back

WAFログ連携(旧方式)の設定方法 (AWS WAF Classic)

AWS WAF ClassicOld PlanLegacyUsage

概要

WAFログ連携(旧方式、AWS WAF Classic向け)の設定方法について説明します。

旧方式では、以下の方法で設定します。

  • Amazon Data Firehoseを経由してS3バケットにWAFログを出力する方法

事前準備

旧方式で設定を行う場合、AWSマネージメントコンソール上でIAMロールを作成したり、Lambdaの設定を行ったりする必要があります。

そのため、お客様のAWSマネージメントコンソール上で、上記のような操作をできる権限を持っている必要があります。

基本的には、以下の権限があれば設定を進める上で問題は発生いたしません。

  • AWSLambda_FullAccess
  • IAMFullAccess
  • CloudWatchFullAccess
  • AmazonKinesisFullAccess

手順

ご利用までの流れ

アーキテクチャ概要は以下の通りです。

お客様のAWS環境にて、AWS WAFからAmazon Data Firehoseを経由してS3へログ転送を行います。

S3バケットにWAFログが出力されたことをトリガー(S3 putObject Event Trigger)に、Lambdaにてスクリプトが実行されます。

WafCharmへデータが渡り、月次レポートについては追加の設定をせずとも毎月月初に作成される月次レポートを閲覧できます。

WafCharmコンソールにてWafCharmルールのメールによる検知通知の設定を行うと、検知通知機能をご利用いただけます。WafCharmとCSCのManaged Rulesを併用されている場合、CSCマネージドルールの検知通知設定を行うとCSCマネージドルールで検知した際のメール通知機能もご利用いただけます。

Amazon Data Firehoseを設定する

  1. AWSマネージメントコンソールにログインする
  2. Amazon Data Firehoseを使用する予定のWeb ACLと同じリージョンに移動する

    CloudFrontをご利用の場合は、バージニアを選択します。

  3. [Amazon Data Firehose] を開く
  4. [Create Firehose stream] をクリックする
  5. [Choose source and destination] にて、以下の項目を設定をする
    • Source: Direct PUT
    • Destination: Amazon S3
    • Firehose stream name: [aws-waf-logs-] から始まる名前を入力する

      AWSの仕様上、名前の先頭に [aws-waf-logs-] とつける必要があります。

    • S3 bucket: 任意のS3バケットを指定(例:csc-waftest)
    • S3 bucket prefix(任意): プレフィックスを指定(例:waflog/)

      プレフィックスをつける場合、必ず末尾にスラッシュを記載します。

    • S3 bucket and S3 error output prefix time zone: UTC

      正常に動作しない可能性がございますので、必ずUTCのままにしてください。

    • Buffer size: 推奨は 5 MB

      Buffer interval: 推奨は 60 seconds

      ※Buffer intervals、またはBuffer size に達した時点で S3 にログが作成されます

    • Compression for data records: GZIP
  6. Service access(IAMロール)の作成あるいは既存のものを選択する
  7. [Create Firehose stream] をクリックする

AWS WAFにてWAFログを出力する

  1. AWS WAF ClassicからWeb ACLsの一覧を開く
  2. 対象のWeb ACLを開く
  3. [Logging] をクリックする
  4. [Enable Logging] をクリックする
  5. [Amazon Kinesis Data Firehose] にて先ほど作成したData Firehoseを選択する
  6. [Create] をクリックする
  7. 対象のリソースにアクセスし、WAFログが当該S3バケットに出力されるか確認する
  8. S3バケットを開き、WAFログが出力されるパスを確認する

    以下のようなフォーマットになります。この情報は後ほど使用します。

    csc-waftest/waflog/

    S3バケット名とプレフィックス(あるいはその有無)は、上記手順での設定内容によって値が変わります。

Lambdaで使用するIAMポリシーとロールを作成する

以下の3つを作成します。

  • お客様のS3バケットに対するRead権限
  • WafCharmのS3バケットにWAFログを転送するためのPut権限
  • Lambdaで使用するための上記を含めたIAMロール
  1. IAMを開く
  2. お客様のS3バケットに対するRead権限を作成する
    1. [Policies] を開き、 [Create policy] をクリックする
    2. 以下の項目を設定する
      • Service: S3
      • Action: GetObject
      • Resources: arn:aws:s3:::csc-waftest/waflog/*

        先ほど設定したS3バケットのパスを記載します。Resources に指定するパスの末尾には必ず /* とつける必要があります。

    3. Review policyの画面に進んだら、ポリシーの名前と説明(任意)を入力する

      名前はどのような値でも問題ありません。

      例:wafcharm-waflog-s3-read

  3. WafCharmのS3バケットにWAFログを転送するためのPut権限を作成する
    1. [Policies] を開き、 [Create policy] をクリックする
    2. 以下の項目を設定する
      • Service: S3
      • Action: PutObject, PutObjectACL
      • Resources: arn:aws:s3:::wafcharm.com/*

        WafCharmのS3バケットを指定し、WAFログを転送できるようにします。 Resources に指定するパスの末尾には必ず /* とつける必要があります。

    3. Review policyの画面に進んだら、ポリシーの名前と説明(任意)を入力する

      名前はどのような値でも問題ありません。

      例:wafcharm-waflog-s3-put

  4. Lambda用のIAMロールを作成する
    1. [Roles] を開き、 [Create role] をクリックする
    2. [Use case] にて [Lambda] を選択する
    3. [Permissions policies] にて以下のポリシーを検索し、チェックして追加する
      • AWSLambdaExecute
      • 上記で作成したRead権限(例:wafcharm-waflog-s3-read)
      • 上記で作成したPut権限(例:wafcharm-waflog-s3-put)
    4. 次の画面に進み、ロール名と説明(任意)を入力する

      名前はどのような値でも問題ありません。

      例:wafcharm-waflog

Lambdaの設定を行う

  1. S3バケットを作成したリージョンに移動する
  2. Lambdaを開く
  3. [Create function] をクリックする
  4. [Function name] を入力する

    名前はどのような値でも問題ありません。

    例:wafcharm-waflog

  5. 以下の項目を設定する

    Runtime: Node.js 22.x

    Execution Role: Use an existing role

    Existing role: 先ほど作成したIAMロール(例:wafcharm-waflog)

  6. [Create function] をクリックする
  7. [Code source] 以下のエディタに、以下のindex.mjsを貼り付ける

    index.mjs

  8. AWS WAF v2とは使用する内容が異なりますので、ご注意ください。
  9. [Deploy] ボタンをクリックする
  10. [Add trigger] ボタンをクリックする
  11. 以下の項目を設定する

    Select a source: S3

    Bucket: 上記手順で作成したS3バケット

    Event types: All object create events

    Prefix: 上記手順で作成したS3バケットのプレフィックス(例: waflog/ )

  12. [Add] をクリックする
  13. [Configuration] をクリックする
  14. [General configuration] の右側にある [Edit] ボタンをクリックする
  15. 以下の項目を設定する

    Description(任意)

    Timeout: 1分

  16. [Save] をクリックする

CloudWatch Logs上のLambdaの実行ログの保存期間の設定

こちらの設定は任意です。

ログの保存期間を変更したい場合は、以下の手順でご実施ください。

  1. Lambda関数を実行する

    WAFログがS3バケットに出力されたことをトリガーに実行されますので、対象環境にアクセスしてWAFログを出力してください。

  2. CloudWatchを開く
  3. [ロググループ] をクリックする
  4. 先ほど作成したLambdaのロググループのチェックボックスにチェックを入れる
  5. [アクション] メニューから、[保持設定を編集] をクリックする
  6. [次の期間経過後にイベントを失効] にて、期間を変更する

    デフォルトは「失効しない」になっているため、必要に応じて期間を変更してください。