收集 Ansible AWX 記錄

支援以下發布途徑:

總覽

這個剖析器會從 Ansible AWX 擷取 JSON 格式的記錄資料,並將資料轉換為統一資料模型 (UDM)。這個 API 會處理各種記錄格式,擷取相關欄位 (例如時間戳記、IP 位址、主機資訊和事件詳細資料),並將這些欄位對應至對應的 UDM 欄位,同時處理特定極端情況,並透過標籤和中繼資料豐富資料。

事前準備

  • 確認您有 Google SecOps 執行個體。
  • 確認您具備 Ansible AWX 的特殊權限。

在 Google SecOps 中設定動態饋給,以便擷取 Ansible AWX 記錄

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

為 webhook 動態饋給建立 API 金鑰

  1. 依序前往「Google Cloud 控制台」>「憑證」

    前往「憑證」

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

  3. 將 API 金鑰的存取權限制在 Google Security Operations 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:您用來驗證動態饋給而產生的密鑰。

在 Ansible AWX 中設定 Webhook

  1. 登入 AWX 執行個體。
  2. 前往「管理」下方的「通知」部分。
  3. 按一下「新增」。
  4. 設定 Webhook:

    • 名稱:為 webhook 提供易懂的名稱 (例如「Google SecOps Webhook」)。
    • 類型:從清單中選取「Webhook」
    • 目標網址:輸入 Google SecOps API 端點網址。
    • HTTP 方法:選取「POST」

    選用:HTTP 標頭:新增任何必要的驗證或內容類型標頭。舉例來說,您可能需要在 Authorization 標頭中加入權杖權杖。如需具體的標頭規定,請參閱 Google SecOps 說明文件。

  5. 按一下「儲存」即可建立 webhook。

  6. 前往「資源」下方的「專案」

  7. 選取要與 webhook 建立關聯的專案

  8. 在所選專案中,前往「通知」分頁。

  9. 選取要啟用的觸發事件,為先前建立的 Webhook 通知設定「開始」Success | Failure

通知現在會套用至與專案相關聯的所有範本。如要手動停用通知,請前往各個範本的「通知」欄位。

UDM 對應表

