AWS WAF のログ記録をオンにして、CloudWatch、Amazon S3、または Kinesis Data Firehose にログを送信するにはどうすればよいですか?

最終更新日: 2022 年 7 月 22 日

AWS WAF のログ記録をオンにして、ログを Amazon CloudWatch、Amazon Simple Storage Service (Amazon S3)、または Amazon Kinesis Data Firehose に送信したいと考えています。AWS WAF ログをオンにするにはどうすればいいですか? また、どのような許可が必要ですか?

簡単な説明

まず、AWS WAF ウェブ ACL でサポートされている送信先を選択します。AWS WAF は、次のログの送信先をサポートしています。

AWS WAF ログをオンにするために必要なリソース許可があることを確認してください。その後、選択した送信先を使用して AWS WAF ログをオンにします。

解決方法

AWS WAF ログの保存については、次の送信先がサポートされています。

Amazon CloudWatch Logs

ログを CloudWatch Logs ロググループに送信するには、AWS WAF ログをオンにする際に、送信先として [CloudWatch Logs log group] (CloudWatch Logs ロググループ) を選択します。

新しいロググループを作成するか、既存のロググループを使用します。オンにすると、AWS WAF ログはログストリームのロググループに送信されます。これらのログは、[Logs Insights] (ログのインサイト) を使用して分析できます。詳細については、「What are my options to analyze AWS WAF logs stored in CloudWatch or Amazon S3?」(CloudWatch または Amazon S3 に保存されている AWS WAF ログを分析するオプションにはどのようなものがありますか?) を参照してください。

CloudWatch ログを使用する際には、次の点を考慮してください。

  • ロググループ名は、aws-waf-logs- のプレフィックスで始まる必要があります。
  • ロググループは、ウェブ ACL と同じ AWS アカウントとリージョンに存在する必要があります。CloudFront に関連付けられたグローバルウェブ ACL の場合、ロググループは米国東部 (バージニア北部) リージョンにある必要があります。
  • ログを格納する場合、ロググループにはロググループのクォータがあります。
  • ロググループで作成されたログストリームの形式は次のとおりです。
Region_web-acl-name_log-stream-number

必要な許可

CloudWatch Logs ロググループを使用して AWS WAF ログをオンにするアカウントには、次の許可が必要です。

  • wafv2:PutLoggingConfiguration
  • wafv2:DeleteLoggingConfiguration
  • logs:CreateLogDelivery
  • logs:DeleteLogDelivery
  • logs:PutResourcePolicy
  • logs:DescribeResourcePolicies
  • logs:DescribeLogGroups

これらの許可は、ウェブ ACL ログ記録設定の変更、ログ配信の設定、およびロググループの許可の取得と編集に必要です。これらの許可は、AWS WAF を管理するユーザーにアタッチする必要があります。

これらの許可が割り当てられると、AWS は CloudWatch Logs のリソースベースのポリシーに次のポリシーを自動的に追加します。これにより、配信サービスが CloudWatch Logs ロググループにログをプッシュできるようになります。
注: アカウント番号と Amazon リソースネーム (ARN) は、次のポリシーのアカウントに固有です。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AWSLogDeliveryWrite20150319",
      "Effect": "Allow",
      "Principal": {
        "Service": ["delivery.logs.amazonaws.com"]
      },
      "Action": [
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": ["arn:aws:logs:us-east-1:0123456789:log-group:my-log-group:log-stream:*"],
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": ["0123456789"]
        },
        "ArnLike": {
          "aws:SourceArn": ["arn:aws:logs:us-east-1:0123456789:*"]
        }
      }
    }
  ]
}

ロググループにログが表示されない場合は、DescribeResourcePolicies API を使用して、前述の必要な許可がロググループのリソースベースのポリシーに追加されているかどうかを確認します。PutResourcePolicy を使用して、ログサービスのリソースベースのポリシーを編集できます。

ロググループの許可の詳細については、「特定の AWS のサービスからのログの記録を有効にする」を参照してください。

Amazon S3 バケット

ログを Amazon S3 バケットに送信するには、AWS WAF ログをオンにするときに送信先として S3 バケットを選択します。

ウェブ ACL は、ログファイルを 5 分間隔で S3 バケットに発行します。最大ファイルサイズは 75 メガバイト (MB) です。ファイルサイズが最大サイズを超えると、新しいファイルがログに記録されます。ログをオンにすると、Amazon Athena を使用してログを分析できます。詳細については、「AWS WAF ログのクエリ」を参照してください。

AWS WAF ログ記録用の S3 バケット名は、aws-waf-logs- のプレフィックスで始まる必要があります。

必要な許可

S3 バケットを使用して AWS WAF ログをオンにするアカウントには、次の許可が必要です。

  • wafv2:PutLoggingConfiguration
  • wafv2:DeleteLoggingConfiguration
  • logs:CreateLogDelivery
  • logs:DeleteLogDelivery
  • s3:PutBucketPolicy
  • s3:GetBucketPolicy

これらの許可は、AWS WAF ログ記録をオンにし、S3 バケットのログ配信を設定するために必要です。また、バケットポリシーを取得および編集し、AWS WAF ログを S3 バケットに配信できるようにするためにも必要です。

これらの許可が割り当てられると、次のサンプルポリシーがバケットポリシーに自動的に追加され、S3 バケットへのログの配信が許可されます。
注: アカウント番号と Amazon リソースネーム (ARN) は、次のポリシーのアカウントに固有です。

