Google Cloud コンソールで検出結果のクエリを実行する

このページでは、Google Cloud コンソールの [検出結果] ページの [クエリエディタ] パネルを使用して、Security Command Center の検出結果クエリを作成および編集する方法について説明します。

クエリを使用して特定の検出結果を取得し、[検出結果クエリの結果] パネルに表示される検出結果をフィルタリングします。

検出結果クエリを編集する

[クエリエディタ] パネルでは、クエリにフィルタを追加して編集し、プロパティや属性値に基づいて検出結果を選択できます。値の有無、部分文字列の一致などのフィルタを使用できます。

クエリを編集すると、エディタによりクエリ内のエラーがすべてハイライト表示されるため、クエリを送信する前にエラーを修正できます。

[クエリエディタ] パネルでクエリを編集する手順は次のとおりです。

  1. Google Cloud コンソールで、[検出結果] ページに移動します。

    [検出結果] に移動

  2. 必要に応じて、Google Cloud プロジェクトまたは組織を選択します。

    プロジェクト セレクタ

    [検出結果] ページに [クエリのプレビュー] フィールドにデフォルトのクエリが表示されます。

  3. 右側の [クエリのプレビュー] セクションで、 [クエリを編集] またはパネル展開アイコン をクリックして、クエリエディタパネルを開きます。

  4. [フィルタを追加] を選択して、事前定義された属性フィルタを閲覧、検索し、クエリに追加します。

    [フィルタを選択] ダイアログでは、サポートされている検出属性と値を選択できます。 クエリフィルタのダイアログ

    1. 検出属性を選択するか、[検出属性の検索] ボックスに名前を入力します。使用可能なサブ属性のリストが表示されます。
    2. サブ属性を選択します。評価オプションの選択フィールドは、検出結果クエリの結果パネルの検出結果にあるサブ属性値のリストの上に表示されます。
    3. 選択したサブ属性値の評価オプションを選択します。評価オプションと、それらが使用する演算子と関数の詳細については、[フィルタの追加] メニューのクエリ演算子をご覧ください。
    4. [適用] を選択します。

      ダイアログが閉じて、クエリが更新されます。

    5. 検出クエリに必要な属性がすべて表示されるまで、この操作を繰り返します。

あるいは、Security Command Center API を使用して検出結果フィルタを作成すると同じ方法で、検出結果クエリを手動で作成できます。クエリを入力すると、オートコンプリート メニューが表示され、そこでフィルタ名と関数を選択できます。

[検出結果] ページのクエリビルダーで作業している場合は、競合を避けるため、[クイック フィルタ] セクションが無効になります。

クエリ演算子

Security Command Center の検出結果のクエリ ステートメントは、ほとんどの Google Cloud APIs でサポートされている演算子をサポートしています。

以下に、演算子の使用例を示します。

  • state="ACTIVE" AND NOT mute="MUTED"
  • create_time>"2023-08-15T19:05:32.428Z"
  • resource.parent_name:"prod"
  • severity="CRITICAL" OR severity="HIGH"

次のリストでは、検出結果のクエリ ステートメントでサポートされているすべての演算子と関数を示します。

  • 文字列:
    • =(完全一致)
    • :(部分一致)
  • 数値:
    • <><=>=(不等式)
    • =!=(等式)
  • ブール値:
    • =(等式)
  • 論理関係:
    • AND
    • OR
    • NOT または -
  • 式のグループ化::
    • ()(かっこ)
  • 配列:
    • contains(): 指定したフィルタに一致する要素を 1 つ以上含む配列フィールドを使用して、検出結果をクエリする関数
    • containsOnly(): 指定したフィルタに一致する要素のみを含む配列フィールドを使用して、検出結果をクエリする関数
  • IP アドレス:
    • inIpRange()(指定した CIDR 範囲内の IP アドレスをクエリする関数)

[フィルタの追加] メニューのクエリ演算子

