Logging を Google SecOps と統合する

このドキュメントでは、Cloud Logging を Google Security Operations と統合する方法について説明します。

ユースケース

ロギングの統合では、Google SecOps の機能を使用して次のユースケースをサポートします。

  • フォレンジック ログの取得: 調査中に高度なクエリを実行して、 Google Cloud 環境全体で特定のセキュリティ イベントを見つけます。

  • 脅威ハンティングの自動化: ハンドブックを使用して、既知のセキュリティ侵害インジケーター(IoC)または不審なパターンについてログを定期的にクエリします。

始める前に

Google SecOps で ロギング統合を構成する前に、次の前提条件の手順を完了します。

  1. サービス アカウントを作成し、必要なロールを付与します。

  2. 次のいずれかの認証方法を選択して構成します。

    • オプション 1: Workload Identity(推奨): この方法では、サービス アカウントの権限借用によって有効期間の短い一時的なアクセス トークンを使用するため、シークレットを保存する必要はありません。

    • オプション 2: サービス アカウントの JSON キー: この方法は、静的で有効期間の長いシークレット キーファイルに依存しています。この方法は、環境で Workload Identity 認証を使用できない場合にのみ使用してください。

サービス アカウントを作成する

インテグレーション用のサービス アカウントを作成する手順は次のとおりです。

  1. Google Cloud コンソールで、[IAM と管理] > [サービス アカウント] に移動します。

    [サービス アカウント] に移動

  2. [追加サービス アカウントを作成] をクリックします。

  3. 名前(例: 「SecOps Logging Integration」)と説明を入力し、[作成して続行] をクリックします。

  4. [このサービス アカウントにプロジェクトへのアクセスを許可する] ステップで、ログ閲覧者(roles/logging.viewer)ロールを追加します。

  5. [完了] をクリックします。このサービス アカウントのメールアドレスは、構成時に使用されます。

Workload Identity の認証情報を構成する

この方法または JSON キーの方法を選択して、統合を認証します。Workload Identity を使用する方法は、

サービス アカウントの権限借用を使用して、有効期間の短い一時アクセス トークンを取得します。

一意のインスタンス ID を特定する

Google SecOps インスタンスにサービス アカウントの権限を付与することは、アクセスを保護するための最後のステップです。

  1. Google SecOps で、[Content Hub] > [Response Integrations] に移動します。

  2. [Cloud Logging] インテグレーションを検索して選択し、[Workload Identity Email] にサービス アカウントのメールアドレスを入力します。

  3. [割り当てプロジェクト ID] に有効なプロジェクト ID を入力します。

  4. [保存] > [テスト] をクリックします。テストは失敗することが想定されています。

  5. [Test] の右にある close_small をクリックし、gke-init-python@... または soar-python@... で始まる ID メールアドレスのエラー メッセージを検索します。

  6. この一意のメールアドレスをコピーします。

Google Cloudでインスタンス ID を承認する

取得した一意の ID を承認すると、サービス アカウントの権限借用が可能になり、プラットフォームは静的キーなしでユーザーに代わって操作できます。

  1. Google Cloud コンソールで、[IAM と管理] > [サービス アカウント] に移動します。

    [サービス アカウント] に移動

  2. ターゲット サービス アカウントを選択し、[権限> アクセス権を付与] に移動します。

  3. 一意のメールアドレスを [新しいプリンシパル] フィールドに貼り付け、サービス アカウント トークン作成者ロール(roles/iam.serviceAccountTokenCreator)を割り当てます。

割り当てプロジェクトへのアクセス権を付与する

Workload Identity で認証するには、API の使用量と課金を追跡する Quota Project ID が必要です。

  1. Google Cloud コンソールで、[IAM と管理] > [IAM] に移動し、割り当てプロジェクト ID に使用するプロジェクトを選択します。

    IAM に移動

  2. サービス アカウントを見つけて、[プリンシパルを編集] をクリックします。

  3. [別のロールを追加] をクリックし、[Service Usage コンシューマー](roles/serviceusage.serviceUsageConsumer)を選択します。

  4. [保存] をクリックします。

JSON キーを構成する

静的で有効期間の長いシークレット キーファイルには、手動管理が必要です。この方法は、Workload Identity 認証情報を使用できない場合にのみ使用してください。

  1. Google Cloud コンソールで、[IAM と管理>サービス アカウント] に移動し、サービス アカウントを選択します。

    [サービス アカウント] に移動

  2. [鍵] タブに移動し、[鍵を追加 > 新しい鍵を作成] をクリックします。

  3. 鍵のタイプとして [JSON] を選択し、[作成] をクリックします。

  4. ダウンロードしたファイルの内容全体をコピーし、構成時に User's Service Account に貼り付けます。

統合のパラメータ

ロギング統合には、次のパラメータが必要です。

パラメータ 説明
API Root

省略可。

