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

所要時間3分
0

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 ロググループを選択します。

新しいロググループを作成するか、既存のロググループを使用してください。オンにすると、AWS WAF ログはログストリームのロググループに送信されます。Logs Insights を使用してこれらのログを分析できます。詳細については、「CloudWatch または Amazon S3 に保存されている AWS WAF ログを分析するためのオプションはありますか?」を参照してください。

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

  • ロググループ名は 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 アカウントまたはリージョンにログを送信するには、「集中型ロギングアカウントの Amazon S3 バケットに AWS WAF ログを送信する方法を教えてください」を参照してください。

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 クォータの対象となります。
    **重要:**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. [リージョン] で、ウェブ ACL を作成した AWS リージョンを選択します。
    注: ウェブ ACL が Amazon CloudFront 用に設定されている場合は、[グローバル] を選択してください。
  3. ナビゲーションペインで [配信ストリーム] を選択します。
  4. [配信ストリームの作成] を選択します。
  5. [ソース][ダイレクト PUT] を選択します。
  6. [送信先] では、Kinesis Firehose の利用可能な [送信先] から選択します。
  7. [配信ストリーム名] に、aws-waf-logs- で始まる配信ストリームの名前を入力します。
  8. [データ変換][レコード形式の変換] が両方とも [無効] になっていることを確認します。
  9. ステップ 6 で選択した送信方法に基づいて送信先の設定を入力します。
  10. (オプション) バッファヒント、圧縮、暗号化については、仕様に合わせて構成するか、デフォルト設定のままにします。
  11. (オプション) 詳細設定については、仕様に合わせて構成するか、デフォルト設定のままにします。
  12. 配信ストリームの設定を確認します。設定が仕様と一致する場合は、[配信ストリームの作成] を選択します。

AWS WAF ログを有効にする

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

  1. AWS WAF コンソールを開きます。
  2. [リージョン] で、ウェブ ACL を作成した AWS リージョンを選択します。
    注: ウェブ ACL が Amazon CloudFront 用に設定されている場合は、[グローバル] を選択してください。
  3. ウェブ ACL を選択します。
  4. [ロギングとメトリクス] を選択し、[有効化] を選択します。
  5. サポートされている [送信先] から AWS WAF ログを保存する送信先を選択します。
  6. [編集済みフィールド] では、ログから除外したいフィールドを選択します。
  7. [ログをフィルタリング] には、保存するリクエストを制御するフィルターを追加します。
  8. [保存] を選択します。
コメントはありません