Google Cloud コンソールのクエリエディタにある [フィルタの追加] メニューでは、クエリ演算子と関数が次のような単語やフレーズで表示されます。

  • 等しい: この正確なフィルタ値を持つ検出結果に一致します
  • 等しくない: この正確なフィルタ値を持たない検索結果に一致します。
  • 次の日付より後: 作成時刻または更新時刻が、指定した時間より後の検出結果に一致します。
  • 次の日付より前: 作成時刻または更新時刻が、指定した時刻より前の検出結果に一致します。
  • 次を含む: [キーワード] フィールドに入力したテキストを含むフィルタ値を持つ検索結果に一致します。
  • 次を含まない: [キーワード] フィールドに入力したテキストを含まないフィルタ値を持つ検索結果に一致します。
  • 配列を含む属性を検索する場合:
    • すべてを含む: [キーワード] フィールドに入力したすべてのテキストを含む配列値がある検出結果に一致します。
    • すべてを含む: [キーワード] フィールドに入力したすべてのテキストを含む配列値がある検出結果に一致します。
    • いずれも含まない: [キーワード] フィールドに入力したテキストを含む配列値がない検出結果に一致します。
    • 次のみを含む: [キーワード] フィールドに入力した値のみを含み、他の値を含まない配列属性を持つ検出結果に一致します。
  • IP アドレスの場合:
    • IP 範囲内: 指定した CIDR 範囲内の IP アドレスがある検出結果に一致します。
    • IP 範囲内に存在しない: 指定した CIDR 範囲にない IP アドレスがある検出結果に一致します。

クエリ関数

クエリ関数は、一般的なクエリ演算子より複雑な属性値の評価を行います。

contains 関数

contains 関数は、同じ検出結果に複数回出現する可能性がある属性や属性サブフィールドを評価するために使用します。

内部では、これらの属性や属性サブフィールドは配列データ構造の要素に格納されるため、配列型属性と呼ばれます。

たとえば、特定の検出結果では、複数のネットワーク接続を参照できるため、connections 属性が配列型属性になります。同様に、特定の脅威検出結果では、セキュリティ侵害の指標として複数の IP アドレスを参照できるため、indicator 属性の ip_addresses サブフィールドが配列型属性です。

contains 関数では、次の構文を使用します。

contains(ARRAY_ATTRIBUTE_NAME, SUBFILTER)

次のように置き換えます。

  • ARRAY_ATTRIBUTE_NAME: 配列に格納された配列型属性の名前。配列型属性が別の属性のサブフィールドの場合は、属性名とサブフィールド名をドットで区切って指定します。

    次の例では、配列型属性 ip_addressesindicator のサブフィールドであるため、ARRAY_ATTRIBUTE_NAME では両方が指定されています。

    contains(indicator.ip_addresses, elem="192.0.2.80")
  • SUBFILTER: 配列型属性の各インスタンスの評価方法を定義する式。標準の Security Command Center のクエリ演算子と評価ステートメントがサポートされています。

    確認する値が配列型属性のサブフィールドにある場合は、式の左側でサブフィールド名を指定します。 次の contains 関数は、connections 配列の各要素を評価します。これは、サブフィールドを含む配列型属性です。クエリされる値は、配列型フィールドではない destination_ip サブフィールドにあります。クエリする値は、elem パラメータではなく、サブフィールド名の destination_ip で指定します。

    contains(connections, destination_ip="192.0.2.80")

    サブフィールドが array-type 属性の場合は、親の式の左側にある array-type 属性を指定し、式の右側にある elem パラメータを使用して検索する値を指定します。たとえば、次の contains 関数は、indicator 属性のサブフィールドである ip_addresses 配列の各要素を評価します。indicator 属性は、配列型フィールドではありません。

    contains(indicator.ip_addresses, elem="192.0.2.80")

[フィルタの追加] メニューの contains 関数

[フィルタの追加] メニューでは、評価する検出結果属性に応じて contains 関数は一覧表示されるか、必要な別のフィルタ オプションを選択すると自動的に追加されます。

たとえば、Indicator 属性の IP addresses サブフィールドでは、次のフィルタ オプションを選択できます。

  • 次のいずれかを含む
  • すべてを含む
  • いずれも含まない

一方、Connections 属性の Destination IP サブフィールドでフィルタし、[IP 範囲内] を選択した場合は、次の例に示すように、contains 関数がクエリ ステートメントに自動的に追加されます。

contains(connections, inIpRange(destination_ip, "2001:db8::/32"))

contains 関数の詳細については、配列型フィールドでのフィルタリングをご覧ください。

containsOnly 関数

containsOnly 関数を使用すると、サブフィルタで指定された値のみを含む配列型の属性またはサブフィールドの検出結果をクエリできます。

