如何啟用 AWS WAF 日誌記錄功能,並將日誌傳送到 CloudWatch、Amazon S3 或 Firehose?
我想要開啟 AWS WAF 日誌記錄功能,並將日誌傳送到 Amazon CloudWatch、Amazon Simple Storage Service (Amazon S3) 或 Amazon Kinesis Data Firehose。
簡短描述
首先,為您的 AWS WAF Web 存取控制清單 (Web ACL) 選擇一個支援的目的地。您必須設定必要的權限才能開啟 AWS WAF 日誌。AWS WAF 可支援下列日誌目的地:
然後,為您的目的地開啟 AWS WAF 日誌。
解決方法
先決條件:
- 日誌群組名稱必須以 aws-waf-logs- 首碼開頭。
- 日誌群組必須與您的 Web ACL 位於同一 AWS 帳戶和 AWS 區域。對於與 Amazon CloudFront 相關的全域 Web ACL,日誌群組必須位於美國東部 (維吉尼亞北部) 區域。
- 查看您必須遵守的 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 Resource Name (ARN)。
如果您在日誌群組中沒有看到日誌,請使用 DescribeResourcePolicies API 來確認資源型政策是否具有必要的權限。若要編輯資源型政策,請使用 PutResourcePolicy API。
如需日誌記錄權限的詳細資訊,請參閱啟用 AWS 服務的日誌記錄。
設定 Amazon S3 儲存貯體的權限
當您將 AWS WAF 日誌傳送到 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 WAF 日誌傳送至集中式日誌記錄帳戶中的 Amazon S3 儲存貯體?
設定 Firehose 的權限
設定 Firehose 交付串流。保持資料轉換和記錄格式轉換選項關閉。若要設定交付串流的目的地,請參閱設定目的地設定。如需詳細資訊,請參閱從主控台建立 Firehose 串流。
**注意:**一個 AWS WAF 日誌相當於一筆 Firehose 記錄。
設定將日誌發佈到 Firehose 交付串流所需的權限。如需服務連結角色和 iam:CreateServiceLinkedRole 權限的詳細資訊,請參閱使用 AWS WAF 的服務連結角色。
啟用 AWS WAF 日誌
請完成下列步驟:
- 開啟 AWS WAF console (AWS WAF 主控台)。
- 在導覽窗格中的 AWS WAF 下,選擇 Resources & protection packs (資源和防護套件)。
- 找到您的防護套件,然後選擇 Logging (日誌記錄) 旁的 View and edit (檢視和編輯)。
- 在 Logging (日誌記錄) 下,選取 Activate (啟用)。
- 選擇 Logging Destination (日誌記錄目的地)。
- 在 Logging destination (日誌記錄目的地) 的右側窗格中,選擇您的目的地。
- 在 Redacted fields (已編輯欄位),選取要從日誌中省略的欄位。
- 在 Filter logs (篩選日誌),請為要儲存的請求新增篩選器。
- 選擇 Save (儲存)。

