收集 GitLab 記錄
總覽
這個剖析器會從 GitLab JSON 記錄檔中擷取欄位,將這些欄位正規化為 Unified Data Model (UDM),並使用額外內容擴充資料。這項外掛程式會處理各種 GitLab 事件類型,著重於使用者動作、資源存取和安全性結果,同時也會處理網路和應用程式相關資訊。剖析器也會根據 GitLab 中的角色和動作執行邏輯,將事件分類並指派適當的嚴重程度。
事前準備
請確認您已完成下列事前準備事項:
- Google SecOps 執行個體。
- GitLab 的特殊存取權。
設定動態饋給
在 Google SecOps 平台中,有兩種不同的進入點可設定動態饋給:
- 「SIEM 設定」>「動態消息」
- 內容中心 > 內容包
依序前往「SIEM 設定」>「動態饋給」,設定動態饋給
如要設定動態消息,請按照下列步驟操作:
- 依序前往「SIEM 設定」>「動態消息」。
- 按一下「新增動態消息」。
- 在下一個頁面中,按一下「設定單一動態饋給」。
- 在「Feed name」欄位中,輸入動態消息的名稱 (例如「GitLab Logs」)。
- 選取「Webhook」做為「來源類型」。
- 選取「Gitlab」做為「記錄類型」。
- 點選「下一步」。
- 選用:指定下列輸入參數的值:
- 分割分隔符號:用於分隔記錄行的分隔符號,例如
\n
。 - 資產命名空間:資產命名空間。
- 擷取標籤:套用至這個動態饋給事件的標籤。
- 分割分隔符號:用於分隔記錄行的分隔符號,例如
- 點選「下一步」。
- 在「Finalize」畫面中檢查動態饋給設定,然後按一下「Submit」。
- 按一下「產生密鑰」,產生驗證這個動態消息的密鑰。
- 複製並儲存密鑰。您無法再次查看這個密鑰。如有需要,您可以重新產生新的密鑰,但這項操作會使先前的密鑰失效。
- 在「詳細資料」分頁中,從「端點資訊」欄位複製動態消息端點網址。您需要在用戶端應用程式中指定這個端點網址。
- 按一下 [完成]。
從內容中心設定動態饋給
為下列欄位指定值:
- 分割分隔符號:用於分隔記錄行的分隔符號,例如
\n
。
進階選項
- 動態饋給名稱:系統預先填入的值,用於識別動態饋給。
- 來源類型:將記錄收集到 Google SecOps 的方法。
- 資產命名空間:與動態饋給相關聯的命名空間。
擷取標籤:套用至這個動態饋給所有事件的標籤。
按一下「產生密鑰」,產生驗證這個動態消息的密鑰。
複製並儲存密鑰。您無法再次查看這個密鑰。如有需要,您可以重新產生新的密鑰,但這項操作會使先前的密鑰失效。
在「詳細資料」分頁中,從「端點資訊」欄位複製動態消息端點網址。您需要在用戶端應用程式中指定這個端點網址。
為 Webhook 資訊提供建立 API 金鑰
前往 Google Cloud 控制台 > 憑證。
按一下 [Create credentials] (建立憑證),然後選取 [API key] (API 金鑰)。
限制 API 金鑰對 Chronicle API 的存取權。
指定端點網址
- 在用戶端應用程式中,指定 webhook 動態饋給中提供的 HTTPS 端點網址。
如要啟用驗證,請在自訂標頭中指定 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
- 開啟網路瀏覽器,然後前往要設定 Webhook 的 GitLab 專案。
- 在專案中,依序前往「設定」>「Webhook」。
- 按一下「新增 Webhook」。
- 在「URL」欄位中,貼上 Google SecOps 端點網址。
- 按一下「新增自訂標頭」。
- 在「Header Name」欄位中輸入 X-Webhook-Access-Key。
- 在「Header Value」欄位中,複製在設定 Google SecOps Feed 時產生的密鑰。
- 按一下「新增自訂標頭」。
- 在「Header Name」欄位中輸入 X-goog-api-key。
- 在「Header Value」欄位中,複製在設定 Google SecOps Feed 時產生的 API 金鑰。 注意:為提升安全性,請產生密碼權杖,並將其新增至 GitLab 網頁掛鉤設定和對應的 Google SecOps 資訊提供設定。這有助於驗證傳入 Webhook 的真實性。
- 選擇應觸發 Webhook 的 GitLab 事件。舉例來說,您可以選取「推送事件」,在每次將程式碼推送至存放區時,將資料傳送至 Google SecOps。請仔細考量哪些事件與您的安全性監控需求相關。事件過多可能會導致不必要的負載。
- 為方便瞭解 Webhook 的用途,請指定有意義的名稱,例如「Google SecOps Webhook」。
- 確認已勾選「Enable SSL verification」核取方塊。這對安全通訊至關重要。
- 按一下「新增 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.ip 、principal.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.ip 、principal.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.ip 、principal.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.hostname 、principal.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_addresses 、principal.user.userid |
原始記錄欄位值。 |
protoPayload.authenticationInfo.principalSubject |
additional.fields |
以鍵「authenticationInfo principalSubject」和字串值新增為欄位。 |
protoPayload.authenticationInfo.serviceAccountKeyName |
additional.fields |
以「authenticationInfo serviceAccountKeyName」做為鍵,並以字串值做為欄位新增。 |
protoPayload.authorizationInfo |
target.resource.attribute.labels 、security_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.fields 、target.user.email_addresses 、target.user.userid |
以鍵「protoPayload status message」和字串值新增為欄位。如果系統能從郵件中擷取電子郵件地址,就會將該地址新增至 target.user.email_addresses 和 target.user.userid 。 |
receiveTimestamp |
metadata.event_timestamp 、timestamp |
剖析為事件時間戳記。 |
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 |
衍生自 severity 或 jsonPayload.severity 。 |
security_result.summary |
security_result.summary |
衍生自 jsonPayload.details.custom_message.action 或 jsonPayload.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 專業人員尋求答案。