收集 Kong Gateway 記錄

支援的服務:

本文說明如何使用多種擷取方法 (包括 Webhook、透過 Bindplane 代理程式的 Syslog,以及 Cloud Storage),將 Kong Gateway 和 Kong Konnect 記錄收集到 Google Security Operations。

Kong Gateway 是以 NGINX 為基礎建構的開放原始碼雲端原生 API 閘道。提供 API 和微服務的流量管理、驗證、頻率限制、數據分析和記錄功能。Kong Konnect 是 Kong Gateway 的 SaaS 管理平台,提供集中式控制層管理、稽核記錄和可觀測性。

事前準備

請確認您符合下列必要條件:

  • Google SecOps 執行個體
  • 執行中的 Kong Gateway 執行個體 (自行管理) 或 Kong Konnect 帳戶 (SaaS)
  • Kong Gateway Admin API 的管理員權限,通訊埠為 8001 (HTTP) 或 8444 (HTTPS)
  • Kong Konnect:具備適當權限的個人存取權杖 (PAT) 或系統帳戶權杖
  • Google Cloud 控制台存取權 (用於建立 API 金鑰,如果使用 Webhook 擷取)

設定 Kong Gateway,使用 Webhook (HTTP Log 外掛程式) 推送記錄

這個方法會使用 Kong Gateway HTTP Log 外掛程式,透過 HTTP POST 將要求和回應記錄直接傳送至 Google SecOps Webhook 端點。每項經由 Proxy 傳送的要求都會產生 JSON 記錄項目,並傳送至設定的端點。

在 Google SecOps 中建立 Webhook 動態饋給

建立動態饋給

  1. 依序前往 「SIEM 設定」 > 「動態饋給」。
  2. 按一下「新增動態饋給」。
  3. 在下一頁,點按「設定單一動態饋給」。
  4. 在「Feed name」(動態饋給名稱) 欄位中,輸入動態饋給名稱 (例如 Kong Gateway Logs)。
  5. 「Source type」(來源類型) 請選取「Webhook」。
  6. 選取「Kong Gateway」做為「記錄類型」。
  7. 點選「下一步」。
  8. 指定下列輸入參數的值:
    • 分割分隔符號 (選填):輸入 \n,即可分割以換行符號分隔的 JSON 事件
    • 資產命名空間:資產命名空間
    • 擷取標籤:要套用至這個動態饋給事件的標籤
  9. 點選「下一步」。
  10. 在「Finalize」(完成) 畫面中檢查新的新聞動態消息設定,然後按一下「Submit」(提交)。

產生並儲存密鑰

建立動態饋給後,您必須產生用於驗證的密鑰:

  1. 在動態饋給詳細資料頁面中,按一下「產生密鑰」。
  2. 對話方塊會顯示密鑰。
  3. 複製並妥善儲存密鑰。

重要事項:密鑰只會顯示一次,之後便無法擷取,如果遺失,就必須產生新的密鑰。

取得動態饋給端點網址

  1. 前往動態饋給的「詳細資料」分頁。
  2. 在「Endpoint Information」部分,複製「Feed endpoint URL」。
  3. 網址格式為:

    https://{region}-chronicle.googleapis.com/v1/{parent}/logs:import
    

    其中 {region} 是 Google SecOps 執行個體的區域 (例如 us、europe 或 asia-southeast1),{parent} 是資源路徑,格式為 projects/<PROJECT_ID>/locations/<LOCATION>/instances/<INSTANCE_ID>/logTypes/<LOG_TYPE>。

  4. 請儲存這個網址,以利進行後續步驟。

  5. 按一下「完成」。

建立 Google Cloud API 金鑰

Chronicle 需要 API 金鑰才能進行驗證。在 Google Cloud 控制台中建立受限制的 API 金鑰。

