計算フィールドの作成と管理
このガイドは、セキュリティ運用におけるデータ拡充を自動化したいセキュリティ アナリストと SOC マネージャーを対象としています。論理式を使用して計算フィールドを作成し、既存のケースデータとアラートデータから新しい値を導出する方法について説明します。この方法を使用すると、手動でのデータ入力が不要になり、重要な指標をリアルタイムで更新できます。この方法を実装すると、プラットフォームの分析機能が向上し、フィールドの自動入力によってインシデントのトリアージが迅速化されます。
計算フィールドを使用すると、Google Security Operations のケースとアラート内で新しいデータポイントを動的に導出できます。論理式を定義することで、既存のシステム フィールドまたはカスタム フィールドに基づいて値を計算できます。計算された値は自動的に評価され、ユーザーが選択した既存のカスタム フィールド([ターゲット フィールド] というラベルが付いています)にリアルタイムで保存されます。
一般的なユースケース
次のシナリオは、組織が計算フィールドを活用して運用効率とデータの明確性を向上させる最も一般的な方法を示しています。
自動リスク スコアリング
- 目的: イベントの量または優先度レベルに基づいてケースを分類します。
- 価値: トリアージを標準化し、リスクの高いインシデントをチームがすぐに確認できるようにします。
データの正規化
- [目的]: 命名規則に基づいてアラートに [テスト] または [本番環境] のフラグを設定します。
- 価値: アナリストがメインビューから重要でないテストデータをフィルタで除外できるため、ノイズが軽減されます。
主な用語
- 数式: 関数、演算子、フィールド参照を使用して定義するテキストベースの論理式。値を計算するために使用します。
- ターゲット フィールド: 計算結果が保存される既存のカスタム フィールド (自由形式テキスト タイプ)。
- 依存関係: 数式内で参照されるフィールド。依存関係フィールドの値が変更されると、計算フィールド が同期的に再評価されます。
始める前に
計算を作成する前に、環境が次の技術要件を満たしていることを確認してください。
- 権限: [設定] メニューへの管理アクセス権と、ケースデータを管理する権限が必要です。
- 環境チェック: ターゲット フィールドとして機能する既存の有効なカスタム フィールド (自由形式テキスト タイプ)があることを確認します。
システムでターゲット フィールドとして使用する既存のカスタム フィールドがあることを確認します。ない場合は、次の手順を行います。
- [設定] > [ケースデータ] > [カスタム フィールド] に移動します。
- 新しいカスタム フィールドを作成し、タイプを [自由形式テキスト] に設定します。
カスタム フィールドの詳細については、カスタム フィールドを作成するをご覧ください。
技術的な制約と検証ルール
計算を定義する前に、ターゲット フィールドとロジックが次のシステム制約に従っていることを確認してください。これらのルールは、Google SecOps エンジンが数式の結果を検証して永続化する方法を規定します。
フィールド検証の条件
計算エンジンは、[ターゲット フィールド] として指定されたフィールドに対して、次の要件を厳格に適用します。
- データ型: フィールドは自由形式テキスト タイプである必要があります。
- [運用ステータス]: フィールドは [有効] である必要があります。削除または無効になったフィールドに書き込むことはできません。
- 依存関係のマッピング: 循環ロジックを防ぐため、フィールドが別の計算フィールドの依存関係である場合、そのフィールドをターゲットにすることはできません。
フィールドのスコープ設定
スコープが Both のカスタム フィールド を作成すると、コンテキストごとに一意のエントリが生成されます。これにより、同じ論理カテゴリ内のケースとアラートに対して別々のロジックを維持できます。
[ターゲット フィールド] メニューで、数式に関連する特定のスコープを選択する必要があります。
- ケースのスコープ:
CaseCustom.YourField(例:CaseCustom.RiskLevel)というラベルが付いています。 - アラートのスコープ:
AlertCustom.YourField(例:AlertCustom.RiskLevel)というラベルが付いています。
計算フィールドの作成と管理
このセクションでは、新しい計算を定義する方法と、設定プロセスで発生する一般的な問題に対処する方法について説明します。
新しい計算を作成する
新しい計算を作成するには、次の操作を行います。
- [設定] > [ケースデータ] > [計算フィールド] に移動します。
- [ add [Add]] をクリックします。
- [計算フィールド名] フィールドに、計算の一意の名前と説明を入力します。
[ターゲット フィールド] 領域で、結果を保存する既存のカスタム フィールド を選択します。
- 想定されるエラー: 選択したフィールドがメニューに表示されない。
- 修正手順: カスタム フィールド が有効で、[自由形式テキスト] に設定されており、別の計算の依存関係になっていないことを確認します。
テキスト エディタで、サポートされている関数、演算子、構文を使用して数式を作成します。論理式(
IF ([case.priority] == "High") THEN "Urgent" ELSE "Standard"など)を作成します。詳細については、数式の言語と構文をご覧ください。[保存] をクリックします。
- 想定されるエラー: 保存が拒否され、赤いエラー ハイライトが表示される。
- 修正手順:
IF条件の周りの丸かっこが抜けている、キーワードが小文字になっているなど、構文エラーがないか確認します。
高度なアセットとリファレンスにアクセスする
数式は、組み込みの演算子と関数すべてに対して、厳格な文法と大文字と小文字の区別ルールに従う必要があります。次の技術仕様を使用して、計算が有効であることを確認してください。
数式の例
次のテンプレートは、関数と演算子を組み合わせてデータ拡充を自動化する方法を示しています。これらのスニペットをコピーして、特定のフィールド名と組織の要件に合わせて調整できます。
例 1: リスクレベルの設定
この数式を使用して、ケースのタイトルに含まれる特定のキーワードに基づいてケースを分類します。
- ターゲット フィールド:
CaseCustom.risk_level(テキスト) - 目標: 緊急インシデントに「高」ステータスを自動的に割り当てる
数式:
IF (CONTAINS([case.name], "urgent")) THEN "High" ELSE "Medium"
例 2: テストアラートのフラグ設定
このロジックは、テストデータを識別してラベル付けし、アナリストがメインビューをフィルタして本番環境のインシデントに集中できるようにします。
- ターゲット フィールド:
AlertCustom.is_test(テキスト) - 目標: アラート名で
-TEST接尾辞またはTEST文字列を検出する 数式:
IF (CONTAINS([alert.name], "TEST") OR ENDS_WITH([alert.name], "-TEST")) THEN "TRUE" ELSE "FALSE"
例 3: 条件の組み合わせ
この例では、イベントの量と既存の優先度レベルの両方に基づいてレビューの優先順位を付けるためのネストされたロジックを示します。
- ターゲット フィールド:
CaseCustom.review_status(テキスト) - 目標: ログの長さが重要で、優先度が
Lowでない場合にのみ、手動レビューをトリガーする。 数式:
IF (LENGTH(\[AlertCustom.event\_details\]) \> 100 AND NOT IS(\[case.priority\], "Low")) THEN "Needs Review" ELSE "Auto-Closed"
数式の言語と構文
計算エンジンでは、組み込みの演算子、キーワード、関数すべてに対して大文字と小文字が区別されます。キーワード(IF, THEN, ELSE, AND, OR, NOT など)と関数名(CONTAINS, LENGTH, STARTS_WITH, ENDS_WITH, IS, IS_NOT, DOES_NOT_CONTAIN など)は大文字で記述する必要があります。ただし、関数内と等価演算子内のテキスト文字列のテストでは、大文字と小文字は区別されません。たとえば、「phishing」を検索すると、「PHISHING」または「Phishing」が正常に一致します。
データ型とリテラル
リテラルは、式で使用される固定値です。オペレーションと関数引数で互換性のある型を使用することをおすすめします。
| タイプ | 構文とルール | 例 |
|---|---|---|
| STRING | 二重引用符で囲まれたテキスト。 | "critical"、"N/A" |
| NUMBER | 整数または 10 進数。 | 100、3.14 |
| BOOLEAN | 大文字にする必要があります。 | TRUE、FALSE |
| NULL | 空の値を表します。 | NULL |
フィールド参照
別のフィールドの値を使用するには、フィールド名を角かっこで囲みます([object.field_name] など)。
- 構文ルール: フィールド参照には接頭辞を使用する必要があります。接頭辞(
case.やAlertCustom.など)の後にピリオドとフィールド名を指定する必要があります。フィールド名には、文字、数字、アンダースコア、スペースを使用できます。例:[case.name]、[alert.priority]、[AlertCustom.my_custom_field]。 - 次のシステム フィールドを使用できます:
case.name、case.stage、case.priority、alert.name、alert.priority、alert.rule_generator。 - ユーザー定義のカスタム フィールドをすべて参照できます。
- 計算フィールド の数式で別の計算フィールド を参照することはできません。
演算子
比較と論理演算には演算子を使用します。丸かっこ () を使用すると、デフォルトの優先順位をオーバーライドして式をグループ化できます。
- 比較演算子:
==、!=、>、>=、<、<= - 論理演算子:
AND、OR、NOT - 演算子の優先順位:
NOT、>、>=、<、<=、AND、OR、
条件式
このシステムでは、IF (condition) THEN expression1 ELSE expression2 構文を使用して条件付きロジックがサポートされています。ELSE 部分は省略可能です。省略して条件が FALSE の場合、結果はデフォルトで NULL になります。
条件は、TRUE または FALSE に評価される式である必要があります。
例: IF ( [CaseCustom.score] > 75 ) THEN "High Risk" ELSE "Low Risk"。
関数
関数は、すべて大文字にする必要がある事前定義されたオペレーションです。次の表に、データの操作と評価でサポートされている関数を示します。
| 関数 | 説明 | 構文 | 戻り値の型 |
|---|---|---|---|
CONTAINS(field, substring) |
テキスト フィールドに substring が含まれているかどうかを確認します(大文字と小文字を区別しない)。 | CONTAINS([case.name], "phishing") |
BOOLEAN |
DOES_NOT_CONTAIN(field, substring) |
テキスト フィールドに substring が含まれていないかどうかを確認します(大文字と小文字を区別しない)。 | DOES_NOT_CONTAIN([case.name], "test") |
BOOLEAN |
LENGTH(field) |
フィールドの文字数を返します。 | LENGTH([case.name]) |
NUMBER |
STARTS_WITH(field, prefix) |
フィールドが接頭辞で始まるかどうかを確認します(大文字と小文字を区別しない)。 | STARTS_WITH([CaseCustom.hostname], "srv-") |
BOOLEAN |
ENDS_WITH(field, suffix) |
フィールドが接尾辞で終わるかどうかを確認します(大文字と小文字を区別しない)。 | ENDS_WITH([AlertCustom.filename], ".exe") |
BOOLEAN |
IS(field, literal) |
フィールドの値が literal と等しいかどうかを確認します(大文字と小文字を区別しない)。 | IS([alert.priority], "High") |
BOOLEAN |
IS_NOT(field, literal) |
フィールドの値が literal と等しくないかどうかを確認します(大文字と小文字を区別しない)。 | IS_NOT([alert.priority], "Low") |
BOOLEAN |
予約済みのキーワードと識別子
計算エンジンでは、論理演算と関数用に特定の単語が予約されています。これらの用語は、数式内でカスタム フィールド名やその他の識別子として使用できません。
- 論理:
AND, OR, NOT, IF, THEN, ELSE - 値:
NULL, TRUE, FALSE - 関数:
CONTAINS, LENGTH, STARTS_WITH, ENDS_WITH, IS, IS_NOT, DOES_NOT_CONTAIN
データ型の互換性
評価が正常に行われるように、すべてのオペレーションと関数引数で互換性のある型を使用していることを確認してください。サポートされている型は、STRING、NUMBER、BOOLEAN、NULL です。
数式の最終出力は、ターゲット フィールド の想定される型と一致する必要があります。ターゲット フィールド は「自由形式テキスト」に制限されているため、数式は最終的に文字列またはターゲットの形式に暗黙的にキャストできる値に解決する必要があります。
書式設定と空白文字
通常、トークン間のスペース、タブ、改行は無視されますが、キーワードと識別子を区切るには厳密に必要です。空白文字を戦略的に使用して、複雑な複数行の数式を構造化し、保守性とピアレビューを向上させます。
効果的な数式を作成する
計算エンジンは空白文字に対して柔軟ですが、ロジックエラーを防ぎ、トラブルシューティングを簡素化するために、次の書式設定標準に従ってください。
- 明示的なグループ化: 標準の優先順位に依存する場合でも、丸かっこを使用してオペレーションの順序を明確に定義します。これにより、論理的な曖昧さを防ぐことができます。
- 視覚的な構造: 演算子(
==, AND, OR)の周りにスペースを適用し、ネストされたIF/THENステートメントに改行を挿入して、ロジックをスキャン可能にします。 型の検証: 評価エラーを防ぐため、数式の最終出力がターゲット フィールドの想定される型と一致していることを常に確認してください。
IF ( (IS([CaseCustom.event_count], "100") AND NOT IS([case.priority], "Low")) OR CONTAINS([case.name], "Critical") ) THEN "Needs Immediate Review" ELSE "Standard Review"
トラブルシューティング
このセクションでは、パフォーマンスの期待値について説明し、数式の作成または管理時に発生する一般的なデプロイの問題に対するセルフサービスによる修正方法を提供します。
レイテンシと上限
依存関係フィールドが変更されると、計算フィールド が同期的に評価されます。システム パフォーマンスを維持するため、計算フィールド で別の計算フィールド を参照することはできません。システムは、再帰と処理の遅延を防ぐために、これらの連鎖依存関係をブロックします。
エラーの修復
数式を手動で記述すると、構文やデータ型の不一致が原因でエラーが発生する可能性があります。次の表を使用して、特定のジャーニー関連のエラーコードを、正確で対応可能な修正にマッピングします。
| エラーの種類 | 問題 | 修正 |
|---|---|---|
| 構文 | 数式が文法ルールに違反しています(丸かっこが一致しない、キーワードが小文字になっているなど)。 | すべての IF 条件を () で囲み、すべてのキーワードが大文字であることを確認します。 |
| 検証 | 数式が不明なフィールド([\case.typo] など)を参照しているか、型の不一致が発生しています。 | 角かっこ内のフィールド名を確認し、出力がターゲット フィールドの型と一致していることを確認します。 |
| 評価 | 数式は有効ですが、実行中に失敗し、多くの場合 #ERROR! が表示されます。 | LENGTH() などの関数に文字列以外の値を渡すなど、ランタイムの問題がないか確認します。 |
ターゲット フィールドを変更または削除する
システムは、数式が依存するフィールドを積極的に保護して、データの完全性を維持します。ターゲット フィールドとして使用されているカスタム フィールド を削除または変更しようとすると、アクションがブロックされ、計算フィールド でアクティブに使用されていることを示す警告が表示されます。
検証とテスト
新しい計算を保存したら、ケースまたはアラートに移動して依存関係フィールドを更新し、結果を確認します。ターゲット フィールドに想定される値がリアルタイムで入力されることを確認します。
さらにサポートが必要な場合コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。