Cloud Logging API のベース URL(例: https://logging.googleapis.com)。

User's Service Account

省略可。

サービス アカウント キーの JSON ファイルの内容全体。

このパラメータは、JSON キーを使用して認証する場合にのみ使用します。

Workload Identity Email

省略可。

サービス アカウントのクライアント メールアドレス。

このパラメータは、Workload Identity 認証情報を使用して認証する場合にのみ使用します。

Project ID

省略可。

統合で使用するプロジェクト ID。

値が指定されていない場合、インテグレーションはサービス アカウントの認証情報から ID を取得します。

Quota Project ID

省略可。

API の使用量と請求額に使用するプロジェクト ID。

このパラメータは、Workload Identity 認証情報を使用して認証を行う場合に必須です。

Organization ID

省略可。

クエリのスコープ設定に使用される組織 ID。

Verify SSL

省略可。

選択すると、統合によって Logging サーバーに接続するときに SSL 証明書が検証されます。

デフォルトで有効になっています。

Google SecOps で統合を構成する手順については、統合を構成するをご覧ください。

必要に応じて、後の段階で変更できます。統合インスタンスを構成すると、ハンドブックで使用できるようになります。複数のインスタンスの構成とサポートの詳細については、複数のインスタンスのサポートをご覧ください。

操作

アクションの詳細については、 デスクから保留中のアクションに対応すると手動による対策を実行するをご覧ください。

クエリを実行

クエリを実行アクションを使用して、Logging でカスタムクエリを実行します。

このアクションは Google SecOps エンティティに対して実行されません。

アクションへの入力

[Execute Query] アクションには、次のパラメータが必要です。

パラメータ 説明
Project ID Optional

統合で使用するプロジェクト ID。

このパラメータの値を設定しない場合、統合は Google Cloud サービス アカウントからプロジェクト ID を取得します。

Organization ID Optional

統合で使用する組織 ID。

このパラメータの値を設定しない場合、統合は Google Cloud サービス アカウントからプロジェクト ID を取得します。

Query 必須

ログを検索するクエリ。

Time Frame Optional

結果を取得する期間。

Custom を選択した場合は、Start Time パラメータも構成します。

値は次のいずれかになります。

  • Last Hour
  • Last 6 Hours
  • Last 24 Hours
  • Last Week
  • Last Month
  • Custom
デフォルト値は Last Hour です。
Start Time Optional

結果を取得する開始時刻。

Time Frame パラメータに Custom オプションを選択した場合、このパラメータは必須です。

このパラメータを構成するには、ISO 8601 形式を使用します。

End Time Optional

結果を取得する終了時刻。

このパラメータの値を設定せず、Time Frame パラメータに Custom オプションを選択すると、アクションは現在の時刻を終了時刻として使用します。

このパラメータを構成するには、ISO 8601 形式を使用します。

Max Results To Return Optional

返される結果の最大件数です。

デフォルト値は 50 です。

アクションの出力

[クエリを実行] アクションでは、次の出力が提供されます。

アクションの出力タイプ 対象
ケースウォールのアタッチメント 利用不可
ケースウォールのリンク 利用不可
ケースウォール テーブル 利用不可
拡充テーブル 利用不可
JSON の結果 利用可能
出力メッセージ 利用可能
スクリプトの結果 利用可能
JSON の結果

次の例は、Execute Query アクションを使用した場合に受信する JSON 結果の出力を示しています。

[{
    "protoPayload": {
        "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
        "authenticationInfo": {
            "principalEmail": "system:clouddns"
        },
        "authorizationInfo": [
            {
                "granted": true,
                "permission": "io.k8s.coordination.v1.leases.update",
                "resource": "coordination.k8s.io/v1/namespaces/kube-system/leases/clouddns-lock"
            }
        ],
        "methodName": "io.k8s.coordination.v1.leases.update",
        "requestMetadata": {
            "callerIp": "192.0.2.6",
            "callerSuppliedUserAgent": "clouddns-leader-election"
        },
        "resourceName": "coordination.k8s.io/v1/namespaces/kube-system/leases/clouddns-lock",
        "serviceName": "k8s.io",
        "status": {
            "code": 0
        }
    },
    "insertId": "ID",
    "resource": {
        "type": "k8s_cluster",
        "labels": {
            "cluster_name": "CLUSTER_NAME",
            "project_id": "PROJECT_ID",
            "location": "us-central1"
        }
    },
    "timestamp": "2024-09-18T09:46:38.647428Z",
    "labels": {
        "authorization.k8s.io/reason": "RBAC: allowed by ClusterRoleBinding \"system:clouddns\" of ClusterRole \"system:clouddns-role\" to User \"system:clouddns\"",
        "authorization.k8s.io/decision": "allow"
    },
    "logName": "projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity",
    "operation": {
        "id": "ID",
        "producer": "k8s.io",
        "first": true,
        "last": true
    },
    "receiveTimestamp": "2024-09-18T09:46:39.063264993Z"
}]
出力メッセージ

[クエリを実行] アクションでは、次の出力メッセージが表示されます。

出力メッセージ メッセージの説明

Successfully executed query "QUERY" in Cloud Logging.

No results were found for the provided query.

アクションが成功しました。
Error executing action "Execute Query". Reason: ERROR_REASON

操作に失敗しました。

サーバーへの接続、入力パラメータ、または認証情報を確認してください。

スクリプトの結果

次の表に、クエリの実行アクションを使用する場合のスクリプト結果出力の値を示します。

スクリプトの結果名 値
is_success True または False

Ping

Ping アクションを使用して、Logging への接続をテストします。

このアクションは Google SecOps エンティティに対して実行されません。

アクションへの入力

なし

アクションの出力

[Ping] アクションでは、次の出力が提供されます。

アクションの出力タイプ 対象
ケースウォールのアタッチメント 利用不可
ケースウォールのリンク 利用不可
ケースウォール テーブル 利用不可
拡充テーブル 利用不可
JSON の結果 利用不可
出力メッセージ 利用可能
スクリプトの結果 利用可能
出力メッセージ

Ping アクションでは、次の出力メッセージが表示されます。

出力メッセージ メッセージの説明
Successfully connected to the Cloud Logging server with the provided connection parameters! アクションが成功しました。
Failed to connect to the Cloud Logging server! Error is ERROR_REASON

操作に失敗しました。

サーバーへの接続、入力パラメータ、または認証情報を確認してください。

スクリプトの結果

次の表に、Ping アクションを使用した場合のスクリプト結果出力の値を示します。

スクリプトの結果名 値
is_success True または False

さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。