ダッシュボード フィルタを構成する
このドキュメントでは、データソース フィールドにフィルタを適用して、該当するグラフに表示されるデータを絞り込む方法について説明します。
フィルタを追加
フィルタを追加する手順は次のとおりです。
[Edit Dashboard] ページで、[Filter] をクリックしてフィルタを追加します。
[Manage filters] ウィンドウで、[Add] をクリックして新しいフィルタを追加します。
[Field to filter] フィールドに、データのフィルタに使用するフィールドを入力します。サポートされているデータソースとフィールドの詳細については、 サポートされているデータソースをご覧ください。
[Filter name] フィールドに、フィルタの名前を入力します。
[Apply to field] で、フィルタを適用するグラフを選択します。
省略可: フィルタのデフォルト値を設定します。
[Done] をクリックしてフィルタを追加し、[Manage filters] ウィンドウを閉じます。
高度なフィルタリング
Google Security Operations は、組み込みのダッシュボード プラットフォーム内で高度なフィルタリングを提供します。特定のフィールドに関連付けられている基本的なフィルタとは異なり、高度なフィルタはクエリ変数(トークンとも呼ばれます)として機能します。この機能により、セキュリティ アナリストは、実行時に動的な値、複雑な正規表現、ブールロジックを YARA-L クエリに直接挿入できます。
主な機能
- 柔軟なフィルタリング: 単一のフィルタ入力(
$token$など)を使用して、ダッシュボード内の複数のグラフの複数のフィールドに基づいて同時にフィルタリングします。 - 動的なプルダウン オプション: 別の YARA-L クエリの結果を使用して、フィルタの選択肢を動的に入力します。これにより、ユーザーは常に最新のデータから選択できます。
- 柔軟な書式設定: カスタムの接頭辞、接尾辞、区切り文字(正規表現の場合は
/、IN句の場合は,など)を定義して、ユーザーが選択した値をクエリに挿入する前に書式設定します。 - デフォルト値: デフォルト値を構成して、ダッシュボードがすぐにデータを読み込めるようにし、ユーザー インタラクションが発生しない自動スケジュール レポートをサポートします。
- 複数選択のサポート: ユーザーが定義した区切り文字で結合された単一のトークンに複数の値を選択できるようにします。
セキュリティと権限
高度なフィルタリングでは、既存のロールベース アクセス制御(RBAC)権限を使用するため、新しい権限は必要ありません。次の Identity and Access Management(IAM)権限が関連します。
| IAM 権限 | 目的 |
|---|---|
nativedashboards.update |
ダッシュボード内で高度なフィルタを作成して構成します。 |
nativeDashboards.get |
ダッシュボードを表示し、フィルタ入力コントロールを使用します。 |
dashboardQueries.execute |
置換されたトークンを使用して、最終的に解決されたクエリを実行します。 |
データ RBAC の適用では、動的なプルダウンの入力に使用されるクエリは、表示しているユーザーのコンテキストで実行されます。これにより、ユーザーはアクセス権のある値(特定の IP など)のみを表示できます。
高度なフィルタを構成して使用する
次のセクションでは、Google SecOps ダッシュボード内で高度なフィルタを設定して使用するプロセスについて詳しく説明します。
新しい高度なフィルタを作成する
新しい高度なフィルタを作成する手順は次のとおりです。
- ダッシュボードで [Manage Filters] ダイアログを開きます。
- を選択し、[Advanced Filter] を [Filter Type] として選択します。
- [Filter Name](ラベル)と [Token Variable](
tokenなど)を入力します。- トークン変数の構文の制約: トークン変数名には、英数字とアンダースコア(
^[a-zA-Z0-9_]+$)のみを使用できます。 - 一意性: トークン名は一意である必要があります。競合すると、フィルタを保存できません。
- トークン変数の構文の制約: トークン変数名には、英数字とアンダースコア(
- [Generate from Query](動的な YARA-L の結果)または [Manual Entry](静的リスト)を選択します。
- [Generate from Query] を選択した場合:
- クエリを入力し、[Time Range] を定義します。
- [Run Search] をクリックします。
- [Select Column] プルダウン メニューから列を選択します。
- [Preview Filter Dropdown] プルダウン メニューから値を選択します。
- [Manual entry] を選択した場合は、[Manual Entry] フィールドに値を入力して [Add] をクリックします。
- [Generate from Query] を選択した場合:
- 正規表現などの特定のロジックの値をラップする [Prefix] と [Suffix] を選択します。
- トークンが YARA-L クエリの正規表現区切り文字内で使用されている場合(
principal.ip = /$token$/など)、通常は [Prefix] または [Suffix] を指定する必要はありません。 - トークンが正規表現区切り文字なしで使用されているが、アンカー付き正規表現として機能させる場合(
principal.ip = $token$など)、[Prefix] を/^に、[Suffix] を$/に設定します。
- トークンが YARA-L クエリの正規表現区切り文字内で使用されている場合(
- [Allow Selection of Multiple Options] ボタンを切り替えて、[Delimiter](正規表現の
ORロジックの場合は|など)を定義します。 - プルダウン メニューから [Default Value] を選択します。
- [Apply Prefix/Suffix for Default Value(s)] チェックボックスをオンまたはオフにします。
- [Done] をクリックします。
グラフクエリでトークンを使用する
ダッシュボード作成者は、$ 記号で囲まれたトークンをグラフのクエリに手動で挿入する必要があります。
例:
principal.hostname = $hostname$re.regex(target.ip, $ip_regex$)
トークンの検証では、クエリで未定義のトークンが使用されている場合、黄色の警告バナーが表示されます。このような場合、システムはトークンをリテラル文字列として扱います。
読み込み時のデフォルトの動作
Google SecOps ダッシュボードの高度なフィルタは、文字列置換のみで動作します。標準フィルタとは異なり、システムはロジックを解釈しませんが、クエリがコンパイルされる前に、選択した値で $token$ の検索と置換を行います。クエリはテンプレートとして機能し、最終的なトークン置換クエリが構文的に正しいことを確認するのはユーザーの責任です。
デフォルト値とクエリの有効性
入力が指定されていない場合、システムはトークンを自動的に無視しないため、初期読み込みとスケジュール レポートで有効なクエリ構造を維持するデフォルト値を定義する必要があります。
効果的なデフォルト値 の構成の例を次に示します。
| ユースケース | 検索語句とコンテキスト | デフォルト値の構成 | 結果のロジック |
|---|---|---|---|
| 完全一致 | 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/ と評価されます。 |
| 常に 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 等価句に置き換えられます。 |
| 句全体の挿入(複数選択) | $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] を選択します。
切り替えをクリックして、グローバル タイム フィルタが有効になっていることを確認します。
[Apply to] フィールドで、グローバル タイム フィルタを適用するグラフを選択します。
[Set default values] フィールドで、絶対値または相対値を使用して、データを表示する期間を設定します。
[Done] をクリックしてフィルタを有効にし、[Manage Filters] ウィンドウを閉じます。
ダッシュボード フィルタを適用する
フィルタを追加する手順は次のとおりです。
[Edit Dashboard] ページで、[Back] > [Filter] をクリックしてダッシュボード フィルタを表示します。
[Dashboard filters] ウィンドウで、作成したフィルタを選択します。
選択したフィールドの値を入力します。
[適用] をクリックします。フィルタが適用されるグラフが新しいデータで更新されます。
グローバル タイム フィルタを変更する
ダッシュボードを開くと、グローバル タイム フィルタが適用され、デフォルトの期間のグラフが表示されます。
グローバル タイム フィルタの値を変更する手順は次のとおりです。
[Schedule] をクリックします。
[Global Time Filter] ダイアログで、
past演算子またはbetween演算子を選択します。期間を選択します。
[適用] をクリックします。選択したグラフが、グローバル タイム フィルタに基づいて新しいデータで更新されます。
過去の演算子について
past 演算子は、指定した値と単位に基づいて開始時間を計算します。終了時刻は常に現在時刻です。
開始時間の計算は単位によって異なります。
- 秒、分、時間: これらの単位は、現在のタイムスタンプから正確な秒数、分数、時間を引いて開始時間を計算します。
- 日、週、月、年: これらの単位は、開始時間を現在または前の期間の開始日(現在の日の開始日や月の開始日など)にスナップします。
次の表に、現在のタイムスタンプが 2025 年 7 月 2 日 13:13 の場合の例を示します。
| 値 | ユニット | フィルタの開始時間 |
|---|---|---|
n |
秒 | 2025 年 7 月 2 日 13:13:00 から n 秒前 |
n |
分 | 2025 年 7 月 2 日 13:13:00 から n 分前 |
n |
時間 | 2025 年 7 月 2 日 13:13:00 から n 時間前 |
1 |
日 | 2025 年 7 月 2 日 00:00:00(現在の日の開始) |
2 |
日 | 2025 年 7 月 1 日 00:00:00(前日の開始) |
1 |
1 週間 | 現在の週の最初の日の 00:00:00。週の開始日は、システムのロケール設定によって異なります。 |
1 |
月 | 2025 年 7 月 1 日 00:00:00(現在の月の開始) |
2 |
月 | 2025 年 6 月 1 日 00:00:00(前月の開始) |
1 |
年 | 2025 年 1 月 1 日 00:00:00(現在の年の開始) |
2 |
年 | 2024 年 1 月 1 日 00:00:00(前年の開始) |
さらにサポートが必要な場合コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。