收集 Fastly CDN 記錄

剖析器版本:2.0

支援的國家/地區:

本文說明如何使用 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 權杖

  1. 前往 https://manage.fastly.com 登入 Fastly 控制面板。
  2. 按一下右上角的使用者圖示。
  3. 前往「帳戶」>「個人 API 權杖」。
  4. 按一下「建立權杖」。
  5. 在「Create API Token」(建立 API 權杖) 對話方塊中,提供下列資訊:
    • 名稱:輸入描述性名稱 (例如 Google SecOps S3 Logging Configuration)。
    • 類型:選取「使用者權杖」。
    • 範圍:選取「全域存取權」 (設定記錄端點時必須選取此選項)。
    • 到期日:選取「永不過期」或設定適當的到期日。
  6. 按一下「建立權杖」。
  7. 複製並妥善儲存 API 權杖。

為 Google SecOps 設定 AWS S3 bucket 和 IAM

  1. 按照這份使用手冊的指示建立 Amazon S3 儲存空間:建立儲存空間。
  2. 儲存 bucket 的「名稱」和「區域」,以供日後參考 (例如 fastly-cdn-logs)。
  3. 按照這份使用者指南建立使用者:建立 IAM 使用者。
  4. 選取建立的「使用者」。
  5. 選取「安全憑證」分頁標籤。
  6. 在「存取金鑰」部分中,按一下「建立存取金鑰」。
  7. 選取「第三方服務」做為「用途」。
  8. 點選「下一步」。
  9. 新增說明標記 (如有需要)。
  10. 按一下「建立存取金鑰」。
  11. 按一下「下載 .csv 檔案」,儲存「存取金鑰」和「私密存取金鑰」,以供日後參考。
  12. 按一下「完成」。
  13. 選取 [權限] 分頁標籤。
  14. 在「權限政策」部分中,按一下「新增權限」。
  15. 選取「新增權限」。
  16. 選取「直接附加政策」。
  17. 搜尋 AmazonS3FullAccess 政策。
  18. 選取政策。
  19. 點選「下一步」。
  20. 按一下「Add permissions」。

設定 Fastly S3 記錄端點

方法 A:透過 Fastly 控制面板設定

  1. 前往 https://manage.fastly.com 登入 Fastly 控制台
  2. 選取要設定記錄的服務。
  3. 按一下「編輯設定」,然後選取「複製有效版本」,即可建立新的草稿版本。
  4. 按一下左側導覽選單中的「記錄」。
  5. 在「Amazon Web Services S3」部分,按一下「建立端點」。
  6. 在「建立 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 值區設定:

    • Bucket name:輸入 S3 bucket 名稱 (例如 fastly-cdn-logs)。
    • 網域:如果 bucket 位於美國標準區域,請留空。如果是其他區域,請輸入適當的 S3 端點 (例如 us-west-2 區域的 s3-us-west-2.amazonaws.com)。
    • 存取方法:選取「使用者憑證」
    • 存取金鑰:輸入步驟 11 中的 AWS 存取金鑰。
    • 私密金鑰:輸入步驟 11 中的 AWS 私密存取金鑰。
    • 週期:輸入 3600 (記錄每小時會完成一次)。
  7. 按一下「進階選項」展開其他設定:

    進階設定:

    • 路徑:輸入 fastly-cdn/ (在 bucket 中整理記錄檔時可選用的前置字元)。
    • PGP 公開金鑰:留空 (這項整合功能不需要加密)。
    • 選取記錄行格式:選取「空白」 (我們使用自訂 JSON 格式)。
    • 壓縮:選取 gzip (建議使用,可降低儲存空間費用)。
    • 備援層級:選取「標準」。
    • ACL:選取「private」 (建議)。
    • 伺服器端加密:選取「無」 (或根據您的安全性需求進行設定)。
    • 位元組上限:輸入 0 (沒有檔案大小上限)。
  8. 按一下「建立」,建立記錄端點。

  9. 按一下右上角的「啟用」。

  10. 選取「在正式環境中啟用」,部署設定變更。

  11. 在確認對話方塊中,按一下「啟用」進行確認。

選項 B:透過 Fastly API 設定

如要透過 API 設定記錄,請使用下列方法:

  1. 從控制面板或透過列出服務取得 Fastly 服務 ID:

    curl -H "Fastly-Key: YOUR_FASTLY_TOKEN" https://api.fastly.com/service
    
  2. 複製有效版本,建立新的草稿版本:

    curl -X PUT -H "Fastly-Key: YOUR_FASTLY_TOKEN" \
      "https://api.fastly.com/service/SERVICE_ID/version/ACTIVE_VERSION/clone"
    
  3. 在新草稿版本中建立 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"}'
    
  4. 啟用新版本:

    curl -X PUT -H "Fastly-Key: YOUR_FASTLY_TOKEN" \
      "https://api.fastly.com/service/SERVICE_ID/version/NEW_VERSION/activate"
    

確認記錄檔已傳送至 S3

  1. 等待約 1 小時 (視設定的期間而定),讓系統完成第一個記錄檔。
  2. 在 AWS 控制台中,依序前往「S3」> Buckets。
  3. 按一下 bucket 名稱 (例如 fastly-cdn-logs)。
  4. 前往 fastly-cdn/ 前置字元資料夾。
  5. 確認記錄檔的命名模式類似於:

    fastly-cdn/YYYY-MM-DD-HH-MM-SS-RANDOM_STRING.log.gz
    
  6. 下載範例記錄檔,並確認 JSON 格式符合您的設定。

在 Google SecOps 中設定動態饋給,擷取 Fastly CDN 記錄

  1. 依序前往「SIEM 設定」>「動態饋給」。
  2. 按一下「新增動態饋給」。
  3. 在下一個頁面中,按一下「設定單一動態饋給」。
  4. 輸入資訊提供的專屬名稱。
  5. 選取「Amazon S3 V2」做為「來源類型」。
  6. 選取「Fastly CDN」做為「記錄類型」。
  7. 依序點按「繼續」和「提交」。
  8. 為下列欄位指定值:

    • S3 URI:s3://fastly-cdn-logs/fastly-cdn/。
    • 來源刪除選項:根據偏好設定選取刪除選項。
    • 檔案存在時間上限:納入在過去天數內修改過的檔案 (預設為 180 天)。
    • 存取金鑰 ID:具有 S3 儲存貯體存取權的使用者存取金鑰。
    • 私密存取金鑰:具有 S3 bucket 存取權的使用者私密金鑰。
    • 資產命名空間:資產命名空間。
    • 擷取標籤:要套用至這個動態饋給事件的標籤。
  9. 依序點按「繼續」和「提交」。

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 專業人員尋求解答。