containsOnly 関数では、次の構文を使用します。

containsOnly(ARRAY_ATTRIBUTE_NAME,SUBFILTER)

次のように置き換えます。

  • ARRAY_ATTRIBUTE_NAME: 配列タイプ属性の名前。配列型属性が別の属性のサブフィールドの場合は、属性名とサブフィールド名をドットで区切って指定します。Google Cloud コンソールでクエリを実行する場合、この関数は iam_bindings.member 配列属性と iam_bindings.role 配列属性のみをサポートします。

  • SUBFILTER: 配列型属性の各要素の評価方法を定義する式。標準の Security Command Center のクエリ演算子と評価ステートメントがサポートされています。

[フィルタの追加] メニューの次のフィルタ オプションで containsOnly 関数を使用します。

  • IAM バインディング > メンバー: 指定したユーザー、サービス アカウント、グループを含む検出結果のみを選択します。

  • IAM バインディング > ロール: 指定したロールを含む検出結果のみを選択します。

次の例は、Google Cloud コンソールの検出結果クエリを示しています。これは、example-group グループのユーザーの、ミュート解除されたアクティブな検出結果を返します。

state="ACTIVE"
  AND NOT mute="MUTED"
  AND containsOnly(iam_bindings,member="group:example-group@example.com")

inIpRange 関数

inIpRange 関数は、選択した検出属性の IP アドレスが CIDR 表記(CIDR 範囲)で指定した IP アドレスの範囲内にあるかどうかを確認します。次の例に、inIpRange 関数の構文を示します。

inIpRange(ATTRIBUTE_WITH_IP, "CIDR_RANGE")

[フィルタの追加] メニューの次のフィルタ オプションで inIpRange 関数を使用します。

  • IP 範囲内: 指定した範囲内の IP アドレスを含む検出結果のみを選択します。
  • IP 範囲内に存在しない: 指定した範囲内の IP アドレスを含まない検出結果のみを選択します。

次の例では、Google Cloud コンソールで、access オブジェクトの caller_ip サブフィールドに CIDR 範囲が 2001:db8::/32 の IPv6 アドレスを含み、ミュートされていないアクティブな検出結果を返す検出結果クエリを示します。

state="ACTIVE"
AND NOT mute="MUTED"
AND inIpRange(access.caller_ip, "2001:db8::/32")

次の例では、access オブジェクトの caller_ip サブフィールドに IPv4 CIDR 範囲 192.0.2.0/24 の IP アドレスを含まず、ミュートされていないアクティブな検出結果を返す検出結果クエリを示します。

state="ACTIVE"
AND NOT mute="MUTED"
AND NOT inIpRange(access.caller_ip, "192.0.2.0/24")

検出結果に複数回出現する属性に IP アドレスがある場合、contains 関数と inIpRange 関数を使用して、IP アドレスに対する各属性のインスタンスを確認します。例:

contains(connections, inIpRange(source_ip, "192.0.2.0/24"))

contains() 関数についての詳細は、contains 関数をご覧ください。

クエリの検出結果の属性

Security Command Center は、クエリで指定された属性フィルタと照合して、保存されている検出結果の属性を評価し、表示する検出結果を選択します。

ほとんどの検出結果の属性に対してクエリを実行できます。一部の属性はすべての検出結果で共通です。その他の属性は、特定のセキュリティの問題、検出カテゴリ、または検出サービスに固有の場合があります。

[クエリエディタ] パネルの [フィルタを追加] メニューでは、選択した属性のタイプや、属性にサブフィールドまたは値の配列があるかどうかに応じて、属性フィルタに適用できるオプションが異なります。

[フィルタを追加] メニューで、次の最上位属性のいずれかをクリックして、検出結果クエリで使用できるサブ属性と値を表示します。

  • 検索中
  • リソース
  • アクセス(access
  • 攻撃の発生可能性スコア
  • バックアップと障害復旧
  • コンプライアンス(compliances[]
  • 接続(connections[]
  • コンタクト
  • コンテナ
  • データベース
  • データの引き出し(exfiltration
  • ファイル
  • IAM バインディング(iamBindings[]
  • 指標
  • カーネル ルートキット
  • Kubernetes
  • MITRE ATT&CK(mitreAttack
  • プロセス(processes[]
  • セキュリティ対策
  • Sensitive Data Protection
  • 脆弱性