收集 GitLab 記錄

支援的國家/地區:

總覽

這個剖析器會從 GitLab JSON 記錄檔中擷取欄位,將這些欄位正規化為 Unified Data Model (UDM),並使用額外內容擴充資料。這項外掛程式會處理各種 GitLab 事件類型,著重於使用者動作、資源存取和安全性結果,同時也會處理網路和應用程式相關資訊。剖析器也會根據 GitLab 中的角色和動作執行邏輯,將事件分類並指派適當的嚴重程度。

事前準備

請確認您已完成下列事前準備事項:

  • Google SecOps 執行個體。
  • GitLab 的特殊存取權。

設定動態饋給

在 Google SecOps 平台中,有兩種不同的進入點可設定動態饋給:

  • 「SIEM 設定」>「動態消息」
  • 內容中心 > 內容包

依序前往「SIEM 設定」>「動態饋給」,設定動態饋給

如要設定動態消息,請按照下列步驟操作:

  1. 依序前往「SIEM 設定」>「動態消息」
  2. 按一下「新增動態消息」
  3. 在下一個頁面中,按一下「設定單一動態饋給」
  4. 在「Feed name」欄位中,輸入動態消息的名稱 (例如「GitLab Logs」)。
  5. 選取「Webhook」做為「來源類型」
  6. 選取「Gitlab」做為「記錄類型」
  7. 點選「下一步」
  8. 選用:指定下列輸入參數的值:
    • 分割分隔符號:用於分隔記錄行的分隔符號,例如 \n
    • 資產命名空間資產命名空間
    • 擷取標籤:套用至這個動態饋給事件的標籤。
  9. 點選「下一步」
  10. 在「Finalize」畫面中檢查動態饋給設定,然後按一下「Submit」
  11. 按一下「產生密鑰」,產生驗證這個動態消息的密鑰。
  12. 複製並儲存密鑰。您無法再次查看這個密鑰。如有需要,您可以重新產生新的密鑰,但這項操作會使先前的密鑰失效。
  13. 在「詳細資料」分頁中,從「端點資訊」欄位複製動態消息端點網址。您需要在用戶端應用程式中指定這個端點網址。
  14. 按一下 [完成]

從內容中心設定動態饋給

為下列欄位指定值:

  • 分割分隔符號:用於分隔記錄行的分隔符號,例如 \n

進階選項

  • 動態饋給名稱:系統預先填入的值,用於識別動態饋給。
  • 來源類型:將記錄收集到 Google SecOps 的方法。
  • 資產命名空間:與動態饋給相關聯的命名空間。
  • 擷取標籤:套用至這個動態饋給所有事件的標籤。

  • 按一下「產生密鑰」,產生驗證這個動態消息的密鑰。

  • 複製並儲存密鑰。您無法再次查看這個密鑰。如有需要,您可以重新產生新的密鑰,但這項操作會使先前的密鑰失效。

  • 在「詳細資料」分頁中,從「端點資訊」欄位複製動態消息端點網址。您需要在用戶端應用程式中指定這個端點網址。

為 Webhook 資訊提供建立 API 金鑰

  1. 前往 Google Cloud 控制台 > 憑證

    前往「憑證」

  2. 按一下 [Create credentials] (建立憑證),然後選取 [API key] (API 金鑰)

  3. 限制 API 金鑰對 Chronicle API 的存取權。

指定端點網址

  1. 在用戶端應用程式中,指定 webhook 動態饋給中提供的 HTTPS 端點網址。
  2. 如要啟用驗證,請在自訂標頭中指定 API 金鑰和私密金鑰,格式如下:

    X-goog-api-key = API_KEY
    X-Webhook-Access-Key = SECRET
    

    建議:請將 API 金鑰指定為標頭,而非在網址中指定。如果 Webhook 用戶端不支援自訂標頭,您可以使用查詢參數指定 API 金鑰和密鑰,格式如下:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

更改下列內容:

  • ENDPOINT_URL:動態消息端點網址。
  • API_KEY:用於向 Google Security Operations 進行驗證的 API 金鑰。
  • SECRET:您產生的密鑰,用於驗證動態饋給。

