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

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

解決方案

支援下列目的地以供儲存 AWS WAF 日誌:

Amazon CloudWatch Logs

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

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

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

  • 日誌群組名稱必須以字首 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 的 resource-based policies 中自動新增下列政策。這可讓交付服務將日誌推送到 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 資料防火管的配額

必要的許可

使用 Kinesis Data Firehose 目的地開啟 AWS WAF 日誌的帳戶必須具有下列權限:

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

如需服務連結角色和 iam:CreateServiceLinkedRole 權限的詳細資訊,請參閱使用 AWS WAF 的服務連結角色

若要建立 Kinesis Data Firehose 交付串流,請按照下列步驟:

  1. 開啟 Amazon Kinesis 主控台
  2. 針對區域,選取您在其中建立 Web ACL 的 AWS 區域。
    注意:如果您為 Amazon CloudFront 設定 Web ACL,請選取全球
  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. 針對區域,選取您在其中建立 Web ACL 的 AWS 區域。
    注意:如果您為 Amazon CloudFront 設定 Web ACL,請選取全球
  3. 選取您的 Web ACL。
  4. 選擇日誌記錄和指標,然後選擇啟用
  5. 從支援的目的地選擇您想要儲存 AWS WAF 日誌的目的地
  6. 若為已編輯欄位,請選取您想要從日誌中省略的欄位。
  7. 若為篩選日誌,請新增篩選條件以控制您想要儲存的請求。
  8. 選擇儲存
AWS 官方
AWS 官方已更新 2 年前