{
  "Version": "2012-10-17",
  "Id": "AWSLogDeliveryWrite20150319",
  "Statement": [
    {
      "Sid": "AWSLogDeliveryAclCheck",
      "Effect": "Allow",
      "Principal": {
        "Service": "delivery.logs.amazonaws.com"
      },
      "Action": "s3:GetBucketAcl",
      "Resource": "arn:aws:s3:::my-bucket",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": [
            "0123456789"
          ]
        },
        "ArnLike": {
          "aws:SourceArn": [
            "arn:aws:logs:us-east-1:0123456789:*"
          ]
        }
      }
    },
    {
      "Sid": "AWSLogDeliveryWrite",
      "Effect": "Allow",
      "Principal": {
        "Service": "delivery.logs.amazonaws.com"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::my-bucket/AWSLogs/account-ID/*",
      "Condition": {
        "StringEquals": {
          "s3:x-amz-acl": "bucket-owner-full-control",
          "aws:SourceAccount": [
            "0123456789"
          ]
        },
        "ArnLike": {
          "aws:SourceArn": [
            "arn:aws:logs:us-east-1:0123456789:*"
          ]
        }
      }
    }
  ]
}

S3 バケットに AWS WAF ログが表示されない場合は、GetBucketPolicy API を使用して、必要な許可がバケットポリシーに存在するかどうかを確認します。PutBucketPolicy API を使用してバケットポリシーを編集できます。

ログを別の AWS アカウントまたはリージョンに送信するには、「AWS WAF ログを一元化されたロギングアカウントの Amazon S3 バケットに送信するにはどうすればよいですか?」を参照してください。

Amazon Kinesis Data Firehose

AWS WAF ログを Kinesis Data Firehose ストリームに送信するには、配信ストリームを作成する必要があります。配信ストリームには、ログを保存するさまざまな送信先があります。

Kinesis Data Firehose を使用するときは、次の点を考慮してください。

  • Kinesis Data Firehose の名前は、aws-waf-logs- のプレフィックスで始まる必要があります。
  • Kinesis Data Firehose の配信ストリームは、ウェブ ACL と同じ AWS アカウントおよびリージョンに存在する必要があります。CloudFront に関連付けられたグローバルウェブ ACL の場合、Kinesis Data Firehose は米国東部 (バージニア北部) リージョンにある必要があります。
  • 1 つの AWS WAF ログは 1 つの Kinesis Data Firehose レコードに相当し、Amazon Kinesis Data Firehose Quotas の対象となります。
    重要: 1 秒あたり 10,000 件を超えるリクエストを受信すると、データはスロットリングされ、すべてのリクエストがログに記録されるわけではありません。スロットリングを防ぐには、Kinesis Data Firehose のクォータの引き上げをリクエストする必要があります。

必要な許可

Kinesis Data Firehose の送信先を使用して AWS WAF ログをオンにするアカウントには、次の許可が必要です。

  • wafv2:PutLoggingConfiguration
  • wafv2:DeleteLoggingConfiguration
  • iam:CreateServiceLinkedRole
  • firehose:ListDeliveryStreams

サービスにリンクされたロールと iam:CreateServiceLinkedRole 許可の詳細については、「AWS WAF のサービスにリンクされたロールの使用」を参照してください。

Kinesis Data Firehose 配信ストリームを作成するには、次の手順に従います。

  1. Amazon Kinesis コンソールを開きます。
  2. [Region] (リージョン) で、ウェブ ACL を作成した AWS リージョンを選択します。
    注: ウェブ ACL が Amazon CloudFront 用に設定されている場合は、[Global] (グローバル) を選択します。
  3. ナビゲーションペインで、[Delivery streams] (配信ストリーム) を選択します。
  4. [Create delivery stream] (配信ストリームの作成) を選択します。
  5. [Source] (ソース) で、[Direct PUT] を選択します。
  6. [Destination] (送信先) で、Kinesis Firehose の利用可能な送信先から選択します。
  7. [Delivery stream name] (デリバリーストリーム名) で、aws-waf-logs- で始まる配信ストリームの名前を入力します。
  8. [Data transformation] (データの変換) と [Record format conversion] (レコード形式の変換) の両方が [Disabled] (無効) になっていることを確認します。
  9. ステップ 6 で選択した送信先の方法に基づいて、[Destination settings] (送信先設定) を入力します。
  10. (オプション) [Buffer hints, compression and encryption] (バッファヒント、圧縮、および暗号化) で、仕様に合わせて設定するか、デフォルト設定のままにします。
  11. (オプション) [Advanced settings] (詳細設定) で、仕様に合わせて設定するか、デフォルト設定のままにします。
  12. 配信ストリームの設定を確認します。設定が仕様と一致する場合は、[Create delivery stream] (配信ストリームを作成) を選択します。

AWS WAF ログをオンにする

AWS WAF ログの送信先を決定したら、次の手順を実行して AWS WAF ログ記録をオンにします。

  1. AWS WAF コンソールを開きます。
  2. [Region] (リージョン) で、ウェブ ACL を作成した AWS リージョンを選択します。
    注: ウェブ ACL が Amazon CloudFront 用に設定されている場合は、[Global] (グローバル) を選択します。
  3. ウェブ ACL を選択します。
  4. [Logging and Metrics] (ログ記録とメトリクス) を選択し、[Enable] (有効化) を選択します。
  5. サポートされている送信先から AWS WAF ログを保存する [Destination] (送信先) を選択します。
  6. [Redacted fields] (マスキングされたフィールド) で、ログから除外するフィールドを選択します。
  7. [Filter logs] (ログをフィルタリング) で、保存するリクエストを制御するフィルターを追加します。
  8. [Save] (保存) を選択します。

この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?