在 GitLab 中為 Google SecOps 設定 Webhook

  1. 開啟網路瀏覽器,然後前往要設定 Webhook 的 GitLab 專案。
  2. 在專案中,依序前往「設定」>「Webhook」
  3. 按一下「新增 Webhook」
  4. 在「URL」欄位中,貼上 Google SecOps 端點網址。
  5. 按一下「新增自訂標頭」
  6. 在「Header Name」欄位中輸入 X-Webhook-Access-Key
  7. 在「Header Value」欄位中,複製在設定 Google SecOps Feed 時產生的密鑰。
  8. 按一下「新增自訂標頭」
  9. 在「Header Name」欄位中輸入 X-goog-api-key
  10. 在「Header Value」欄位中,複製在設定 Google SecOps Feed 時產生的 API 金鑰。 注意:為提升安全性,請產生密碼權杖,並將其新增至 GitLab 網頁掛鉤設定和對應的 Google SecOps 資訊提供設定。這有助於驗證傳入 Webhook 的真實性。
  11. 選擇應觸發 Webhook 的 GitLab 事件。舉例來說,您可以選取「推送事件」,在每次將程式碼推送至存放區時,將資料傳送至 Google SecOps。請仔細考量哪些事件與您的安全性監控需求相關。事件過多可能會導致不必要的負載。
  12. 為方便瞭解 Webhook 的用途,請指定有意義的名稱,例如「Google SecOps Webhook」
  13. 確認已勾選「Enable SSL verification」核取方塊。這對安全通訊至關重要。
  14. 按一下「新增 Webhook」儲存設定。

UDM 對應表

