收集 WordPress CMS 記錄
總覽
這個剖析器會從 JSON 或純文字格式的訊息中擷取 WordPress CMS 記錄。可處理 JSON 和非 JSON 格式的記錄,剖析相關欄位並對應至 UDM,包括使用者詳細資料、網路資訊、資源屬性和安全性結果詳細資料。剖析器也會執行多項資料轉換作業,例如轉換資料類型、合併欄位,以及處理 Kubernetes 和其他資源的特定記錄模式。
事前準備
請確認您已完成下列事前準備事項:
- Google SecOps 執行個體。
- WordPress 網站的特殊存取權。
- 啟用 Webhook 功能的外掛程式 (例如 WP Webhooks)。
設定動態饋給
在 Google SecOps 平台中,有兩種不同的進入點可設定動態饋給:
- 「SIEM 設定」>「動態消息」
- 內容中心 > 內容包
依序前往「SIEM 設定」>「動態饋給」,設定動態饋給
如要設定動態消息,請按照下列步驟操作:
- 依序前往「SIEM 設定」>「動態消息」。
- 按一下「新增動態消息」。
- 在下一個頁面中,按一下「設定單一動態饋給」。
- 在「動態饋給名稱」欄位中,輸入動態饋給的名稱,例如「Wordpress CMS Logs」。
- 選取「Webhook」做為「來源類型」。
- 選取「Wordpress」做為「記錄類型」。
- 點選「下一步」。
- 選用:指定下列輸入參數的值:
- 分割分隔符號:用於分隔記錄行的分隔符號,例如
\n
。
- 分割分隔符號:用於分隔記錄行的分隔符號,例如
- 點選「下一步」。
- 在「Finalize」畫面中檢查動態饋給設定,然後按一下「Submit」。
- 按一下「產生密鑰」,產生驗證這個動態消息的密鑰。
- 複製並儲存密鑰。您無法再次查看這個密鑰。如有需要,您可以重新產生新的密鑰,但這項操作會使先前的密鑰失效。
- 在「詳細資料」分頁中,從「端點資訊」欄位複製動態消息端點網址。您需要在用戶端應用程式中指定這個端點網址。
- 按一下 [完成]。
從內容中心設定動態饋給
為下列欄位指定值:
- 分割分隔符號:用於分隔記錄行的分隔符號,例如
\n
。
進階選項
- 動態饋給名稱:系統預先填入的值,用於識別動態饋給。
- 來源類型:將記錄收集到 Google SecOps 的方法。
- 資產命名空間:與動態饋給相關聯的命名空間。
擷取標籤:套用至這個動態饋給所有事件的標籤。
按一下「產生密鑰」,產生驗證這個動態消息的密鑰。
複製並儲存密鑰。您無法再次查看這個密鑰。如有需要,您可以重新產生新的密鑰,但這項操作會使先前的密鑰失效。
在「詳細資料」分頁中,從「端點資訊」欄位複製動態消息端點網址。您需要在用戶端應用程式中指定這個端點網址。
為 Webhook 資訊提供建立 API 金鑰
前往 Google Cloud 控制台 > 憑證。
按一下 [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 Security Operations 進行驗證的 API 金鑰。SECRET
:您產生的密鑰,用於驗證動態饋給。
設定 WordPress Webhook
- 透過 WordPress 外掛程式目錄安裝並啟用 WP Webhooks 外掛程式 (或您選擇的 Webhook 外掛程式)。
- 前往 WordPress 管理員選單中的「WP Webhooks」子選單 (通常位於設定下方)。
- 按一下頂端列選單中的「傳送資料」。
- 選取會觸發 Webhook 的 WordPress 動作。常見的例子包括 publish_post (發布新貼文時)、user_register (新使用者註冊時) 或 comment_post (發布新留言時)。這取決於您選取並傳送至 Google SecOps 的資料。
- 按一下「新增 Webhook 網址」。
- 設定 Webhook:
- 名稱:為 Webhook 提供描述性名稱 (例如「Google SecOps 動態饋給」)。
- Webhook 網址:貼上 Google SecOps 端點網址。
- 按一下「儲存 Webhook」。
UDM 對應表
記錄欄位 | UDM 對應 | 邏輯 |
---|---|---|
ClientIP |
principal.ip |
系統會從原始記錄的 ClientIP 欄位擷取用戶端的 IP 位址。 |
Code |
target.resource.attribute.labels.key |
「Code」值會指派為 target.resource.attribute.labels 物件中的鍵。 |
Code |
target.resource.attribute.labels.value |
原始記錄中的 Code 欄位值會指派為 target.resource.attribute.labels 物件中的值。 |
CurrentUserID |
target.user.userid |
原始記錄中的 CurrentUserID 會轉換為字串,並對應至 target.user.userid 欄位。 |
EditUserLink |
target.url |
原始記錄檔中的 EditUserLink 會對應至 target.url 欄位。 |
EventType |
metadata.product_event_type |
原始記錄檔中的 EventType 會對應至 metadata.product_event_type 欄位。 |
FirstName |
target.user.first_name |
原始記錄檔中的 FirstName 會對應至 target.user.first_name 欄位。 |
insertId |
metadata.product_log_id |
原始記錄檔中的 insertId 會對應至 metadata.product_log_id 欄位。 |
labels.compute.googleapis.com/resource_name |
additional.fields.key |
「資源名稱」值會指派為 additional.fields 物件中的鍵。 |
labels.compute.googleapis.com/resource_name |
additional.fields.value.string_value |
原始記錄中的 labels.compute.googleapis.com/resource_name 值會指派為 additional.fields 物件中的字串值。 |
labels.k8s-pod/app_kubernetes_io/instance |
target.resource.attribute.labels.key |
「Kubernetes IO Instance」值會指派為 target.resource.attribute.labels 物件中的鍵。 |
labels.k8s-pod/app_kubernetes_io/instance |
target.resource.attribute.labels.value |
原始記錄中的 labels.k8s-pod/app_kubernetes_io/instance 值會指派為 target.resource.attribute.labels 物件中的值。 |
labels.k8s-pod/app_kubernetes_io/managed-by |
target.resource.attribute.labels.key |
「Kubernetes IO Instance Manager」值會指派為 target.resource.attribute.labels 物件中的鍵。 |
labels.k8s-pod/app_kubernetes_io/managed-by |
target.resource.attribute.labels.value |
原始記錄中的 labels.k8s-pod/app_kubernetes_io/managed-by 值會指派為 target.resource.attribute.labels 物件中的值。 |
labels.k8s-pod/app_kubernetes_io/name |
target.resource.attribute.labels.key |
「Kubernetes IO Instance Name」值會指派為 target.resource.attribute.labels 物件中的鍵。 |
labels.k8s-pod/app_kubernetes_io/name |
target.resource.attribute.labels.value |
原始記錄中的 labels.k8s-pod/app_kubernetes_io/name 值會指派為 target.resource.attribute.labels 物件中的值。 |
labels.k8s-pod/controller-revision-hash |
target.resource.attribute.labels.key |
「Controller Revision Hash」值會指派為 target.resource.attribute.labels 物件中的鍵。 |
labels.k8s-pod/controller-revision-hash |
target.resource.attribute.labels.value |
原始記錄中的 labels.k8s-pod/controller-revision-hash 值會指派為 target.resource.attribute.labels 物件中的值。 |
labels.k8s-pod/helm_sh/chart |
target.resource.attribute.labels.key |
「Kubernetes IO Instance Manager SH」值會指派為 target.resource.attribute.labels 物件中的鍵。 |
labels.k8s-pod/helm_sh/chart |
target.resource.attribute.labels.value |
原始記錄中的 labels.k8s-pod/helm_sh/chart 值會指派為 target.resource.attribute.labels 物件中的值。 |
labels.k8s-pod/k8s-app |
target.resource.attribute.labels.key |
「Application」值會指派為 target.resource.attribute.labels 物件中的鍵。 |
labels.k8s-pod/k8s-app |
target.resource.attribute.labels.value |
原始記錄中的 labels.k8s-pod/k8s-app 值會指派為 target.resource.attribute.labels 物件中的值。 |
labels.k8s-pod/pod-template-generation |
target.resource.attribute.labels.key |
「Pod Template Generation」值會指派為 target.resource.attribute.labels 物件中的鍵。 |
labels.k8s-pod/pod-template-generation |
target.resource.attribute.labels.value |
原始記錄中的 labels.k8s-pod/pod-template-generation 值會指派為 target.resource.attribute.labels 物件中的值。 |
labels.k8s-pod/pod-template-hash |
target.resource.attribute.labels.key |
「Pod Template Hash」值會指派為 target.resource.attribute.labels 物件中的鍵。 |
labels.k8s-pod/pod-template-hash |
target.resource.attribute.labels.value |
原始記錄中的 labels.k8s-pod/pod-template-hash 值會指派為 target.resource.attribute.labels 物件中的值。 |
LastName |
target.user.last_name |
原始記錄檔中的 LastName 會對應至 target.user.last_name 欄位。 |
logName |
target.resource.attribute.labels.key |
「記錄名稱」值會指派為 target.resource.attribute.labels 物件中的鍵。 |
logName |
target.resource.attribute.labels.value |
原始記錄中的 logName 欄位值會指派為 target.resource.attribute.labels 物件中的值。 |
receiveTimestamp |
metadata.event_timestamp |
系統會剖析原始記錄中的 receiveTimestamp ,並對應至 metadata.event_timestamp 欄位。 |
resource.labels.cluster_name |
additional.fields.key |
「叢集名稱」值會指派為 additional.fields 物件中的鍵。 |
resource.labels.cluster_name |
additional.fields.value.string_value |
原始記錄中的 resource.labels.cluster_name 值會指派為 additional.fields 物件中的字串值。 |
resource.labels.cluster_name |
target.resource.resource_type |
如果存在 resource.labels.cluster_name ,系統會將「CLUSTER」值指派給 target.resource.resource_type 。 |
resource.labels.container_name |
metadata.product_event_type |
如果 resource.type 為「k8s_container」,系統會使用 resource.labels.container_name 的值和 resource.labels.namespace_name 建構 metadata.product_event_type 。 |
resource.labels.container_name |
target.resource.name |
原始記錄中的 resource.labels.container_name 值會指派給 target.resource.name 欄位。 |
resource.labels.location |
target.location.country_or_region |
原始記錄中的 resource.labels.location 值會指派給 target.location.country_or_region 欄位。 |
resource.labels.namespace_name |
additional.fields.key |
「命名空間名稱」值會指派為 additional.fields 物件中的鍵。 |
resource.labels.namespace_name |
additional.fields.value.string_value |
原始記錄中的 resource.labels.namespace_name 值會指派為 additional.fields 物件中的字串值。 |
resource.labels.namespace_name |
metadata.product_event_type |
如果 resource.type 為「k8s_container」,系統會使用 resource.labels.namespace_name 的值和 resource.labels.container_name 建構 metadata.product_event_type 。 |
resource.labels.node_name |
metadata.product_event_type |
如果 resource.type 為「k8s_node」,系統會使用 resource.labels.node_name 的值建構 metadata.product_event_type 。 |
resource.labels.pod_name |
additional.fields.key |
「Pod Name」值會指派為 additional.fields 物件中的鍵。 |
resource.labels.pod_name |
additional.fields.value.string_value |
原始記錄中的 resource.labels.pod_name 值會指派為 additional.fields 物件中的字串值。 |
resource.labels.project_id |
additional.fields.key |
「專案 ID」值會指派為 additional.fields 物件中的鍵。 |
resource.labels.project_id |
additional.fields.value.string_value |
原始記錄中的 resource.labels.project_id 值會指派為 additional.fields 物件中的字串值。 |
resource.type |
target.resource.resource_subtype |
原始記錄中的 resource.type 值會指派給 target.resource.resource_subtype 欄位。 |
Roles |
target.user.user_role |
原始記錄中的 Roles 欄位會轉換為大寫,並對應至 target.user.user_role 欄位。 |
SessionID |
network.session_id |
原始記錄檔中的 SessionID 會對應至 network.session_id 欄位。 |
sev |
security_result.severity |
sev 欄位的值會決定 security_result.severity 的值。「INFO」或「NOTICE」會對應至「INFORMATIONAL」,「WARN」會對應至「MEDIUM」,「ERR」則會對應至「ERROR」。 |
TargetUsername |
target.user.user_display_name |
原始記錄檔中的 TargetUsername 會對應至 target.user.user_display_name 欄位。 |
textPayload |
metadata.description |
如果 resource.type 為「k8s_node」,textPayload 的值會對應至 metadata.description 欄位。 |
textPayload |
network.application_protocol |
系統會使用 grok 模式,從 textPayload 欄位擷取通訊協定 (例如 HTTP)。 |
textPayload |
network.http.method |
系統會使用 grok 模式,從 textPayload 欄位擷取 HTTP 方法 (例如 GET、POST)。 |
textPayload |
network.http.referral_url |
系統會使用 grok 模式,從 textPayload 欄位擷取網址。 |
textPayload |
network.http.response_code |
HTTP 回應代碼會使用 grok 模式從 textPayload 欄位擷取,並轉換為整數。 |
textPayload |
network.received_bytes |
使用 grok 模式從 textPayload 欄位擷取收到的位元組,並轉換為不帶正負號的整數。 |
textPayload |
principal.ip |
來源 IP 位址是使用 grok 模式從 textPayload 欄位擷取。 |
textPayload |
security_result.description |
系統會使用 grok 模式從 textPayload 欄位擷取說明。 |
textPayload |
target.file.full_path |
路徑是使用 grok 模式從 textPayload 欄位中擷取。 |
UserAgent |
network.http.user_agent |
原始記錄檔中的 UserAgent 會對應至 network.http.user_agent 欄位。值「USER_RESOURCE_ACCESS」已指派給 metadata.event_type 。 |
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。