建立 API 金鑰

  1. 前往 Google Cloud 控制台憑證頁面。
  2. 選取專案 (與 Chronicle 執行個體相關聯的專案)。
  3. 依序點選「建立憑證」 > 「API 金鑰」。
  4. 系統會建立 API 金鑰,並在對話方塊中顯示。
  5. 按一下「編輯 API 金鑰」即可限制金鑰。

限制 API 金鑰

  1. 在「API 金鑰」設定頁面中:
    • 名稱:輸入描述性名稱 (例如 Chronicle Webhook API Key)
  2. 在「API 限制」下方:
    1. 選取「Restrict key」(限制金鑰)。
    2. 在「選取 API」下拉式選單中,搜尋並選取「Google SecOps API」 (或「Chronicle API」)。
  3. 按一下 [儲存]。
  4. 從頁面頂端的「API 金鑰」欄位複製 API 金鑰值。
  5. 妥善保存 API 金鑰。

建構 Webhook 網址

  • 合併 Chronicle 端點網址和 API 金鑰:

    <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>
    
  • 範例:

    https://{region}-chronicle.googleapis.com/v1/{parent}/logs:import?key=AIzaSyD...&secret=abcd1234...
    

請儲存這個完整網址,以供 Kong Gateway HTTP Log 外掛程式設定使用。

設定 Kong Gateway HTTP Log 外掛程式

HTTP Log 外掛程式會透過 JSON 格式的 POST 要求,將要求和回應記錄傳送至 HTTP 端點。您可以使用 Kong Admin API,在全域 (所有服務和路徑)、個別服務或個別路徑啟用外掛程式。

全域啟用 HTTP 記錄外掛程式

  • 如要將所有代理要求的記錄傳送至 Google SecOps,請向 Kong Admin API 傳送下列要求,全域啟用外掛程式:

    curl -i -X POST http://localhost:8001/plugins/ \
        --header "Accept: application/json" \
        --header "Content-Type: application/json" \
        --data '{
            "name": "http-log",
            "config": {
                "http_endpoint": "<ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>",
                "method": "POST",
                "timeout": 3000,
                "keepalive": 60000,
                "retry_count": 1,
                "queue": {
                    "max_batch_size": 100,
                    "max_coalescing_delay": 10
                }
            }
        }'
    

更改下列內容:

  • <ENDPOINT_URL>:Google SecOps 動態饋給端點網址
  • <API_KEY>:Google Cloud API 金鑰
  • <SECRET_KEY>:Google SecOps Webhook 密鑰

為特定服務啟用 HTTP 記錄外掛程式

  • 如要只傳送特定服務的記錄,請傳送下列要求:

    curl -i -X POST http://localhost:8001/services/{serviceName|Id}/plugins/ \
        --header "Accept: application/json" \
        --header "Content-Type: application/json" \
        --data '{
            "name": "http-log",
            "config": {
                "http_endpoint": "<ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>",
                "method": "POST",
                "timeout": 3000,
                "keepalive": 60000,
                "retry_count": 1
            }
        }'
    

    將 {serviceName|Id} 替換為目標服務的名稱或 ID。

為特定路徑啟用 HTTP 記錄外掛程式

  • 如要只傳送特定路徑的記錄,請傳送下列要求:

    curl -i -X POST http://localhost:8001/routes/{routeName|Id}/plugins/ \
        --header "Accept: application/json" \
        --header "Content-Type: application/json" \
        --data '{
            "name": "http-log",
            "config": {
                "http_endpoint": "<ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>",
                "method": "POST",
                "timeout": 3000,
                "keepalive": 60000,
                "retry_count": 1
            }
        }'
    

    將 {routeName|Id} 替換為目標路徑的名稱或 ID。