記錄欄位 UDM 對應 邏輯
author_id principal.user.userid 已轉換為字串。
author_name principal.user.email_addresses 如果值符合電子郵件地址規則運算式。
author_name principal.user.user_display_name 如果值不符合電子郵件地址規則運算式。
details.as principal.resource.attribute.labels 以鍵「as」新增為標籤。
details.add principal.resource.attribute.labels 以鍵「add」的形式新增為標籤。
details.as principal.user.role_name 原始記錄欄位值。
details.as principal.user.attribute.roles.type 如果 details.as 為「擁有者」,請設為「ADMINISTRATOR」;如果 details.as 為「開發人員」、「維護人員」或「報表產生者」,請設為「SERVICE_ACCOUNT」;如果 details.as 為「訪客」,請設為「TYPE_UNSPECIFIED」。
details.custom_message security_result.description 原始記錄欄位值。
details.custom_message.action security_result.summary 原始記錄欄位值。
details.entity_path target.file.full_path 原始記錄欄位值。
details.target_id target.resource.id 已轉換為字串。
entity_path target.file.full_path 原始記錄欄位值。
entity_type target.resource.attribute.labels 以「實體類型」鍵新增為標籤。
event_type metadata.product_event_type 原始記錄欄位值。
insertId metadata.product_log_id 原始記錄欄位值。
ip_address principal.ipprincipal.asset.ip 原始記錄欄位值。
jsonPayload.action additional.fields 以鍵為「action」的欄位和字串值新增。
jsonPayload.controller additional.fields 以「controller」為鍵,並以字串值新增為欄位。
jsonPayload.correlation_id principal.asset_id 開頭為「id: 」。
jsonPayload.cpu_s additional.fields 以鍵「cpu_s」和字串值新增為欄位。
jsonPayload.details.custom_message.protocol network.application_protocol 如果值為「web」,則設為「UNKNOWN_APPLICATION_PROTOCOL」,否則會轉換為大寫。如果值為「web」,也會以「Application Protocol」鍵新增為額外欄位。
jsonPayload.mem_total_bytes additional.fields 以鍵「mem_total_bytes」和字串值新增為欄位。
jsonPayload.meta_caller_id additional.fields 以鍵為「Caller Id」和字串值的欄位形式新增。
jsonPayload.meta_client_id target.user.userid 原始記錄欄位值。
jsonPayload.meta_feature_category additional.fields 新增為欄位,鍵為「Feature Category」,值為字串。
jsonPayload.meta_remote_ip principal.ipprincipal.asset.ip 原始記錄欄位值,會剖析為 JSON 陣列,並合併至 IP 欄位。
jsonPayload.meta_user principal.user.userid 如果 jsonPayload.username 為空,系統會使用這個屬性做為備用選項。
jsonPayload.method network.http.method 原始記錄欄位值。
jsonPayload.path target.process.file.full_path 原始記錄欄位值。
jsonPayload.pid target.process.pid 已轉換為字串。
jsonPayload.remote_ip principal.ipprincipal.asset.ip 原始記錄欄位值。
jsonPayload.request_urgency additional.fields 以鍵「Request Urgency」和字串值新增為欄位。
jsonPayload.severity security_result.severity 如果值為「INFO」,請設為「INFORMATIONAL」;如果值為「ERROR」,請設為「ERROR」;如果值為「NOTICE」,請設為「MEDIUM」。
jsonPayload.status network.http.response_code 如果不是「ACTIVE」,則會轉換為整數。
jsonPayload.ua network.http.user_agent 原始記錄欄位值。
jsonPayload.username principal.user.userid 原始記錄欄位值。
jsonPayload.worker_id principal.application 原始記錄欄位值。
labels.instance_name principal.hostnameprincipal.asset.hostname 原始記錄欄位值,用於訊息包含「移除使用者」的情況。
logName security_result.category_details 原始記錄欄位值。
message security_result.summary 原始記錄欄位值,如果 jsonPayload.severity 為「ERROR」,則會使用這個值。
protoPayload.@type additional.fields 以鍵為「protoPayload type」和字串值的欄位形式新增。
protoPayload.authenticationInfo.principalEmail principal.user.email_addressesprincipal.user.userid 原始記錄欄位值。
protoPayload.authenticationInfo.principalSubject additional.fields 以鍵「authenticationInfo principalSubject」和字串值新增為欄位。
protoPayload.authenticationInfo.serviceAccountKeyName additional.fields 以「authenticationInfo serviceAccountKeyName」做為鍵,並以字串值做為欄位新增。
protoPayload.authorizationInfo target.resource.attribute.labelssecurity_result.action 這個欄位中的值會新增為標籤,且鍵的前置字串為「authenticationInfo」。如果 granted 中的值為 true,security_result.action 會設為「ALLOW」,如果為 false,則會設為「BLOCK」。系統也會將 resourceAttributes 等巢狀欄位新增為標籤,並在索引鍵前加上「authenticationInfo_resourceAttributes」。
protoPayload.methodName additional.fields 以鍵「protoPayload methodName」和字串值新增為欄位。
protoPayload.request.@type additional.fields 以「要求類型」鍵和字串值新增為欄位。
protoPayload.request.resource target.resource.attribute.labels 以「要求資源」為鍵新增為標籤。
protoPayload.requestMetadata.callerIp additional.fields 以鍵「requestMetadata callerIp」和字串值新增為欄位。
protoPayload.requestMetadata.callerSuppliedUserAgent additional.fields 以「requestMetadata callerSuppliedUserAgent」鍵和字串值新增為欄位。
protoPayload.serviceName additional.fields 以鍵「serviceName」和字串值新增為欄位。
protoPayload.status.code additional.fields 以「protoPayload status code」鍵和字串值新增為欄位。
protoPayload.status.message additional.fieldstarget.user.email_addressestarget.user.userid 以鍵「protoPayload status message」和字串值新增為欄位。如果系統能從郵件中擷取電子郵件地址,就會將該地址新增至 target.user.email_addressestarget.user.userid
receiveTimestamp metadata.event_timestamptimestamp 剖析為事件時間戳記。
resource.labels.project_id target.resource.attribute.labels 以「專案 ID」鍵新增為標籤。
resource.labels.zone target.cloud.availability_zone 原始記錄欄位值。
resource.type target.cloud.environment 如果值與「gce」相符,請設為「GOOGLE_CLOUD_PLATFORM」。
security_result.action security_result.action 衍生自 protoPayload.authorizationInfo.granted
security_result.category_details security_result.category_details 已與「logName」合併。
security_result.description security_result.description 衍生自 jsonPayload.details.custom_message
security_result.severity security_result.severity 衍生自 severityjsonPayload.severity
security_result.summary security_result.summary 衍生自 jsonPayload.details.custom_message.actionjsonPayload.message
severity security_result.severity 如果值為「INFO」,請設為「INFORMATIONAL」;如果值為「ERROR」,請設為「ERROR」;如果值為「NOTICE」,請設為「MEDIUM」。
sourceLocation principal.resource.attribute.labels 系統會將這個欄位中的值新增為標籤。
target_details target.resource.attribute.labels 以「目標詳細資料」鍵新增為標籤。
target_type target.resource.attribute.labels 以鍵「target type」的形式新增為標籤。
timestamp timestamp 原始記錄欄位值。根據主體和目標欄位是否出現而設定。如未符合任何特定條件,預設值為「GENERIC_EVENT」。可能的值為「USER_RESOURCE_UPDATE_CONTENT」、「USER_RESOURCE_ACCESS」、「USER_UNCATEGORIZED」。設為「GITLAB」。設為「GITLAB」。

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