Gemini を使用してパーサー拡張機能を作成する
このガイドでは、セキュリティ アナリストと検出エンジニアが自然言語プロンプトを使用してデフォルトのログパーサーを拡張する方法について説明します。AI パーサー拡張機能を使用すると、複雑なパーサー構文や正規表現を記述することなく、追加のフィールドをすばやく抽出し、条件付きロジックを適用して、未加工ログを Unified Data Model(UDM)にマッピングできます。
Google SecOps のデフォルトのログ パーサーがログソースを解析するときに、顧客固有のカスタム属性、省略可能なフィールド、特殊なテレメトリーが省略されることがあります。AI パーサー拡張機能を使用すると、次のことができます。
- 未加工ログから追加のフィールドを抽出し、標準の UDM フィールドまたはカスタム
additional.fieldsにマッピングします。 - 条件付きロジックと値の変換(文字列アクションを UDM 列挙型にマッピングするなど)を適用します。
- マルチターン チャット セッションで、生成された拡張機能をゼロからではなくインタラクティブに調整します。
主な用語
- 統合データモデル(UDM): Google SecOps でログデータの保存と分析に使用される標準データ構造。
始める前に
開始する前に、次の前提条件を満たしていることを確認してください。
- 使用量割り当て: 24 時間ごとに最大 10 個の AI パーサー拡張機能生成セッションを実行できます。セッションあたりのメッセージ数は最大 5 個です。
プロンプト作成のベスト プラクティス
初回で正確なパーサー拡張機能を取得するには、次のプロンプト ガイドラインに沿って操作します。
- ソースとターゲットを明示的に指定する: 抽出する未加工ログの部分と、入力する正確な UDM フィールド パス(
principal.ip、target.user.email_addresses、security_result.actionなど)を明確に記述します。 - 完全一致のリテラルには引用符を使用する: 非構造化ログでリテラル文字列、区切り文字、サンプル値を参照する場合は、それらを引用符で囲みます(例:
"198.51.100.0"、"allow")。 - additional.fields を使用してカスタム フィールドを処理する: 専用の UDM フィールドがない独自の属性またはベンダー固有の属性については、明確なキー名(
additional.fields["application"]など)を使用してadditional.fieldsにマッピングするように AI に指示します。
パーサー拡張機能を生成する
パーサー拡張機能のワークフローは、Google SecOps の次のいずれかの場所から開始できます。
- [パーサーの設定] ページ: [パーサー] ページに移動して、既存のログ パーサーを選択して拡張します。
- 検索ページ: [検索] ページでログを調査するときに、解析されていないフィールドを含むイベントから拡張機能作成フローを直接開きます。
[パーサー] 設定ページからパーサー拡張機能を生成する手順は次のとおりです。
- Google SecOps で、[パーサー] 設定ページに移動します。
- 拡張するログタイプを検索します。
- パーサーの横にあるメニューをクリックして、拡張するオプションを選択します。
- [RAW LOG] フィールドに、解析するログのサンプルを貼り付けます。
- [拡張機能の方法] セクションで、[AI で生成] タブを選択します。
- プロンプト フィールドに、抽出の平易な英語の説明を入力します。
[確認] をクリックします。
システムが拡張機能コードを生成し、UDM 出力を更新します。
パーサー拡張機能を改良する
マルチターン チャット セッションで、パーサー拡張機能を繰り返し構築して改良できます。フォローアップ プロンプトを送信すると、AI は以前に生成された拡張機能に新しい指示を適用します。以前のターンの既存のマッピングと条件ロジックは、オーバーライドまたは削除を明示的にリクエストしない限り、自動的に保持されます。
- プロンプト フィールドに、生成されたコードを調整するためのフォローアップ指示を入力します。
- [確認] をクリックします。
- プロンプトごとに、生成された拡張機能コードをプレビューし、UDM 出力のサンプルを調べて、ロジックを確認または調整します。
次のワークフローの例は、反復的な改善によって複数のターンにわたってパーサー拡張機能が構築される様子を示しています。
- ターン 1(最初の抽出):
- ユーザーのプロンプト:
"Extract source IP '198.51.100.0' to principal.ip and destination IP '198.51.100.1' to target.ip." - 結果: AI が拡張機能マッピング
principal.ipとtarget.ipを生成します。
- ユーザーのプロンプト:
- ターン 2(加法マッピング):
- ユーザーのプロンプト:
"Also map virtual system string 'vsys1' to observer.administrative_domain." - 結果: AI は、ターン 1 の IP マッピングを維持しながら、拡張機能を更新して
observer.administrative_domainをマッピングします。
- ユーザーのプロンプト:
- ターン 3(条件付きの絞り込み):
- ユーザーのプロンプト:
"In addition, map action string 'allow' to security_result[0].action as ALLOW." - 結果: AI は、以前のすべての抽出の上に条件付きアクション列挙マッピングを組み込みます。
- ユーザーのプロンプト:
パーサー拡張機能を検証する
- [検証] をクリックします。
- プロセスが完了したら、検証指標を確認します。
リファレンス情報にアクセスする
次の例を参考に、正確なプロンプトを作成してください。
構造化ログのプロンプト
データが名前付きキー、属性、XML タグに整理されている構造化ログの場合は、プロンプトでフィールド名またはパスを指定します。
構造化ログのサンプル - JSON 形式
{
"insertId": "u0mlpdesys",
"logName": "projects/sample-project-id/logs/cloudaudit.googleapis.com%2Fdata_access",
"protoPayload": {
"authenticationInfo": {
"principalEmail": "analyst@example-domain.com"
},
"methodName": "GenerateAccessToken",
"requestMetadata": {
"callerIp": "203.0.113.195",
"callerSuppliedUserAgent": "google-cloud-sdk gcloud/392.0.0"
},
"resourceName": "projects/-/serviceAccounts/110649196922301550006",
"serviceName": "iamcredentials.googleapis.com"
}
}
構造化ログのプロンプトの例
| プロンプトの指示 | ソース フィールドまたはキー | ターゲット UDM フィールド |
|---|---|---|
"Map principalEmail to principal.user.email_addresses." |
principalEmail |
principal.user.email_addresses |
"Extract callerIp to principal.ip and methodName to metadata.product_event_type." |
callerIp、methodName |
principal.ip、metadata.product_event_type |
"Map resourceName to target.resource.name and serviceName to target.application." |
resourceName、serviceName |
target.resource.name、target.application |
"From XML tags, map /Event/System/Hostname to principal.hostname." |
/Event/System/Hostname |
principal.hostname |
非構造化ログのプロンプト
非構造化ログの場合は、サンプルログ、位置参照、説明ラベルからリテラル値を直接指定します。
非構造化 syslog メッセージの例
<14>Nov 9 18:52:45 198.51.100.1 1,2021/11/09 18:52:45,007051000184334,TRAFFIC,start,2561,2021/11/09 18:52:45,198.51.100.0,198.51.100.1,0.0.0.0,0.0.0.0,any allow,,,ping,vsys1,LAN,LAN,ethernet1/2,ethernet1/2,LFPpan,2021/11/09 18:52:45,9729,6,0,0,2048,0,0x100000,icmp,allow,444,444,0,6
非構造化ログのプロンプトの例
| プロンプトの指示 | リテラル値または説明の例 | ターゲット UDM フィールド |
|---|---|---|
"Extract source IP '198.51.100.0' to principal.ip and destination IP '198.51.100.1' to target.ip." |
'198.51.100.0'、'198.51.100.1' |
principal.ip、target.ip |
"Extract the application string 'ping' from the log and map it to additional.fields['application']." |
'ping' |
additional.fields["application"] |
"Map rule name 'any allow' to security_result.rule_id." |
'any allow' |
security_result[0].rule_id |
"Extract sent bytes and received bytes into network.sent_bytes and network.received_bytes." |
ログ内の数値バイトカウンタ | network.sent_bytes、network.received_bytes |
条件付きロジックのプロンプト
未加工のログ値を特定の UDM 列挙型に正規化する条件付きロジックについて説明します。
- 列挙型の正規化:
"If the firewall action in the log is 'allow', set security_result.action to ALLOW; otherwise set security_result.action to BLOCK." - 条件付きフィールド マッピング:
"If the protocol is 'icmp', map the ICMP type and code into network.icmp.type and network.icmp.code." - ステータス マッピング:
"When the log status contains 'success' or '0', set security_result.severity to INFO; if it contains 'error', set it to ERROR."
使用量上限
最適なパフォーマンスとリソースの可用性を維持するため、AI パーサー拡張機能では次の使用量上限が適用されます。
- 24 時間あたり 10 セッション: 各お客様には、24 時間あたり最大 10 個の AI パーサー拡張機能生成セッションが割り当てられます。
- セッションあたり 5 件のメッセージ: 1 つのセッション内で、最初のプロンプトと後続の改良ターンを含む最大 5 件のメッセージを送信して、パーサー拡張機能を作成および改良できます。
セッション メッセージの上限に達した場合は、現在の拡張機能を保存するか、新しいセッションを開始できます。
次のステップ
- 他のパーサー拡張メソッドの詳細については、パーサー拡張機能を開発するをご覧ください。
- 拡張機能のサンプル スニペットとシナリオについては、パーサー拡張機能の例をご覧ください。
- 未加工ログを UDM に解析する方法の概要については、ログ解析の概要をご覧ください。
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。