透過 Kong Konnect API 啟用 HTTP Log 外掛程式

  • 如果您透過 Kong Konnect 管理 Kong Gateway,請使用 Konnect API 啟用 HTTP Log 外掛程式:

    curl -X POST https://{region}.api.konghq.com/v2/control-planes/{controlPlaneId}/core-entities/plugins/ \
        --header "accept: application/json" \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer $KONNECT_TOKEN" \
        --data '{
            "name": "http-log",
            "config": {
                "http_endpoint": "<ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>",
                "method": "POST",
                "timeout": 3000,
                "keepalive": 60000,
                "retry_count": 1
            }
        }'
    

更改下列內容:

  • {region}:託管 Kong Konnect 的地理區域 (例如 us、eu)
  • {controlPlaneId}:控制層的 ID
  • $KONNECT_TOKEN:您的個人存取權杖 (PAT)

透過宣告式設定 (decK) 啟用 HTTP 記錄外掛程式

  • 在 kong.yaml 設定檔中新增下列內容:

    _format_version: "3.0"
    plugins:
      - name: http-log
        config:
          http_endpoint: "<ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>"
          method: POST
          timeout: 3000
          keepalive: 60000
          retry_count: 1
          queue:
            max_batch_size: 100
            max_coalescing_delay: 10
    

驗證 HTTP Log 外掛程式

  1. 透過 Kong Gateway 傳送測試要求:

    curl -i http://localhost:8000/your-route
    
  2. 列出外掛程式,確認外掛程式已啟用:

    curl -s http://localhost:8001/plugins/ | grep http-log
    
  3. 在 Google SecOps 中,前往「Search」(搜尋),然後搜尋含有 metadata.log_type = "KONG_GATEWAY" 的記錄,確認記錄擷取作業。

設定 Kong Konnect 稽核記錄 Webhook

這個方法會設定 Kong Konnect (SaaS),將稽核記錄 (驗證、授權和存取事件) 推送至 Google SecOps Webhook 端點。

產生 Kong Konnect 個人存取權杖

  1. 登入 Kong Konnect。
  2. 按一下右上角的使用者圖示,開啟內容選單。
  3. 按一下「Personal access tokens」。
  4. 按一下 [產生憑證]。
  5. 輸入權杖名稱 (例如 Chronicle Audit Log Setup)。
  6. 選取到期時間。
  7. 點按「生成」。
  8. 複製並妥善儲存權杖。權杖只會顯示一次。

為 Konnect 稽核記錄建立 Google SecOps Webhook 動態饋給

  1. 依序前往「SIEM 設定」>「動態饋給」。
  2. 按一下「新增動態饋給」。
  3. 在下一頁,點按「設定單一動態饋給」。
  4. 在「Feed name」(動態饋給名稱) 欄位中,輸入動態饋給名稱 (例如 Kong Konnect Audit Logs)。
  5. 選取「Webhook」做為「來源類型」。
  6. 選取「Kong Gateway」做為「記錄類型」。
  7. 點選「下一步」。
  8. 指定下列輸入參數的值:
    • 分割分隔符號:輸入 \n,即可分割以換行符號分隔的事件
    • 資產命名空間:資產命名空間
    • 擷取標籤:要套用至這個動態饋給事件的標籤
  9. 點選「下一步」。
  10. 在「Finalize」(完成) 畫面中檢查新的新聞動態消息設定,然後按一下「Submit」(提交)。
  11. 按一下「Generate Secret Key」(產生密鑰),然後儲存密鑰。
  12. 前往「詳細資料」分頁,然後複製「動態消息端點網址」。
  13. 按照上一節的步驟建立 Google Cloud API 金鑰。
  14. 建構完整的 Webhook 網址:

    <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>
    

在 Konnect 中建立稽核記錄目的地

  • 向 Konnect API 傳送 POST 要求,建立稽核記錄目的地:

    curl -X POST "https://global.api.konghq.com/v3/audit-log-destinations" \
        --header "Authorization: Bearer $KONNECT_TOKEN" \
        --header "Content-Type: application/json" \
        --data '{
            "endpoint": "<ENDPOINT_URL>?key=<API_KEY>",
            "authorization": "<SECRET_KEY>",
            "log_format": "json",
            "name": "Chronicle SecOps"
        }'
    

