Wordpress CMS のログを収集する
概要
このパーサーは、JSON または書式なしテキスト形式のメッセージから WordPress CMS ログを抽出します。JSON 形式と JSON 以外の形式の両方のログを処理し、関連するフィールドを解析して UDM にマッピングします。これには、ユーザーの詳細、ネットワーク情報、リソース属性、セキュリティ結果の詳細が含まれます。また、パーサーは、データ型の変換、フィールドの統合、Kubernetes やその他のリソースの特定のログパターンの処理など、いくつかのデータ変換も行います。
始める前に
次の前提条件を満たしていることを確認します。
- Google SecOps インスタンス。
- WordPress ウェブサイトへの特権アクセス権。
- Webhook 機能を有効にするプラグイン(WP Webhooks など)。
フィードを設定する
Google SecOps プラットフォームでフィードを設定するには、次の 2 つのエントリ ポイントがあります。
- [SIEM 設定] > [フィード]
- [Content Hub] > [Content Packs]
[SIEM 設定] > [フィード] でフィードを設定する
フィードを構成する手順は次のとおりです。
- [SIEM Settings] > [Feeds] に移動します。
- [Add New Feed] をクリックします。
- 次のページで [単一のフィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例: Wordpress CMS Logs)。
- [Source type] として [Webhook] を選択します。
- [ログタイプ] として [Wordpress] を選択します。
- [次へ] をクリックします。
- 省略可: 次の入力パラメータの値を指定します。
- Split delimiter: ログ行を区切るために使用される区切り文字(
\n
など)。
- Split delimiter: ログ行を区切るために使用される区切り文字(
- [次へ] をクリックします。
- [Finalize] 画面でフィードの設定を確認し、[Submit] をクリックします。
- [秘密鍵を生成する] をクリックして、このフィードを認証するためのシークレット キーを生成します。
- 秘密鍵をコピーして保存します。この秘密鍵を再び表示することはできません。必要に応じて、新しい秘密鍵を再生成できますが、この操作により以前の秘密鍵は無効になります。
- [詳細] タブで、[エンドポイント情報] フィールドから、フィードのエンドポイント URL をコピーします。このエンドポイント URL をクライアント アプリケーション内で指定する必要があります。
- [完了] をクリックします。
コンテンツ ハブからフィードを設定する
次のフィールドに値を指定します。
- Split delimiter: ログ行を区切るために使用される区切り文字(
\n
など)。
詳細オプション
- フィード名: フィードを識別する事前入力された値。
- ソースタイプ: Google SecOps にログを収集するために使用される方法。
- アセットの名前空間: フィードに関連付けられた名前空間。
Ingestion Labels: このフィードのすべてのイベントに適用されるラベル。
[秘密鍵を生成する] をクリックして、このフィードを認証するためのシークレット キーを生成します。
秘密鍵をコピーして保存します。この秘密鍵を再び表示することはできません。必要に応じて、新しい秘密鍵を再生成できますが、この操作により以前の秘密鍵は無効になります。
[詳細] タブで、[エンドポイント情報] フィールドから、フィードのエンドポイント URL をコピーします。このエンドポイント URL をクライアント アプリケーション内で指定する必要があります。
Webhook フィード用の API キーを作成する
Google Cloud コンソール > [認証情報] に移動します。
[認証情報を作成] をクリックして [API キー] を選択します。
API キーのアクセスを Google Security Operations API に制限します。
エンドポイント URL を指定する
- クライアント アプリケーション内で、Webhook フィードで提供される HTTPS エンドポイント URL を指定します。
次の形式でカスタム ヘッダーの一部として 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 を構成する
- WordPress プラグイン ディレクトリから WP Webhooks プラグイン(または選択した Webhook プラグイン)をインストールして有効化します。
- WordPress 管理者メニューの [WP Webhooks] サブメニューに移動します(通常は [設定] にあります)。
- 上部のバーメニューで [Send Data](データを送信)をクリックします。
- Webhook をトリガーする WordPress アクションを選択します。一般的な例としては、publish_post(新しい投稿が公開されたとき)、user_register(新しいユーザーが登録したとき)、comment_post(新しいコメントが投稿されたとき)などがあります。これは、選択して Google SecOps に送信するデータによって異なります。
- [Webhook URL を追加] をクリックします。
- Webhook を構成する:
- 名前: Webhook にわかりやすい名前を付けます(例: Google SecOps フィード)。
- Webhook URL: Google SecOps エンドポイント URL を貼り付けます。
- [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 |
未加工ログの 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 |
値「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 テンプレート ハッシュ」が 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 |
値「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 |
未加工ログの 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 |
プロトコル(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 |
未加工ログの UserAgent は network.http.user_agent フィールドにマッピングされます。metadata.event_type には「USER_RESOURCE_ACCESS」という値が割り当てられます。 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。