如何開啟 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 web ACL 選擇支援的目的地。AWS WAF 支援下列日誌目的地:

請確定您擁有開啟 AWS WAF 日誌的必要資源許可。然後,使用您選擇的目的地開啟 AWS WAF 日誌。

解決方案

下列目的地支援存放您的 AWS WAF 日誌:

Amazon CloudWatch Logs

若要將日誌傳送至 CloudWatch 日誌記錄群組,請在開啟 AWS WAF 日誌時,選擇 CloudWatch Logs 日誌群組作為目的地。

建立新的日誌群組,或使用現有的日誌群組。開啟時,AWS WAF 日誌會傳送至日誌串流中的日誌群組。您可以使用 Logs Insights 來分析這些日誌。如需詳細資訊,請參閱我有哪些選項可以分析存放在 CloudWatch 或 Amazon S3 中的 AWS WAF 日誌?

使用 CloudWatch 日誌時,請考慮下列事項:

  • 日誌群組名稱必須以前綴 aws-waf-logs- 開頭。
  • 日誌群組必須與您的 Web ACL 位於相同的 AWS 帳戶和區域。針對與 CloudFront 關聯的全域 Web 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

變更 Web ACL 日誌記錄組態、設定日誌交付,以及擷取和編輯日誌群組的許可,必須具有上述許可。這些許可必須連接至管理 AWS WAF 的使用者。

指派這些許可時,AWS 會在 CloudWatch Logs 的以資源為基礎的政策中,自動新增下列政策。這允許交付服務將日誌推送至 CloudWatch Logs 日誌群組。
注意:針對下列政策,帳號和 Amazon Resource Name (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 儲存貯體作為目的地。

Web ACL 以五分鐘間隔時間將日誌發佈至 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 Resource Name (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 交付串流必須與您的 Web ACL 位於相同的 AWS 帳戶和區域。針對與 CloudFront 關聯的全域 Web ACL,Kinesis Data Firehose 必須位於美國東部 (維吉尼亞北部) 區域。
  • 一個 AWS WAF 日誌相當於一個 Kinesis Data Firehose 記錄,且受 Amazon Kinesis Data Firehose 配額約束。
    重要事項:如果您每秒收到 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 (區域),選取您在其中建立 Web ACL 的 AWS 區域。
    注意:如果您的網路 ACL 是針對 Amazon CloudFront 所設定,請選取全域
  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 (區域),選取您在其中建立 Web ACL 的 AWS 區域。
    注意:如果您的網路 ACL 是針對 Amazon CloudFront 所設定,請選取全域
  3. 選取您的 Web ACL。
  4. 選擇 Logging and Metrics (日誌記錄和指標),然後選擇 Enable (啟用)。
  5. 從支援的目的地選擇要存放 AWS WAF 日誌的 Destination (目的地)。
  6. 針對 Redacted fields (已編輯欄位),選取您要從日誌中省略的欄位。
  7. 針對 Filter logs (篩選日誌),新增篩選器以控制您要存放的請求。
  8. 選擇 Save (儲存)。

此文章是否有幫助?


您是否需要帳單或技術支援?