更改下列內容:

  • $KONNECT_TOKEN:Kong Konnect 個人存取權杖
  • <ENDPOINT_URL>:Google SecOps 資訊動態饋給端點網址
  • <API_KEY>:Google Cloud API 金鑰
  • <SECRET_KEY>:Google SecOps Webhook 密鑰

儲存回應中的 id 值,以便在下一個步驟使用。

啟用稽核記錄 Webhook

  • 傳送 PATCH 要求來啟用 Webhook:

    curl -X PATCH "https://us.api.konghq.com/v3/audit-log-webhook" \
        --header "Authorization: Bearer $KONNECT_TOKEN" \
        --header "Content-Type: application/json" \
        --data '{
            "audit_log_destination_id": "<DESTINATION_ID>",
            "enabled": true
        }'
    

    將 <DESTINATION_ID> 替換為上一個步驟傳回的 ID。

確認 Konnect 稽核記錄傳送作業

  1. 提出 Konnect API 要求,觸發稽核記錄事件:

    curl -X GET "https://us.api.konghq.com/v2/control-planes" \
        --header "Authorization: Bearer $KONNECT_TOKEN"
    
  2. 等待 1 到 2 分鐘,讓記錄傳播。

  3. 在 Google SecOps 中,搜尋含有 metadata.log_type = "KONG_GATEWAY" 的記錄。

Konnect 稽核記錄 Webhook 行為

  • 如果 HTTP 狀態碼為 429 (要求過多) 和 500 (伺服器錯誤),Konnect 會重試傳送 Webhook。
  • 重試等待時間下限:1 秒。
  • 重試等待時間上限:30 秒。
  • 重試次數上限:4 次。
  • Konnect 會保留稽核記錄 7 天。記錄會在 7 天後永久刪除。
  • 支援的記錄格式:cef (ArcSight CEF 格式)、json 和 cps (CrowdStrike 剖析標準)。

驗證方式參考資料

Chronicle Webhook 動態饋給支援多種驗證方式。選擇供應商支援的方法。

方法 1:查詢參數

  • Kong Gateway HTTP Log 外掛程式支援在網址中傳遞憑證。

  • 網址格式:

    <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>
    
  • 範例:

    https://{region}-chronicle.googleapis.com/v1/{parent}/logs:import?key=AIzaSyD...&secret=abcd1234...
    

方法 2:使用查詢參數自訂標頭

Kong Gateway HTTP Log 外掛程式透過 config.headers 參數支援自訂 HTTP 標頭。您可以在網址中傳遞 API 金鑰,並在自訂標頭中傳遞密鑰。

  • Kong Admin API 範例:

    curl -i -X POST http://localhost:8001/plugins/ \
        --header "Accept: application/json" \
        --header "Content-Type: application/json" \
        --data '{
            "name": "http-log",
            "config": {
                "http_endpoint": "<ENDPOINT_URL>?key=<API_KEY>",
                "method": "POST",
                "timeout": 3000,
                "headers": {
                    "x-chronicle-auth": "<SECRET_KEY>"
                }
            }
        }'
    

驗證標頭名稱

Chronicle 接受下列驗證標頭名稱:

API 金鑰:

  • x-goog-chronicle-auth (建議)
  • X-Goog-Chronicle-Auth (不區分大小寫)

密鑰:

  • x-chronicle-auth (建議)
  • X-Chronicle-Auth (不區分大小寫)

Webhook 限制和最佳做法

要求限制

限制 值
要求大小上限 4 MB
每秒查詢次數 (QPS) 上限 15,000
要求逾時 30 秒
重試行為 自動,採用指數輪詢

Kong HTTP 記錄外掛程式佇列設定

