WordPress CMS ログを収集する

以下でサポートされています。

概要

このパーサーは、JSON 形式または書式なしテキスト形式のメッセージから WordPress CMS ログを抽出します。JSON 形式と JSON 以外の形式の両方のログを処理し、関連するフィールドを解析して UDM にマッピングします。これには、ユーザーの詳細、ネットワーク情報、リソース属性、セキュリティ結果の詳細が含まれます。また、パーサーは、データ型の変換、フィールドの統合、Kubernetes やその他のリソースの特定のロギング パターンの処理など、いくつかのデータ変換も実行します。

始める前に

  • Google SecOps インスタンスがあることを確認します。
  • WordPress ウェブサイトへの特権アクセス権があることを確認します。
  • Webhook 機能を有効にするプラグイン(WP Webhooks など)。

WordPress ログを取り込むように Google SecOps でフィードを構成する

  1. [SIEM 設定] > [フィード] に移動します。
  2. [新しく追加] をクリックします。
  3. [フィード名] フィールドに、フィードの名前を入力します(例: Wordpress ログ)。
  4. [ソースタイプ] として [Webhook] を選択します。
  5. [ログタイプ] として [Wordpress] を選択します。
  6. [次へ] をクリックします。
  7. 省略可: 次の入力パラメータの値を指定します。
    • 分割区切り文字: ログ行を区切るために使用される区切り文字(\n など)。
    • アセットの名前空間: アセットの名前空間
    • 取り込みラベル: このフィードのイベントに適用されるラベル。
  8. [次へ] をクリックします。
  9. [Finalize] 画面でフィードの設定を確認し、[送信] をクリックします。
  10. [秘密鍵を生成する] をクリックして、このフィードを認証するためのシークレット キーを生成します。
  11. シークレット キーをコピーして保存します。この秘密鍵を再び表示することはできません。必要に応じて、新しい秘密鍵を再生成できますが、この操作により以前の秘密鍵は無効になります。
  12. [詳細] タブで、[エンドポイント情報] フィールドから、フィードのエンドポイント URL をコピーします。このエンドポイント URL は、クライアント アプリケーションで指定する必要があります。
  13. [完了] をクリックします。

Webhook フィードの API キーを作成する

  1. Google Cloud コンソール > [認証情報] に移動します。

    [認証情報] に移動

  2. [認証情報を作成] をクリックして [API キー] を選択します。

  3. API キーのアクセスを Google Security Operations API に制限します。

エンドポイント URL を指定する

  1. クライアント アプリケーションで、Webhook フィードで指定された HTTPS エンドポイント URL を指定します。
  2. 次の形式でカスタム ヘッダーの一部として API キーとシークレット キーを指定して、認証を有効にします。

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

    推奨事項: API キーは URL ではなくヘッダーとして指定してください。Webhook クライアントがカスタム ヘッダーをサポートしていない場合は、次の形式のクエリ パラメータを使用して API キーとシークレット キーを指定できます。

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

次のように置き換えます。

  • ENDPOINT_URL: フィードのエンドポイント URL。
  • API_KEY: Google Security Operations の認証に使用する API キー。
  • SECRET: フィードの認証用に生成したシークレット キー。

WordPress Webhook を構成する

  1. WordPress プラグイン ディレクトリから WP Webhooks プラグイン(または選択した Webhook プラグイン)をインストールして有効にします。
  2. WordPress 管理者メニューの [WP Webhooks] サブメニューに移動します(通常は [設定] の下にあります)。
  3. 上部のバーメニューで [Send Data](データを送信)をクリックします。
  4. Webhook をトリガーする WordPress アクションを選択します。一般的な例としては、publish_post(新しい投稿が公開されたとき)、user_register(新しいユーザーが登録されたとき)、comment_post(新しいコメントが投稿されたとき)などがあります。これは、選択して Google SecOps に送信するデータによって異なります。
  5. [Add Webhook URL] をクリックします。
  6. Webhook を構成します。
    • 名前: Webhook にわかりやすい名前を付けます(例: Google SecOps フィード)。
    • Webhook URL: Google SecOps エンドポイントの URL を貼り付けます。
  7. [Save Webhook] をクリックします。

UDM マッピング テーブル

ログフィールド UDM マッピング ロジック
ClientIP principal.ip クライアントの IP アドレスは、未加工ログの ClientIP フィールドから抽出されます。
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 元のログの EditUserLinktarget.url フィールドにマッピングされます。
EventType metadata.product_event_type 元のログの EventTypemetadata.product_event_type フィールドにマッピングされます。
FirstName target.user.first_name 元のログの FirstNametarget.user.first_name フィールドにマッピングされます。
insertId metadata.product_log_id 元のログの insertIdmetadata.product_log_id フィールドにマッピングされます。
labels.compute.googleapis.com/resource_name additional.fields.key 値「Resource Name」が 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 テンプレートの生成」が 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 元のログの LastNametarget.user.last_name フィールドにマッピングされます。
logName target.resource.attribute.labels.key 値「Log Name」が 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 値「Cluster Name」が 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 値「Namespace Name」が 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 値「Project 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 元のログの SessionIDnetwork.session_id フィールドにマッピングされます。
sev security_result.severity sev フィールドの値によって、security_result.severity の値が決まります。「INFO」または「NOTICE」は「INFORMATIONAL」にマッピングされ、「WARN」は「MEDIUM」にマッピングされ、「ERR」は「ERROR」にマッピングされます。
TargetUsername target.user.user_display_name 元のログの TargetUsernametarget.user.user_display_name フィールドにマッピングされます。
textPayload metadata.description resource.type が「k8s_node」の場合、textPayload の値は metadata.description フィールドにマッピングされます。
textPayload network.application_protocol プロトコル(HTTP など)は、grok パターンを使用して textPayload フィールドから抽出されます。
textPayload network.http.method HTTP メソッド(GET、POST など)は、grok パターンを使用して textPayload フィールドから抽出されます。
textPayload network.http.referral_url 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 元のログの UserAgentnetwork.http.user_agent フィールドにマッピングされます。値「USER_RESOURCE_ACCESS」が metadata.event_type に割り当てられます。

変更点

2024-05-07

  • バグの修正:
  • 未解析のログと破棄されたログを解析するようにパーサー ロジックを変更しました。

2023-05-25

  • 新しく作成されたパーサー。