計算フィールドを構成する
このガイドは、セキュリティ運用内でデータ拡充を自動化したいセキュリティ アナリストと SOC マネージャーを対象としています。この記事では、論理式を使用して既存のケースデータとアラートデータから新しい値を導き出す計算フィールドを作成して管理する方法について説明します。この方法を使用すると、手動でデータを入力する必要がなくなり、重要な指標がリアルタイムで更新されます。完了すると、プラットフォームの分析機能が向上し、フィールドの自動入力によってインシデントのトリアージが迅速化されます。
計算フィールドを使用すると、Google Security Operations のケースとアラート内で新しいデータポイントを動的に導出できます。論理式を定義すると、既存のシステム フィールドまたはカスタム フィールドに基づいて値を計算できます。計算された値は自動的に評価され、ユーザーが選択した既存のカスタム フィールド([Target Field] とラベル付けされている)にリアルタイムで保存されます。
一般的なユースケース
次のシナリオは、組織が計算フィールドを活用して運用効率とデータの明瞭性を向上させる最も一般的な方法を表しています。
自動化されたリスク スコアリング
- 目的: イベントの量または優先度レベルに基づいてケースを分類します。
- 価値: トリアージを標準化し、リスクの高いインシデントをチームがすぐに確認できるようにします。
データの正規化
- 目的: 命名規則に基づいてアラートに「テスト」または「本番環境」のフラグを設定します。
- 価値: アナリストがメインビューから重要でないテストデータをフィルタで除外できるようにすることで、ノイズを減らします。
主な用語
- 数式: 関数、演算子、フィールド参照を使用して値を計算するために定義するテキストベースの論理式。
- ターゲット フィールド: 計算式の計算結果が保存される既存のカスタム フィールド(自由形式のテキスト タイプ)。
- 依存関係: 数式内で参照されるフィールド。依存関係フィールドの値が変更されると、計算フィールドが同期的に再評価されます。
始める前に
計算を作成する前に、環境が次の技術要件を満たしていることを確認してください。
- 権限: [設定] メニューへの管理者アクセス権と、ケースデータを管理する権限が必要です。
- 環境チェック: ターゲット フィールドとして機能する既存の有効なカスタム フィールド(自由形式のテキスト タイプ)があることを確認します。
システムでターゲット フィールドとして使用する既存のカスタム フィールドがあることを確認します。それ以外の場合は、次の手順を行います。
- [設定] > [ケースデータ] > [カスタム フィールド] に移動します。
- 新しいカスタム フィールドを作成し、タイプを [Free Text] に設定します。
カスタム フィールドの詳細については、カスタム フィールドを作成するをご覧ください。
技術的な制約と検証ルール
計算を定義する前に、ターゲット フィールドとロジックが次のシステム制約に従っていることを確認してください。これらのルールは、Google SecOps エンジンが数式の結果を検証して永続化する方法を管理します。
フィールドの検証条件
計算エンジンは、ターゲット フィールドとして指定されたフィールドに対して、次の要件を厳密に適用します。
- データ型: フィールドは [Free Text](自由形式テキスト)型である必要があります。
- 運用ステータス: フィールドは [有効] である必要があります。削除または無効化されたフィールドにシステムが書き込むことはできません。
- 依存関係のマッピング: 循環ロジックを防ぐため、フィールドが別の計算フィールドの依存関係になっている場合、そのフィールドをターゲットにすることはできません。
フィールドのスコープ指定
Both スコープのカスタム フィールドを作成すると、コンテキストごとに一意のエントリが生成されます。これにより、同じ論理カテゴリ内でケースとアラートのロジックを別々に維持できます。
[Target Field] メニューで、数式に関連する特定のスコープを選択する必要があります。
- ケースのスコープ:
CaseCustom.YourField(CaseCustom.RiskLevelなど)としてラベル付けされます。 - アラート スコープ:
AlertCustom.YourField(AlertCustom.RiskLevelなど)としてラベル付けされます。
計算フィールドを作成して管理する
このセクションでは、新しい計算を定義する方法と、設定プロセスで発生する一般的な問題に対処する方法について説明します。
新しい計算を作成する
新しい計算を作成する手順は次のとおりです。
- [設定] > [ケースデータ] > [計算フィールド] に移動します。
- [ 追加 ] 追加 をクリックします。
- [計算フィールド名] フィールドに、計算の一意の名前と説明を入力します。
[Target Field] 領域で、結果を保存する既存の [Custom Field] を選択します。
- 想定される失敗: 選択したフィールドがメニューに表示されません。
- 修正手順: [カスタム フィールド] が有効で、[フリーテキスト] に設定されており、別の計算の依存関係になっていないことを確認します。
テキスト エディタで、サポートされている関数、演算子、構文を使用して数式を作成します。論理式(
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) |
テキスト フィールドに部分文字列が含まれているかどうかを確認します(大文字と小文字は区別されません)。 | CONTAINS([case.name], "phishing") |
BOOLEAN |
DOES_NOT_CONTAIN(field, 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) |
フィールド値がリテラルと等しいかどうかを確認します(大文字と小文字は区別されません)。 | IS([alert.priority], "High") |
BOOLEAN |
IS_NOT(field, 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() などの関数に文字列以外の値を渡すなど、実行時の問題がないか確認します。 |
ターゲット フィールドを変更または削除する
システムは、数式で使用されているフィールドを積極的に保護し、データの完全性を維持します。ターゲット フィールドとして使用されているカスタム フィールドを削除または変更しようとすると、システムはアクションをブロックし、計算フィールドでアクティブに使用されていることを示す警告を表示します。
検証とテスト
新しい計算を保存したら、ケースまたはアラートに移動して依存関係フィールドを更新し、結果を確認します。[Target Field] に期待どおりの値がリアルタイムで入力されることを確認します。
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。