參數 說明 建議值
config.queue.max_batch_size 每個批次的記錄項目數量上限 100
config.queue.max_coalescing_delay 傳送批次前等待的時間上限 (秒) 10
config.queue.max_entries 佇列中的項目數量上限 10000
config.queue.max_retry_time 重試遞送失敗訊息的時間上限 (秒) 60
config.queue.initial_retry_delay 重試前的初始等待時間 (秒) 0.01

使用 Bindplane 代理程式設定 Kong Gateway 系統記錄轉送

這個方法會使用 Kong Gateway Syslog 外掛程式,將記錄寫入本機 syslog daemon,再由 Bindplane 代理程式收集並轉送至 Google SecOps。這個方法適用於自行管理的 Kong Gateway 部署作業。

取得 Bindplane 代理程式的 Google SecOps 憑證

如要向 Google SecOps 驗證 Bindplane 代理程式,請選擇下列其中一種方法:

  • 新部署作業:使用 Chronicle API (選項 1)。
  • 舊版部署作業:在 2027 年 7 月 20 日停用 Ingestion API 前,請繼續使用擷取驗證檔案 (選項 2)。
  1. 登入 Google Cloud 控制台,選取連結至 Google SecOps 執行個體的 Google Cloud 專案。
  2. 依序前往「IAM & Admin」(IAM 與管理) >「Service Accounts」(服務帳戶)。
  3. 按一下「建立服務帳戶」。
  4. 提供下列設定詳細資料:
    • 「Service account name」(服務帳戶名稱):輸入帳戶名稱 (例如 bindplane-ingest)。
    • 服務帳戶說明:輸入說明 (例如 Bindplane agent log ingestion)。
  5. 點按「Create and continue」(建立並繼續)。
  6. 在「將專案存取權授予這個服務帳戶」部分,按一下「選取角色」,然後選取「Chronicle 編輯者」。
  7. 依序點選「繼續」和「完成」。
  8. 按一下您建立的服務帳戶,然後前往「金鑰」分頁。
  9. 依序點選「新增金鑰」>「建立新的金鑰」。
  10. 選取「JSON」,然後點選「建立」。金鑰檔案會下載到電腦。
  11. 將金鑰檔案儲存為 Bindplane 收集器目錄中的 ingestion-auth.json (Linux 為 /opt/observiq-otel-collector/ingestion-auth.json,Windows 為 C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json),或更新 config.yaml 中的 creds_file_path,使其與儲存檔案的路徑相符。
  12. 依序前往「IAM 與管理」>「設定」,然後複製「專案編號」。匯出工具設定時會用到。

方法 2:下載擷取驗證檔案 (舊版)

  1. 登入 Google SecOps 控制台。
  2. 依序前往「SIEM Settings」 > 「Collection Agents」。
  3. 下載擷取驗證檔案。
  4. 將檔案安全地儲存在要安裝 Bindplane 代理程式的系統中。

取得 Google SecOps 客戶 ID

  1. 登入 Google SecOps 控制台。
  2. 依序前往「SIEM 設定」 > 「設定檔」。
  3. 複製並儲存「機構詳細資料」專區中的「客戶 ID」。

安裝 Bindplane 代理程式

請按照下列操作說明,在 Windows 或 Linux 作業系統上安裝 Bindplane 代理程式。

Windows 安裝

  1. 以管理員身分開啟「命令提示字元」或「PowerShell」。
  2. 執行下列指令:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. 等待安裝完成。

  4. 執行下列指令,確認安裝成功:

    sc query observiq-otel-collector
    

服務應顯示為「RUNNING」。

安裝 Linux

  1. 開啟具有 root 或 sudo 權限的終端機。
  2. 執行下列指令:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. 等待安裝完成。

  4. 執行下列指令,確認安裝成功:

    sudo systemctl status observiq-otel-collector
    

服務應顯示為「active (running)」。

其他安裝資源

如需其他安裝選項和疑難排解資訊,請參閱 Bindplane 代理程式安裝指南。

