收集 CircleCI 稽核記錄
剖析器版本:2.0
支援的服務:
Google SecOps
SIEM
這個剖析器會從 CSV 和 JSON 格式的 CircleCI 稽核記錄擷取欄位,並轉換為 Unified Data Model (UDM) 格式。它會處理這兩種格式、執行資料轉換和擴充,並將擷取的欄位對應至事件物件中對應的 UDM 欄位。這個剖析器著重於使用者動作、資源存取權和更新事件,並將這些事件分類,填入相關 UDM 欄位,例如 principal、target、network 和 metadata。
事前準備
請確認您符合下列必要條件:
- Google SecOps 執行個體。
- CircleCI 的特殊存取權。
設定動態饋給
如要設定動態饋給,請按照下列步驟操作:
- 依序前往「設定」>「資料管理」>「動態饋給」。如果使用的是 SIEM 專用平台,請依序前往「設定」>「動態饋給」。
- 按一下「新增動態饋給」。
- 在下一頁,點按「設定單一動態饋給」。
- 在「Feed name」(動態饋給名稱) 欄位中,輸入動態饋給名稱 (例如 CircleCI Logs)。
- 「Source type」(來源類型) 請選取「Webhook」。
- 選取「CircleCI」做為「記錄類型」。
- 點選「下一步」。
- 選用:指定下列輸入參數的值:
- 分割分隔符號:用於分隔記錄行的分隔符號,例如
\n。 - Asset namespace:資產命名空間。
- 擷取標籤:套用至這個動態饋給事件的標籤。
- 分割分隔符號:用於分隔記錄行的分隔符號,例如
- 點選「下一步」。
- 在「完成」畫面中檢查動態饋給設定,然後按一下「提交」。
- 按一下「產生密鑰」,產生用於驗證這個動態饋給的密鑰。
- 複製並儲存密鑰。您無法再次查看這個 Secret Key。如有需要,您可以重新產生新的密鑰,但這項操作會使先前的密鑰失效。
- 在「詳細資料」分頁中,複製「端點資訊」欄位中的動態饋給端點網址。您必須在用戶端應用程式中指定這個端點網址。
- 按一下「完成」。
為 Webhook 動態饋給建立 API 金鑰
依序前往 Google Cloud 控制台「Credentials」(憑證)。
按一下 [Create credentials] (建立憑證),然後選取 [API key] (API 金鑰)。
限制 API 金鑰存取 Google Security Operations 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 SecOps 驗證身分的 API 金鑰。SECRET:您產生的密鑰,用於驗證動態饋給。
在 CircleCI 中設定 Webhook
- 登入 CircleCI 網頁介面。
- 選取要擷取記錄檔的專案。
- 按一下「專案設定」。
- 選取「Webhooks」。
- 按一下「Add Webhook」(新增 Webhook)。
指定下列輸入參數的值:
- Webhook Name:提供描述性名稱 (例如 Google SecOps)。
- 端點網址:輸入 Google SecOps API 端點的
<ENDPOINT_URL>。
- 事件:選取應觸發 Webhook 的 CircleCI 事件 (例如選取「workflow-completed」,在工作流程完成後傳送資料)。
按一下「儲存」建立 Webhook。
UDM 對應表
| 記錄欄位 | UDM 對應 | 邏輯 |
|---|---|---|
| account.id | read_only_udm.about.resource.attribute.labels.value | 原始記錄中的 account.id 值會指派給 UDM 欄位 read_only_udm.about.resource.attribute.labels.value,其中對應的 key 為 account_id。 |
| 動作 | read_only_udm.metadata.product_event_type | 原始記錄中的 action 值會指派給 UDM 欄位 read_only_udm.metadata.product_event_type。 |
| actor.id | read_only_udm.principal.user.product_object_id | 原始記錄中的 actor.id 值會指派給 UDM 欄位 read_only_udm.principal.user.product_object_id。 |
| actor.name | read_only_udm.principal.user.userid | 原始記錄的 actor.name 欄位會移除「github: 」前置字元。其餘值會指派給 UDM 欄位 read_only_udm.principal.user.userid。如果原始記錄中存在 actor.name,系統會將 USER_RESOURCE_UPDATE_CONTENT 值指派給 read_only_udm.metadata.event_type。否則,系統會指派 USER_RESOURCE_ACCESS。 |
| id | read_only_udm.metadata.product_log_id | 原始記錄中的 id 值會指派給 UDM 欄位 read_only_udm.metadata.product_log_id。剖析器會將 read_only_udm.metadata.log_type 設為 CIRCLECI。剖析器會將 read_only_udm.metadata.product_name 設為 CIRCLECI。剖析器會將 read_only_udm.metadata.vendor_name 設為 CIRCLECI。 |
| occurred_at | read_only_udm.metadata.event_timestamp | 原始記錄中的 occurred_at 值會剖析為時間戳記,並指派給 UDM 欄位 read_only_udm.metadata.event_timestamp。 |
| organization.name | read_only_udm.target.administrative_domain | 原始記錄的 organization.name 欄位會移除「github: 」前置字元。其餘值會指派給 UDM 欄位 read_only_udm.target.administrative_domain。 |
| payload.job.id | read_only_udm.about.resource.attribute.labels.value | 原始記錄中的 payload.job.id 值會指派給 UDM 欄位 read_only_udm.about.resource.attribute.labels.value,其中對應的 key 為 job_id。 |
| payload.job.job_name | read_only_udm.about.resource.attribute.labels.value | 原始記錄中的 payload.job.job_name 值會指派給 UDM 欄位 read_only_udm.about.resource.attribute.labels.value,其中對應的 key 為 job_name。 |
| payload.job.job_status | read_only_udm.about.resource.attribute.labels.value | 原始記錄中的 payload.job.job_status 值會指派給 UDM 欄位 read_only_udm.about.resource.attribute.labels.value,其中對應的 key 為 job_status。 |
| payload.workflow.id | read_only_udm.about.resource.attribute.labels.value | 原始記錄中的 payload.workflow.id 值會指派給 UDM 欄位 read_only_udm.about.resource.attribute.labels.value,其中對應的 key 為 workflow_id。 |
| request.id | read_only_udm.network.session_id | 原始記錄中的 request.id 值會指派給 UDM 欄位 read_only_udm.network.session_id。 |
| scope.id | read_only_udm.about.resource.attribute.labels.value | 原始記錄中的 scope.id 值會指派給 UDM 欄位 read_only_udm.about.resource.attribute.labels.value,其中對應的 key 為 scope_id。剖析器一開始會將 sec_action 設為 BLOCK。如果原始記錄中的 success 欄位為 true,sec_action 會變更為 ALLOW。接著,sec_action 的值會指派給 UDM 欄位 read_only_udm.security_result.action。 |
| target.id | read_only_udm.target.resource.product_object_id | 原始記錄中的 target.id 值會指派給 UDM 欄位 read_only_udm.target.resource.product_object_id。 |
| target.name | read_only_udm.target.resource.name | 原始記錄的 target.name 欄位會移除「github: 」前置字串。其餘值則指派給 UDM 欄位 read_only_udm.target.resource.name。剖析器會將 read_only_udm.target.resource.resource_type 設為 STORAGE_OBJECT。 |
| version | read_only_udm.target.resource.attribute.labels.value | 原始記錄中的 version 值會轉換為字串,並指派給 UDM 欄位 read_only_udm.target.resource.attribute.labels.value,其中對應的 key 為 version。 |
變更記錄
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求解答。