收集 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) 的特殊存取權
  • 具有 globalglobal: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 值區和 IAM

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

    • 值區名稱:輸入 S3 值區名稱 (例如 fastly-cdn-logs)。
    • 網域:如果值區位於美國標準區域,請留空。如果是其他區域,請輸入適當的 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 URIs3://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 專業人員尋求答案。