設定 Bindplane 代理程式,擷取系統記錄並傳送至 Google SecOps

找出設定檔

  • Linux:

    sudo nano /opt/observiq-otel-collector/config.yaml
    
  • Windows:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

編輯設定檔

  • 將 config.yaml 的全部內容替換為下列設定:

    receivers:
      udplog:
        listen_address: "0.0.0.0:514"
    
    exporters:
      chronicle/kong_gateway:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: '<CUSTOMER_ID>'
        endpoint: chronicle.googleapis.com
        log_type: KONG_GATEWAY
        raw_log_field: body
    
    service:
      pipelines:
        logs/kong_to_chronicle:
          receivers:
            - udplog
          exporters:
            - chronicle/kong_gateway
    

設定參數

替換下列預留位置:

  • 匯出工具設定:

    • <CUSTOMER_ID>:在上一個步驟中複製的 Google SecOps 客戶 ID
    • creds_file_path:服務帳戶 JSON 金鑰檔案的完整路徑 (選項 1):
      • Linux:/opt/observiq-otel-collector/ingestion-auth.json
      • Windows:C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • location:將 <LOCATION> 替換為 Google SecOps 執行個體的區域 (例如 us、europe 或 asia-southeast1)。匯出工具會在這個值前面加上 chronicle.googleapis.com。如需完整清單,請參閱「區域性端點」。
    • project:依序前往「IAM 與管理」>「設定」,然後將 <PROJECT_NUMBER> 替換為專案編號。
    • endpoint:維持設為 chronicle.googleapis.com。

舊版擷取 API 匯出工具

  • 如果您使用選項 2 的擷取驗證檔案,請將 exporters 區塊替換為下列內容。將 creds_file_path 設為擷取驗證檔案的路徑。如果執行個體位於美國境外,請將 malachiteingestion-pa.googleapis.com 替換為區域端點 (例如 europe-malachiteingestion-pa.googleapis.com)。

    exporters:
      chronicle/kong_gateway:
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: '<CUSTOMER_ID>'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: KONG_GATEWAY
        raw_log_field: body
    

儲存設定檔

  • 編輯完畢後,請儲存檔案:
    • Linux:依序按下 Ctrl+O、Enter 和 Ctrl+X
    • Windows:依序點選「檔案」 > 「儲存」

重新啟動 Bindplane 代理程式,套用變更

  • 如要在 Linux 重新啟動 Bindplane 代理程式,請執行下列指令:

    sudo systemctl restart observiq-otel-collector
    
    1. 確認服務正在執行:

      sudo systemctl status observiq-otel-collector
      
    2. 檢查記錄是否有錯誤:

      sudo journalctl -u observiq-otel-collector -f
      
  • 如要在 Windows 中重新啟動 Bindplane 代理程式,請選擇下列其中一個選項:

    • 以管理員身分開啟命令提示字元或 PowerShell:

      net stop observiq-otel-collector && net start observiq-otel-collector
      
  • 服務控制台:

    1. 按下 Win+R 鍵,輸入 services.msc,然後按下 Enter 鍵。
    2. 找出「observIQ OpenTelemetry Collector」。
    3. 按一下滑鼠右鍵,然後選取「重新啟動」。
    4. 確認服務正在執行:

      sc query observiq-otel-collector
      
    5. 檢查記錄是否有錯誤:

      type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
      

設定 Kong Gateway 系統記錄轉送

如要透過 Syslog 轉送 Kong Gateway 記錄,有兩種方法:使用 Syslog 外掛程式 (適用於每個要求的 API 流量記錄),以及使用 kong.conf (適用於系統層級的存取和錯誤記錄)。