記錄欄位 UDM 對應 邏輯
agent.ephemeral_id observer.labels.value 原始記錄檔中的 agent.ephemeral_id 值。
agent.hostname observer.hostname 原始記錄檔中的 agent.hostname 值。
agent.id observer.asset_id 將「filebeat:」和原始記錄檔中的 agent.id 值連接起來。
agent.name observer.user.userid 原始記錄檔中的 agent.name 值。
agent.type observer.application 原始記錄檔中的 agent.type 值。
agent.version observer.platform_version 原始記錄檔中的 agent.version 值。
cloud.availability_zone principal.resource.attribute.labels.value 原始記錄檔中的 cloud.availability_zone 值。
cloud.instance.id principal.resource.product_object_id 原始記錄檔中的 cloud.instance.id 值。
cloud.instance.name principal.resource.name 原始記錄檔中的 cloud.instance.name 值。
cloud.machine.type principal.resource.attribute.labels.value 原始記錄檔中的 cloud.machine.type 值。
cloud.provider principal.resource.attribute.labels.value 原始記錄檔中的 cloud.provider 值。
event1 metadata.description 原始記錄檔中的 event1 值。如果沒有 event1,系統會使用 message 的值。
event1_data.host principal.hostname 原始記錄檔中的 event1_data.host 值。如果沒有 host_namehost,則會用做備用。
event1_data.remote_addr principal.ip 使用 grok 模式從 event1_data.remote_addr 擷取的 IP 位址。
event1_data.task security_result.detection_fields.value 原始記錄檔中的 event1_data.task 值。
event1_data.task_path principal.process.file.full_path 原始記錄檔中的 event1_data.task_path 值。
event1_data.task_uuid security_result.detection_fields.value 原始記錄檔中的 event1_data.task_uuid 值。
event1_data.uuid metadata.product_log_id 原始記錄檔中的 event1_data.uuid 值。
event1_display security_result.description 原始記錄檔中的 event1_display 值。
host principal.hostname 原始記錄檔中的 host 值。如果沒有 host_name,系統會使用備用值。如果是數字,則會轉換為字串。
host.architecture target.asset.hardware.cpu_platform 原始記錄檔中的 host.architecture 值。
host.fqdn target.administrative_domain 原始記錄檔中的 host.fqdn 值。
host.hostname target.hostname 原始記錄檔中的 host.hostname 值。
host.id target.asset.asset_id 「Host Id:」與原始記錄中的 host.id 值連接。
host.ip target.asset.ip 原始記錄檔中的 host.ip 陣列值。
host.mac target.mac 原始記錄檔中的 host.mac 陣列值。
host.os.codename target.asset.attribute.labels.value 原始記錄檔中的 host.os.codename 值。
host.os.kernel target.platform_patch_level 原始記錄檔中的 host.os.kernel 值。
host.os.name target.asset.attribute.labels.value 原始記錄檔中的 host.os.name 值。
host.os.platform target.platform 如果 host.os.platform 的值為「debian」,則 UDM 欄位會設為「LINUX」。
host.os.version target.platform_version 原始記錄檔中的 host.os.version 值。
host_name principal.hostname 原始記錄檔中的 host_name 值。
input.type network.ip_protocol 如果 input.type 的值為「tcp」,則 UDM 欄位會設為「TCP」。
level security_result.severity 根據 level 的值:「DEBUG」、「INFO」、「AUDIT」會對應至「INFORMATIONAL」;「ERROR」會對應至「ERROR」;「WARNING」會對應至「MEDIUM」。
level security_result.severity_details 原始記錄檔中的 level 值。
log.source.address principal.ip 使用 grok 模式從 log.source.address 擷取的 IP 位址。
log.source.address principal.port 使用 grok 模式從 log.source.address 擷取的通訊埠。
logger_name intermediary.application 原始記錄檔中的 logger_name 值。
message metadata.description 原始記錄檔中的 message 值。如果沒有 event1,系統會使用備用值。
metadata.event_type metadata.event_type 取決於剖析器邏輯,根據特定欄位的存在與否決定。如果有 log.source.addresshost.ip,則為「NETWORK_CONNECTION」。如果有 principal_hostnameevent1_data.remote_addr,則為「STATUS_UPDATE」否則為「GENERIC_EVENT」。
metadata.log_type metadata.log_type 已硬式編碼為「ANSIBLE_AWX」。
metadata.product_name metadata.product_name 已硬式編碼為「ANSIBLE_AWX」。
metadata.vendor_name metadata.vendor_name 已硬式編碼為「ANSIBLE_AWX」。
parent_uuid security_result.detection_fields.value 原始記錄檔中的 parent_uuid 值。
principal.resource.resource_type principal.resource.resource_type 如果有 cloud.instance.name,則硬式編碼為「VIRTUAL_MACHINE」。
observer.labels.key observer.labels.key 已硬式編碼為「ephemeral_id」。
principal.resource.attribute.labels.key principal.resource.attribute.labels.key 視對應的欄位而定,硬式編碼為「machine_type」、「provider」或「availability_zone」。
security_result.detection_fields.key security_result.detection_fields.key 視對應的欄位而定,硬式編碼為「parent_uuid」、「task」或「task_uuid」。
target.asset.attribute.labels.key target.asset.attribute.labels.key 根據對應的欄位,硬式編碼為「codename」或「os_name」。
timestamp metadata.event_timestamp 原始記錄檔中的 timestamp 值,經過剖析並轉換為時間戳記。
timestamp timestamp 原始記錄檔中的 timestamp 值,經過剖析並轉換為時間戳記。

異動

2022-11-09

  • 新建的剖析器。

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