ダッシュボード フィルタを構成する
このドキュメントでは、データソース フィールドにフィルタを適用して、該当するグラフに表示されるデータを絞り込む方法について説明します。
フィルタを追加
フィルタを追加する手順は次のとおりです。
[Edit Dashboard] ページで、 [Filter] をクリックしてフィルタを追加します。
[Manage filters] ウィンドウで、[Add] をクリックして新しいフィルタを追加します。
[Field to filter] フィールドに、データのフィルタリングに使用するフィールドを入力します。サポートされているデータソースとフィールドの詳細については、サポートされているデータソースをご覧ください。
[Filter name] フィールドに、フィルタの名前を入力します。
[Apply to field] で、フィルタを適用するグラフを選択します。
省略可: フィルタのデフォルト値を設定します。
[Done] をクリックしてフィルタを追加し、[Manage filters] ウィンドウを閉じます。
SOAR データソース フィルタの制限事項
デフォルトの SOC ワークフロー モニタリング SOAR ダッシュボードと基盤となる SOAR データソースは、独自の environment フィールドを使用しており、SIEM データソースで使用される principal.namespace フィールドに直接マッピングされません。
その結果、SIEM ウィジェットと SOAR ウィジェットの両方を含む統合ダッシュボードを、principal.namespace にマッピングされた単一のグローバル フィルタを使用して環境でフィルタすることはできません。principal.namespace にフィルタを適用しても、SOAR ウィジェットには適用されません。両方のデータセットをフィルタするには、個別のフィルタを定義するか、各ソースのフィルタリング ロジックが明示的に定義されたカスタム ダッシュボードを作成する必要があります。
高度なフィルタリング
Google Security Operations は、組み込みのダッシュボード プラットフォーム内で高度なフィルタリングを提供します。特定のフィールドに関連付けられている基本フィルタとは異なり、詳細フィルタはクエリ変数(トークンとも呼ばれます)として機能します。この機能により、セキュリティ アナリストは、実行時に動的な値、複雑な正規表現、ブール論理を YARA-L クエリに直接挿入できます。
主な機能
- 柔軟なフィルタリング: 単一のフィルタ入力(
$token$など)を使用して、ダッシュボード内の複数のグラフにわたって複数のフィールドに基づいて同時にフィルタリングします。 - 動的ドロップダウン オプション: 別の YARA-L クエリの結果を使用して、フィルタ選択肢を動的に入力します。これにより、ユーザーは常に最新のデータから選択できます。
- 柔軟な形式: カスタムの接頭辞、接尾辞、区切り文字(正規表現の場合は
/、IN句の場合は,など)を定義して、ユーザーが選択した値をクエリに挿入する前に形式を設定します。 - デフォルト値: ダッシュボードがすぐにデータを読み込むようにデフォルト値を構成し、ユーザー操作が発生しない自動スケジュール設定レポートをサポートします。
- 複数選択のサポート: ユーザーが 1 つのトークンに対して複数の値を選択できるようにします。値はユーザー定義の区切り文字で結合されます。
セキュリティと権限
高度なフィルタリングでは既存のロールベース アクセス制御(RBAC)権限が使用されるため、新しい権限は必要ありません。次の Identity and Access Management(IAM)権限が関連しています。
| IAM 権限 | 目的 |
|---|---|
nativeDashboards.update |
ダッシュボード内で高度なフィルタを作成して構成します。 |
nativeDashboards.get |
ダッシュボードを表示し、フィルタ入力コントロールを使用します。 |
dashboardQueries.execute |
置換されたトークンを使用して、最終的に解決されたクエリを実行します。 |
データ RBAC の適用では、動的プルダウンの入力に使用されるクエリは、閲覧ユーザーのコンテキストで実行されます。これにより、ユーザーはアクセス権限のある値(特定の IP など)のみを表示できます。
高度なフィルタの構成と使用
以降のセクションでは、Google SecOps ダッシュボードで高度なフィルタを設定して使用するプロセスについて詳しく説明します。
新しい高度なフィルタを作成する
新しい高度なフィルタを作成する手順は次のとおりです。
- ダッシュボードで [フィルタの管理] ダイアログを開きます。
- [フィルタの種類] で 、[高度なフィルタ] の順に選択します。
- フィルタ名(ラベル)とトークン変数(
tokenなど)を入力します。- トークン変数の構文の制約: トークン変数名に使用できるのは英数字とアンダースコア(
^[a-zA-Z0-9_]+$)のみです。 - 一意性: トークン名は一意である必要があります。競合があると、フィルタを保存できません。
- トークン変数の構文の制約: トークン変数名に使用できるのは英数字とアンダースコア(
- [クエリから生成](動的 YARA-L 結果)または [手動入力](静的リスト)を選択します。
- [クエリから生成] が選択されている場合:
- クエリを入力し、期間を定義します。
- [検索を実行] をクリックします。
- [列を選択] プルダウン メニューから列を選択します。
- [プレビュー フィルタ プルダウン] プルダウン メニューから値を選択します。
- [手動入力] を選択した場合は、[手動入力] フィールドに値を入力して、[追加] をクリックします。
- [クエリから生成] が選択されている場合:
- 正規表現などの特定のロジックの値をラップする [プレフィックス] と [サフィックス] を選択します。
- YARA-L クエリの正規表現区切り文字内でトークンが使用されている場合(
principal.ip = /$token$/など)、通常は Prefix または Suffix を指定する必要はありません。 - トークンが正規表現区切り文字なしで使用されているが、アンカー付き正規表現(
principal.ip = $token$など)として機能させる場合は、[接頭辞] を/^に、[接尾辞] を$/に設定します。
- YARA-L クエリの正規表現区切り文字内でトークンが使用されている場合(
- [複数のオプションの選択を許可する] ボタンを切り替えて、区切り文字(正規表現
ORロジックの場合は|など)を定義します。 - プルダウン メニューから [デフォルト値] を選択します。
- [デフォルト値に接頭辞/接尾辞を適用する] チェックボックスをオンまたはオフにします。
- [完了] をクリックします。
グラフのクエリでトークンを使用する
ダッシュボードの作成者は、$ 記号で囲まれたトークンをグラフのクエリに手動で挿入する必要があります。
例:
principal.hostname = $hostname$re.regex(target.ip, $ip_regex$)
トークンの検証では、クエリで未定義のトークンが使用されている場合、黄色の警告バナーが表示されます。このような場合、システムはトークンをリテラル文字列として扱います。
読み込み時のデフォルトの動作
Google SecOps ダッシュボードの高度なフィルタは、文字列置換のみで動作します。標準フィルタとは異なり、システムはロジックを解釈しません。クエリがコンパイルされる前に、選択した値で $token$ の「検索と置換」を行います。クエリはテンプレートとして機能します。最終的なトークン置換後のクエリが構文的に正しいことを確認するのは、ユーザーの責任です。
デフォルト値とクエリの有効性
入力が指定されていない場合、システムはトークンを自動的に無視しないため、初期読み込みとスケジュール設定されたレポートで有効なクエリ構造を維持するデフォルト値を定義する必要があります。
有効な Default Value 構成の例を次に示します。
| ユースケース | 検索語句とコンテキスト | デフォルト値の構成 | 結果のロジック |
|---|---|---|---|
| 完全一致 | principal.hostname = $host$ |
誤り: 空のままにすると、構文が無効になります(principal.hostname =)。正しい: 有効な構文を維持するプレースホルダを使用します。 |
デフォルトが空の例: principal.hostname = が無効な YARA-L であるため、失敗します。 |
| 完全一致 | principal.hostname = "$host$" |
空欄のままにする | 成功: principal.hostname = "" に評価されます。これは結果を返しませんが、構文的には有効です。 |
| ワイルドカード(すべて表示) | principal.hostname = /.*$host$.*/ |
.* |
成功: すべての結果を返す「包括的」な正規表現である principal.hostname = /.*/ に評価されます。 |
| 正規表現(すべて表示) | principal.hostname = $host$ |
/.*/ |
成功: principal.hostname = /.*/ に評価され、すべてのホスト名と一致します。 |
| 正規表現アンカー | metadata.product_name = /^$token$$/ |
.* |
成功: ロード時に metadata.product_name = /^.*$/ に評価され、すべての商品が一致します。 |
| 整数(すべて表示) | principal.host = $token$ |
0 or 1=1 |
成功: principal.host = 0 or 1=1 に評価され、すべての結果が返されます。 |
| 整数(すべて表示) | cast.as_string(principal.host) = $token$ |
/.*/ |
成功: cast.as_string(principal.host) = /.*/ に評価され、ホスト整数を表す文字列とすべて一致します。 |
| デフォルトのすべてロジックを含む単一選択トークン | $log = metadata.log_type \n $log = if($log$ = "", metadata.log_type, $log$)\n match: $log |
空白のままにする(接頭辞: "、接尾辞: ") |
成功: デフォルトが空の場合、$log は "" になります。if ステートメントは $log = if("" = "", metadata.log_type, "") になり、$log = metadata.log_type に簡略化されます。クエリはすべてのログタイプと一致します。 |
| 単一の特定のデフォルト値 | $et = metadata.event_type \n $et = $et2$ \n match: $et |
EMAIL_TRANSACTION(接頭辞: "、接尾辞: ") |
成功: 読み込み時に $et = "EMAIL_TRANSACTION" に評価され、デフォルトの結果が特定のイベント カテゴリに制限されます。 |
| 正規表現の複数選択 | $log = metadata.log_type \n $log = $logs$ \n match: $log |
.*(接頭辞: /、接尾辞: /、区切り文字: |) |
成功: ロード時に $log = /.*/ に評価され、すべてのログタイプが一致します。複数の値(DNS、DHCP など)を選択すると、$log = /DNS|DHCP/ と評価されます。 |
| Always-True のデフォルト(すべて表示) | $et = metadata.event_type \n $et = $et4$ \n match: $et |
"USER_LOGIN" or 1=1(区切り文字: " or metadata.event_type = "、デフォルト値に接頭辞/接尾辞を適用する: オフ) |
成功: 読み込み時に $et = "USER_LOGIN" or 1=1 に評価され、すべてのイベントと一致します。特定のオプションを選択すると、文字列が明示的な OR 等価句に置き換えられます。 |
| Full Clause Injection(複数選択) | $et$ \n $et = metadata.event_type \n match: $et |
空のままにする(接頭辞: metadata.event_type = "、接尾辞: "、区切り文字: " or metadata.event_type = "、デフォルト値に接頭辞/接尾辞を適用する: チェックなし) |
成功: トークン自体がターゲット フィールドの述語全体を挿入します。USER_LOGIN と NETWORK_DNS を選択すると、metadata.event_type = "USER_LOGIN" or metadata.event_type = "NETWORK_DNS" に展開されます。 |
| 正規表現のデフォルトのキャッチオール | $pet = metadata.product_event_type \n $pet = $pet$ \n match: $pet |
/.*/(接頭辞: "、接尾辞: "、デフォルト値に接頭辞/接尾辞を適用する: オフ) |
成功: ロード時に $pet = /.*/ に評価され、すべての商品イベントタイプと一致します。特定の値を選択すると、引用符が適用されます(例: $pet = "USER_LOGIN")。 |
高度なフィルタの構文に関する考慮事項
システムでは、特殊文字(引用符やスラッシュなど)のエスケープは自動的に行われません。構成した接頭辞、接尾辞、区切り文字が、使用しているクエリ言語(YARA-L)の構文と一致していることを常に確認してください。
API 仕様
API の詳細な仕様については、AdvancedFilterConfig をご覧ください。
グローバル タイム フィルタを管理する
グローバル タイム フィルタは、グラフのデータソースに関係なく、すべてのグラフに適用されます。
グローバル タイム フィルタを適用できるグラフを選択するには、次の操作を行います。
[Edit Dashboard] ページで、 [Filter] をクリックしてフィルタを追加します。
[Manage filters] ウィンドウで、フィルタリストから [Global time filter] を選択します。
切り替えボタンをクリックして、グローバル タイム フィルタが有効になっていることを確認します。
[適用先] フィールドで、グローバル タイム フィルタを適用するグラフを選択します。
[Set default values] フィールドで、データが表示される期間を絶対値または相対値で設定します。
[Done] をクリックしてフィルタを有効にし、[Manage Filters] ウィンドウを閉じます。
ダッシュボード フィルタを適用する
フィルタを追加する手順は次のとおりです。
[Edit Dashboard] ページで、[Back] > [Filter] をクリックして、ダッシュボード フィルタを表示します。
[Dashboard filters] ウィンドウで、作成したフィルタを選択します。
選択したフィールドの値を入力します。
[適用] をクリックします。フィルタが適用されるグラフが新しいデータで更新されます。
グローバル タイム フィルタを変更する
ダッシュボードを開くと、グローバル タイム フィルタが適用され、デフォルトの期間のグラフが表示されます。
グローバル タイム フィルタの値を変更する手順は次のとおりです。
[スケジュール] をクリックします。
[Global Time Filter] ダイアログで、
past演算子またはbetween演算子を選択します。期間を選択します。
[適用] をクリックします。選択したグラフが、グローバル タイム フィルタに基づいて新しいデータで更新されます。
Past 演算子について
past 演算子は、指定された値と単位に基づいて開始時間を計算します。終了時刻は常に現在の時刻です。
開始時間の計算は単位によって異なります。
- 秒、分、時間: これらの単位は、現在のタイムスタンプから正確な秒数、分数、時間を差し引いて開始時間を計算します。
- 日、週、月、年: これらの単位では、開始時間が現在または前の期間の開始時点にスナップされます(たとえば、現在の日または月の開始時点)。
次の表に、現在のタイムスタンプが 2025 年 7 月 2 日の 13 時 13 分の場合の例を示します。
| 値 | 単位 | フィルタの開始時間 |
|---|---|---|
n |
秒 | 2025 年 7 月 2 日 13 時 13 分 0 秒から n 秒を引いた時刻 |
n |
分 | 2025 年 7 月 2 日 13 時 13 分 00 秒から n 分を引いた日時 |
n |
時間 | 2025 年 7 月 2 日 13 時 13 分 0 秒から n 時間を引いた日時 |
1 |
日 | 00:00:00 2025 年 7 月 2 日(当日開始) |
2 |
日 | 2025 年 7 月 1 日 0 時 0 分 0 秒(前日の開始) |
1 |
1 週間 | 今週の最初の日の 00:00:00。週の開始日は、システムのロケール設定によって異なります。 |
1 |
月 | 00:00:00 2025 年 7 月 1 日(当月の開始日) |
2 |
月 | 2025 年 6 月 1 日 0 時 0 分 0 秒(前月の開始日) |
1 |
年 | 2025 年 1 月 1 日 00:00:00(今年度の開始日) |
2 |
年 | 2024 年 1 月 1 日 00:00:00(前年の開始日) |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。