方法 1:透過 Admin API 啟用 Syslog 外掛程式

  • Syslog 外掛程式會以 JSON 格式,將每個經由 Proxy 傳送的要求和回應記錄到本機 syslog daemon。傳送下列要求至 Kong Admin API,在全域啟用外掛程式:

    curl -i -X POST http://localhost:8001/plugins/ \
        --header "Accept: application/json" \
        --header "Content-Type: application/json" \
        --data '{
            "name": "syslog",
            "config": {
                "log_level": "info",
                "successful_severity": "info",
                "client_errors_severity": "info",
                "server_errors_severity": "info"
            }
        }'
    

Syslog 外掛程式設定參數:

  • log_level:要傳送至系統記錄的最低記錄層級。接受的值:debug、info、notice、warning、err、crit、alert、emerg。預設值:info。
  • successful_severity:成功要求 (2xx 狀態碼) 的 Syslog 嚴重性。預設:info。
  • client_errors_severity:用戶端錯誤要求 (4xx 狀態碼) 的 Syslog 嚴重性。預設值:info。
  • server_errors_severity:伺服器錯誤要求 (5xx 狀態碼) 的 Syslog 嚴重程度。預設:info。

方法 2:設定 kong.conf 以轉送遠端系統記錄

  • 如要將 Kong Gateway 系統記錄 (存取記錄和錯誤記錄) 直接轉送至遠端 syslog 伺服器,請編輯 kong.conf 檔案,並設定下列參數:

    proxy_access_log=syslog:server=<BINDPLANE_IP>:514,facility=user,tag=kong_proxy_access,severity=info
    proxy_error_log=syslog:server=<BINDPLANE_IP>:514,facility=user,tag=kong_proxy_error,severity=info
    admin_access_log=syslog:server=<BINDPLANE_IP>:514,facility=user,tag=kong_admin_access,severity=info
    admin_error_log=syslog:server=<BINDPLANE_IP>:514,facility=user,tag=kong_admin_error,severity=info
    

將 <BINDPLANE_IP> 替換為主機的 IP 位址,該主機須執行 Bindplane 代理程式。

  • 編輯 kong.conf 後,請重新啟動 Kong Gateway:

    kong restart
    

方法 3:透過宣告式設定 (decK) 啟用 Syslog 外掛程式

  • 在 kong.yaml 設定檔中新增下列內容:

    _format_version: "3.0"
    plugins:
      - name: syslog
        config:
          log_level: info
          successful_severity: info
          client_errors_severity: info
          server_errors_severity: info
    

驗證系統記錄檔轉送

  1. 透過 Kong Gateway 傳送測試要求:

    curl -i http://localhost:8000/your-route
    
  2. 檢查 Bindplane 代理記錄,確認是否有傳入的系統記錄訊息:

    sudo journalctl -u observiq-otel-collector -f
    
  3. 在 Google SecOps 中,搜尋含有 metadata.log_type = "KONG_GATEWAY" 的記錄,確認記錄擷取作業。

Kong Gateway 記錄格式參考資料

所有 Kong Gateway 記錄外掛程式 (HTTP 記錄、Syslog、檔案記錄、TCP 記錄、UDP 記錄) 都會以相同的 JSON 格式輸出記錄。每個記錄項目都包含下列欄位:

欄位 說明
request 用戶端要求的屬性,包括標頭、方法、URI、大小和網址
response 回應的屬性,包括狀態碼、標頭和大小
latencies.kong 內部 Kong Gateway 處理延遲時間 (毫秒)
latencies.proxy 上游服務處理要求的時間 (以毫秒為單位)
latencies.request 從收到第一個位元組到傳送最後一個位元組的總要求時間 (以毫秒為單位)
latencies.receive 接收及處理上游回應的時間 (毫秒)
service 與要求相關聯的 Gateway 服務屬性
route 所要求特定路徑的屬性
client_ip 原始用戶端 IP 位址
tries 負載平衡器疊代,包括 IP、通訊埠和平衡器延遲時間
workspace 與要求相關聯的 Workspace UUID
workspace_name 與要求相關聯的工作區名稱
upstream_uri 傳送至上游服務的 URI
upstream_status 從上游服務收到的 HTTP 狀態碼
source 指出回覆是由 kong 還是 upstream 生成
started_at 要求處理作業開始的 Unix 時間戳記
consumer 通過驗證的消費者 (僅在啟用驗證時顯示)
authenticated_entity 已驗證憑證的屬性 (僅在啟用驗證時顯示)

