收集 Fastly CDN 記錄
剖析器版本:2.0
支援的國家/地區:
Google SecOps
SIEM
本文說明如何使用 Amazon S3,將 Fastly CDN 記錄擷取至 Google Security Operations。
Fastly 是內容傳遞聯播網 (CDN) 和邊緣雲端平台,提供即時內容傳遞、安全性和邊緣運算服務。Fastly 的即時記錄串流功能可將 CDN 存取記錄、WAF 事件和其他遙測資料傳送至各種目的地 (包括 Amazon S3),以進行安全監控和分析。
事前準備
請確認您已完成下列事前準備事項:
- Google SecOps 執行個體
- Fastly 控制面板或 API 的特殊存取權
- AWS (S3、IAM) 的特殊存取權
- 具有
global或global:read範圍的 Fastly API 權杖
建立 Fastly API 權杖
- 前往 https://manage.fastly.com 登入 Fastly 控制台。
- 按一下右上角的使用者圖示。
- 依序前往「帳戶」>「個人 API 權杖」。
- 按一下「建立權杖」。
- 在「Create API Token」(建立 API 權杖) 對話方塊中,提供下列資訊:
- 名稱:輸入描述性名稱 (例如
Google SecOps S3 Logging Configuration)。 - 類型:選取「使用者權杖」。
- 範圍:選取「全域存取權」 (設定記錄端點時必須選取此選項)。
- 到期時間:選取「永不過期」或設定適當的到期日。
- 名稱:輸入描述性名稱 (例如
- 按一下「建立權杖」。
- 複製並妥善儲存 API 權杖。
為 Google SecOps 設定 AWS S3 值區和 IAM
- 按照這份使用者指南建立 Amazon S3 bucket:建立 bucket。
- 請儲存 bucket 的「名稱」和「區域」,以供日後參考 (例如
fastly-cdn-logs)。 - 請按照這份使用者指南建立使用者:建立 IAM 使用者。
- 選取建立的「使用者」。
- 選取「安全憑證」分頁標籤。
- 在「Access Keys」部分中,按一下「Create Access Key」。
- 選取「第三方服務」做為「用途」。
- 點選「下一步」。
- 新增說明標記 (如有需要)。
- 按一下「建立存取金鑰」。
- 按一下「Download .csv file」(下載 .csv 檔案),儲存「Access Key」(存取金鑰) 和「Secret Access Key」(私密存取金鑰),以供日後參考。
- 按一下 [完成]。
- 選取 [權限] 分頁標籤。
- 在「權限政策」部分中,按一下「新增權限」。
- 選取「新增權限」。
- 選取「直接附加政策」。
- 搜尋「AmazonS3FullAccess」AmazonS3FullAccess政策。
- 選取政策。
- 點選「下一步」。
- 按一下「Add permissions」。
設定 Fastly S3 記錄端點
方法 A:透過 Fastly 控制台設定
- 前往 https://manage.fastly.com 登入 Fastly 控制台
- 選取要設定記錄的服務。
- 按一下「編輯設定」,然後選取「複製有效版本」,即可建立新的草稿版本。
- 按一下左側導覽選單中的「記錄」。
- 在「Amazon Web Services S3」部分中,按一下「建立端點」。
在「建立 Amazon S3 端點」表單中,提供下列設定詳細資料:
基本設定:
- 名稱:輸入描述性名稱 (例如
secops-s3-logs)。 - 刊登位置:選取「預設格式版本」 (建議)。
記錄格式:輸入下列 JSON 格式字串:
{"timestamp":"%{begin:%Y-%m-%dT%H:%M:%S%z}t","client_ip":"%{req.http.Fastly-Client-IP}V","geo_country":"%{client.geo.country_name}V","geo_city":"%{client.geo.city}V","geo_region":"%{client.geo.region}V","datacenter":"%{server.datacenter}V","host":"%{if(req.http.Fastly-Orig-Host, req.http.Fastly-Orig-Host, req.http.Host)}V","url":"%{json.escape(req.url)}V","request_method":"%{json.escape(req.method)}V","request_protocol":"%{json.escape(req.proto)}V","request_referer":"%{json.escape(req.http.referer)}V","request_user_agent":"%{json.escape(req.http.User-Agent)}V","response_state":"%{json.escape(fastly_info.state)}V","response_status":%{resp.status}V,"response_reason":%{if(resp.response, "\"%22\"+json.escape(resp.response)+\"%22\", \"null\")}V,"response_body_size":%{resp.body_bytes_written}V,"response_header_size":%{resp.header_bytes_written}V,"request_body_size":%{req.body_bytes_read}V,"request_header_size":%{req.header_bytes_read}V,"cache_status":"%{fastly_info.state}V","is_tls":"%{if(req.is_ssl, \"true\", \"false\")}V","tls_protocol":"%{cstr_escape(tls.client.protocol)}V","tls_cipher":"%{cstr_escape(tls.client.cipher)}V","server_identity":"%{json.escape(server.identity)}V","is_edge":%{if(fastly.ff.visits_this_service == 0, "true", "false")}V,"time_elapsed_usec":%{time.elapsed.usec}V,"time_start_sec":%{time.start.sec}V}
- 時間戳記格式:保留預設值 (相容於 strftime 的字串)。
- 名稱:輸入描述性名稱 (例如
S3 值區設定:
- 值區名稱:輸入 S3 值區名稱 (例如
fastly-cdn-logs)。 - 網域:如果值區位於美國標準區域,請留空。如果是其他區域,請輸入適當的 S3 端點 (例如 us-west-2 區域的
s3-us-west-2.amazonaws.com)。 - 存取方法:選取「使用者憑證」
- 存取金鑰:輸入步驟 11 中的 AWS 存取金鑰。
- 私密金鑰:輸入步驟 11 中的 AWS 存取金鑰。
- 週期:輸入
3600(每小時會完成記錄)。
按一下「進階選項」展開其他設定:
進階設定:
- 路徑:輸入
fastly-cdn/(選用前置字元,用於整理 bucket 中的記錄)。 - PGP 公開金鑰:留空 (這項整合功能不需要加密)。
- 選取記錄行格式:選取「空白」 (我們使用自訂 JSON 格式)。
- 壓縮:選取 gzip (建議選取,可降低儲存空間費用)。
- 備援等級:選取「標準」。
- ACL:選取「private」 (建議)。
- 伺服器端加密:選取「無」 (或根據您的安全性需求進行設定)。
- 位元組上限:輸入
0(無檔案大小上限)。
- 路徑:輸入
按一下「建立」,建立記錄端點。
按一下右上角的「啟用」。
選取「在正式版中啟用」,部署設定變更。
在確認對話方塊中,按一下「啟用」進行確認。
選項 B:透過 Fastly API 設定
如要透過 API 設定記錄功能,請採取下列做法:
從控制台或透過列出服務取得 Fastly 服務 ID:
curl -H "Fastly-Key: YOUR_FASTLY_TOKEN" https://api.fastly.com/service複製有效版本,建立新的草稿版本:
curl -X PUT -H "Fastly-Key: YOUR_FASTLY_TOKEN" \ "https://api.fastly.com/service/SERVICE_ID/version/ACTIVE_VERSION/clone"在新草稿版本中建立 S3 記錄端點:
curl -X POST -H "Fastly-Key: YOUR_FASTLY_TOKEN" \ -H "Content-Type: application/x-www-form-urlencoded" \ "https://api.fastly.com/service/SERVICE_ID/version/NEW_VERSION/logging/s3" \ --data-urlencode 'name=secops-s3-logs' \ --data-urlencode 'bucket_name=fastly-cdn-logs' \ --data-urlencode 'access_key=YOUR_AWS_ACCESS_KEY' \ --data-urlencode 'secret_key=YOUR_AWS_SECRET_KEY' \ --data-urlencode 'path=fastly-cdn/' \ --data-urlencode 'period=3600' \ --data-urlencode 'gzip_level=9' \ --data-urlencode 'format_version=2' \ --data-urlencode 'format={"timestamp":"%{begin:%Y-%m-%dT%H:%M:%S%z}t","client_ip":"%{req.http.Fastly-Client-IP}V","geo_country":"%{client.geo.country_name}V","geo_city":"%{client.geo.city}V","host":"%{if(req.http.Fastly-Orig-Host, req.http.Fastly-Orig-Host, req.http.Host)}V","url":"%{json.escape(req.url)}V","request_method":"%{json.escape(req.method)}V","response_status":%{resp.status}V,"cache_status":"%{fastly_info.state}V"}'啟用新版本:
curl -X PUT -H "Fastly-Key: YOUR_FASTLY_TOKEN" \ "https://api.fastly.com/service/SERVICE_ID/version/NEW_VERSION/activate"
確認記錄是否已傳送至 S3
- 等待約 1 小時 (視設定的週期而定),第一個記錄檔就會完成。
- 在 AWS 控制台中,依序前往「S3」> Buckets。
- 按一下 bucket 名稱 (例如
fastly-cdn-logs)。 - 前往
fastly-cdn/前置字元資料夾。 確認記錄檔是否已建立,且命名模式類似於:
fastly-cdn/YYYY-MM-DD-HH-MM-SS-RANDOM_STRING.log.gz下載範例記錄檔,並確認 JSON 格式符合您的設定。
在 Google SecOps 中設定動態饋給,擷取 Fastly CDN 記錄
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 在下一個頁面中,按一下「設定單一動態饋給」。
- 輸入動態饋給名稱的專屬名稱。
- 選取「Amazon S3 V2」做為「來源類型」。
- 選取「Fastly CDN」做為「記錄類型」。
- 依序點按「繼續」和「提交」。
為下列欄位指定值:
- S3 URI:
s3://fastly-cdn-logs/fastly-cdn/。 - 來源刪除選項:根據偏好設定選取刪除選項。
- 檔案存在時間上限:包含在過去天數內修改的檔案 (預設為 180 天)。
- 存取金鑰 ID:具有 S3 值區存取權的使用者存取金鑰。
- 存取密鑰:具有 S3 bucket 存取權的使用者私密金鑰。
- 資產命名空間:資產命名空間。
- 擷取標籤:要套用至這個動態饋給事件的標籤。
- S3 URI:
依序點按「繼續」和「提交」。
UDM 對應表
| 記錄欄位 | UDM 對應 | 邏輯 |
|---|---|---|
| request_protocol、response_state、response_reason、response_body_size、fastly_server、fastly_is_edge | additional.fields | 如果不是空白,則會與從每個欄位建立的標籤合併 |
| metadata.event_type | 設為「GENERIC_EVENT」,如果 principal_mid_present 為 true,則設為「STATUS_UPDATE」 | |
| request_method | network.http.method | 直接複製值 |
| request_user_agent | network.http.parsed_user_agent | 已轉換為 parseduseragent,然後重新命名 |
| request_referer | network.http.referral_url | 直接複製值 |
| response_status | network.http.response_code | 先轉換為字串,再轉換為整數 |
| request_user_agent | network.http.user_agent | 直接複製值 |
| 主機 | principal.asset.hostname | 直接複製值 |
| client_ip | principal.asset.ip | 直接複製的值 (通過 grok 驗證為 IP 後) |
| 主機 | principal.hostname | 直接複製值 |
| client_ip | principal.ip | 直接複製的值 (通過 grok 驗證為 IP 後) |
| geo_city | principal.location.city | 直接複製值 |
| geo_country | principal.location.country_or_region | 直接複製值 |
| security_result | security_result | 直接複製值 |
| 網址 | target.url | 直接複製值 |
| metadata.product_name | 設為「FASTLY_CDN」 | |
| metadata.vendor_name | 設為「FASTLY_CDN」 |
變更記錄
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。