スキップしてコンテンツを表示

AWS WAF でログ記録を有効化し、CloudWatch、Amazon S3、Kinesis Data Firehose にログを送信する方法を教えてください

所要時間2分
0

AWS WAF でログ記録を有効化し、Amazon CloudWatch、Amazon Simple Storage Service (Amazon S3)、または Amazon Kinesis Data Firehose にログを送信したいと考えています。

簡単な説明

まず、AWS WAF ウェブアクセスコントロールリスト (ウェブ ACL) でサポートされているログ送信先を選択します。AWS WAF ログを有効にするには、必須の権限を設定する必要があります。AWS WAF は次のログ送信先をサポートしています。

次に、送信先で AWS WAF ログを有効にします。

解決策

前提条件:

  • ロググループ名は、aws-waf-logs- というプレフィックスで始まる必要があります。
  • ロググループは、ウェブ ACL と同じ AWS アカウントと AWS リージョンに配置する必要があります。グローバルウェブ ACL が Amazon CloudFront と関連付けられている場合は、ロググループを US East (N. Virginia) リージョンに配置する必要があります。
  • CloudWatch Logs ロググループ および Firehose において、準拠する必要があるクォータを確認してください。

CloudWatch Logs ロググループへのアクセス許可を設定する

新しいロググループを作成するか、既存のロググループを使用します。CloudWatch Logs Insights を使用して AWS WAF ログを分析します。

ロググループに作成するログストリームには、Region_web-acl-name_log-stream-number という形式を使用します。

CloudWatch Logs にログを発行するために必要な権限を構成します。ユーザーに必要な権限がある場合、CloudWatch は、AWS WAF がログを送信できるようにするためのリソースベースポリシーをロググループに自動的に追加します。

{
  "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:*"]
        }
      }
    }
  ]
}

注: SourceAccount をアカウント番号に、SourceARN を実際の Amazon リソースネーム (ARN)に置き換えてください。

ロググループにログが表示されない場合は、DescribeResourcePolicies API を実行し、リソースベースポリシーに必要な権限が付与されているかどうかを確認してください。リソースベースポリシーを編集するには、PutResourcePolicy API を使用します。

ログ記録権限の詳細については、「AWS サービスによるログ記録を有効にする」を参照してください。

Amazon S3 バケットへのアクセス許可を構成する

AWS WAF ログを Amazon S3 バケットに送信する際、Amazon Athena を使用すると AWS WAF ログを分析できます

S3 バケットにログを発行するために必要な権限を設定します。ユーザーに必要な権限が付与されている場合、AWS は、AWS WAF がログを配信できるようにするための、次のポリシーをバケットに自動的に追加します。

{
  "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:*"]
        }
      }
    }
  ]
}

注: SourceAccount をアカウント番号に、SourceARN を実際の ARN に置き換えてください。

バケットにログが表示されない場合は、GetBucketPolicy API を実行し、バケットポリシーに必要な権限が付与されているかどうかを確認してください。バケットポリシーを編集するには、PutBucketPolicy API を使用します。

別の AWS アカウントまたはリージョンにログを送信する方法については、「AWS WAF ログを、一元的なログ記録アカウント内の Amazon S3 バケットに送信する方法を教えてください」を参照してください。

Firehose に対する権限を設定する

Firehose 配信ストリームを構成します[データ変換][レコード形式の変換] オプションは無効のままにします。配信ストリームの送信先を設定する方法については、「送信先設定を構成する」を参照してください。詳細については、「Firehose ストリームを作成する」を参照してください。

注: 1 件の AWS WAF ログは、1 件の Firehose レコードと同等です。

Firehose 配信ストリームにログを発行するために必要な権限を構成します。サービスリンクロールと iam:CreateServiceLinkedRole 権限の詳細については、「AWS WAF でサービスリンクロールを使用する」を参照してください。

AWS WAF ログを有効にする

次の手順を実行します。

  1. AWS WAF コンソールを開きます。
  2. ナビゲーションペインの [AWS WAF][リソースと保護パック] を選択します。
  3. 目的の保護パックを探し、[ログ記録] の横にある [表示と編集] を選択します。
  4. [ログ][有効化] を選択します。
  5. [ログ送信先] を選択します。
  6. [ログ送信先] の右側のペインで目的の送信先を選択します。
  7. [除外するフィールド] では、ログから除外するフィールドを選択します。
  8. [ログのフィルター] に保存するリクエストに対するフィルターを追加します。
  9. [保存] を選択します。