UDM 對應表

記錄欄位 UDM 對應 邏輯
intermediary_host 中介 合併自中介雜湊,其中包含 intermediary_host 的主機名稱和 xff_ips 的 IP
xff_ips 中介
service.host metadata.event_type 如果 service.host 或 client_ip 不為空白,則設為「NETWORK_CONNECTION」;如果 target 不為空白,則設為「STATUS_UNCATEGORIZED」;否則設為「GENERIC_EVENT」
client_ip metadata.event_type
request.headers.x-consumer-id metadata.ingestion_labels 合併為標籤,鍵為「x-consumer-id」,值來自 request.headers.x-consumer-id
metadata._id metadata.product_log_id 直接複製值
metadata.version metadata.product_version 直接複製值
application_protocol network.application_protocol 從 route.protocols 或 service.protocol 設定的 application_protocol 值
request.method network.http.method 直接複製值
response.status network.http.response_code 已轉換為整數
response.size network.received_bytes 已轉換為 uinteger
request.size network.sent_bytes 已轉換為 uinteger
agent.name observer.asset_id 由 agent.name 和 agent.id 串連而成
agent.id observer.asset_id
agent.hostname observer.hostname 直接複製值
agent.version observer.platform_version 直接複製值
agent.ephemeral_id observer.resource.attribute.labels 合併為標籤,鍵為「ephemeral_id」,值來自 agent.ephemeral_id
cloud.availability_zone principal.cloud.availability_zone 直接複製值
cloud.instance.id principal.cloud.project.id 直接複製值
cloud.instance.name principal.cloud.project.name 直接複製值
cloud.machine.type principal.cloud.project.type 如果不是空白,請設為「VIRTUAL_MACHINE」
principal_host principal.hostname 如果 principal_host 不為空白,則為該欄位的值,否則為 host.fqdn
host.fqdn principal.hostname
host.ip principal.ip 從 host.ip 陣列合併
host.mac principal.mac 從 host.mac 陣列合併
host.os.name principal.platform 如果符合 (?i)Linux,請設為「LINUX」;如果符合 (?i)windows,請設為「WINDOWS」;如果符合 (?i)mac,請設為「MAC」
host.os.version principal.platform_version 直接複製值
request.headers.content-type principal.resource.attribute.labels 合併自標籤,鍵為「content-type」,值為 request.headers.content-type,鍵為「auth_type」,值為 request.decoded_headers.authorization.auth_type
request.decoded_headers.authorization.auth_type principal.resource.attribute.labels
request.url principal.url 直接複製值
request.decoded-headers.authorization.user principal.user.user_display_name 直接複製值
log_level security_result 從 security_result 雜湊合併,並根據 log_level 規則運算式比對結果設定嚴重性
service.host target.asset_id 由 service.host 和 service.id 串連而成
service.id target.asset_id
log.file.path target.file.full_path 直接複製值
service.host target.hostname 如果 service.host 不是 IP,則直接複製值
client_ip target.ip 如果 service.host 是 IP,則從 client_ip 和 service_host 合併
service_host target.ip
service.port target.port 已轉換為整數
response.headers.set-cookie target.resource.attribute.labels 從標籤合併,索引鍵為「set-cookie」,值來自 response.headers.set-cookie,索引鍵為「route.id」,值來自 route.id
route.id target.resource.attribute.labels
metadata.vendor_name metadata.vendor_name 設為「KONG_GATEWAY」
metadata.product_name metadata.product_name 設為「KONG_GATEWAY」

變更記錄

查看這個剖析器的變更記錄

還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求解答。