Cloud Compute のログを収集する
このドキュメントでは、 Google Cloud Cloud Storage を使用して Google Security Operations にコンピューティング ログをエクスポートする方法について説明します。パーサーはフィールドを抽出し、メッセージ フィールドを正規化して、抽出されたデータを統合データモデル(UDM)スキーマにマッピングし、一貫したセキュリティ イベント表現を実現します。syslog のようなメッセージや Key-Value ペアなど、さまざまなログ形式を処理し、抽出されたフィールド(type や action など)に基づいてイベントを分類します。
始める前に
- Google SecOps インスタンスがあることを確認します。
- 環境で Compute が設定され、アクティブになっていることを確認します。 Google Cloud
- Google Cloudへの特権アクセス権があることを確認します。
Google Cloud Storage バケットを作成する
- Google Cloud コンソールにログインします。
[Cloud Storage バケット] のページに移動します。
[作成] をクリックします。
[バケットの作成] ページでユーザーのバケット情報を入力します。以下のステップでは、操作を完了した後に [続行] をクリックして、次のステップに進みます。
[始める] セクションで、次の操作を行います。
- バケット名の要件を満たす一意の名前を入力します(compute-logs など)。
階層名前空間を有効にするには、展開矢印をクリックして [Optimize for file oriented and data-intensive workloads] セクションを開き、[このバケットで階層的な名前空間を有効にする] を選択します。
- バケットラベルを追加するには、展開矢印をクリックして [ラベル] セクションを開きます。
- [ラベルを追加] をクリックし、ラベルのキーと値を指定します。
[データの保存場所の選択] セクションで、次の操作を行います。
ロケーション タイプを選択してください。
- ロケーション タイプのメニューを使用して、バケット内のオブジェクト データが永続的に保存されるロケーションを選択します。
- クロスバケット レプリケーションを設定するには、[クロスバケット レプリケーションを設定する] セクションを開きます。
[データのストレージ クラスを選択する] セクションで、バケットのデフォルトのストレージ クラスを選択します。あるいは、Autoclass を選択して、バケットデータのストレージ クラスを自動的に管理します。
[オブジェクトへのアクセスを制御する方法を選択する] セクションで、[なし] を選択して公開アクセスの防止を適用し、バケットのオブジェクトの [アクセス制御モデル] を選択します。
[オブジェクト データを保護する方法を選択する] セクションで、次の操作を行います。
- [データ保護] で、バケットに設定するオプションを選択します。
- オブジェクト データの暗号化方法を選択するには、[データ暗号化] というラベルの付いた展開矢印をクリックし、データの暗号化方法を選択します。
[作成] をクリックします。
Google Cloud Compute ログのエクスポートを構成する
- Google Cloud コンソールで、[ロギング] > [ログルーター] に移動します。
- [シンクを作成] をクリックします。
以下の詳細を入力します。
- シンク名: わかりやすい名前を指定します(例: Compute-Logs-Sink)。
- シンクの宛先: Cloud Storage を選択します。
- シンク デスティネーション: Cloud Storage を選択し、バケット URI(
gs://<your-bucket-name>/compute-logs
など)を入力します。 ログフィルタ: 次のようにフィルタを設定して、 Google Cloud Compute ログをキャプチャします。
ログ名とタイプ:
logName="*compute*"
ネットワーク関連のフィールド(IP アドレス、ポートなど):
jsonPayload.connection.dest_ip="*" OR jsonPayload.connection.src_ip="*"
インスタンスの詳細:
jsonPayload.dest_instance.project_id="*" jsonPayload.src_instance.project_id="*"
セキュリティ関連の詳細:
jsonPayload.rule_details.action="ALLOW" OR jsonPayload.rule_details.action="BLOCK"
[作成] をクリックします。
Cloud Storage の権限を構成する
- [IAM] > [IAM と管理] > [サービス アカウント] に移動します。
- Cloud Logging サービス アカウントを見つけます(例: service-account@logging.iam.gserviceaccount.com)。
- バケットに対する roles/storage.admin ロールを付与します。
Google Cloud Compute ログを取り込むように Google SecOps でフィードを構成する
- [SIEM 設定] > [フィード] に移動します。
- [新しく追加] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例: Google Cloud Compute Logs)。
- [Source type] として [Google Cloud Storage] を選択します。
- [ログタイプ] として [GCP Compute] を選択します。
- [Chronicle サービス アカウント] として [サービス アカウントを取得する] をクリックします。
- [次へ] をクリックします。
次の入力パラメータの値を指定します。
- Storage Bucket URI: Google Cloud
gs://my-bucket/<value>
形式のストレージ バケット URL。 - URI Is A: [サブディレクトリを含むディレクトリ] を選択します。
Source deletion options: 必要に応じて削除オプションを選択します。
Asset namespace: アセットの名前空間。
Ingestion labels: このフィードからのイベントに適用されるラベル。
- Storage Bucket URI: Google Cloud
[次へ] をクリックします。
[Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
UDM マッピング テーブル
ログフィールド | UDM マッピング | ロジック |
---|---|---|
addr | read_only_udm.principal.ip | フィールドが空でないか「?」でない場合、プリンシパル IP アドレス リストに統合されます。 |
jsonPayload.connection.dest_ip | read_only_udm.target.ip | フィールドが存在する場合は、ターゲット IP アドレスリストに統合されます。 |
jsonPayload.connection.dest_port | read_only_udm.target.port | 文字列に変換され、その後整数に変換されて、変換中にエラーが発生しなかった場合にマッピングされます。 |
jsonPayload.connection.protocol | read_only_udm.network.ip_protocol | 文字列に変換され、その後整数に変換されます。ルックアップ テーブルを使用して IP プロトコル(TCP、UDP など)を決定し、変換中にエラーが発生しなかった場合にマッピングするために使用されます。 |
jsonPayload.connection.src_ip | read_only_udm.principal.ip | フィールドが存在する場合は、プリンシパルの IP アドレスリストに統合されます。 |
jsonPayload.connection.src_port | read_only_udm.principal.port | 文字列に変換され、その後整数に変換されて、変換中にエラーが発生しなかった場合にマッピングされます。 |
jsonPayload.dest_instance.project_id | read_only_udm.target.resource.product_object_id | jsonPayload.dest_vpc.project_id が存在する場合に条件付きでマッピングされます。 |
jsonPayload.dest_instance.region | read_only_udm.target.location.name | jsonPayload.dest_vpc.project_id が存在する場合に条件付きでマッピングされます。 |
jsonPayload.dest_instance.vm_name | read_only_udm.target.resource.attribute.cloud.project.name | jsonPayload.dest_vpc.project_id が存在する場合に条件付きでマッピングされます。 |
jsonPayload.dest_instance.zone | read_only_udm.target.resource.attribute.cloud.availability_zone | jsonPayload.dest_vpc.project_id が存在する場合に条件付きでマッピングされます。 |
jsonPayload.dest_vpc.project_id | read_only_udm.target.cloud.vpc.product_object_id | 関連するフィールドをマッピングする条件として使用されます。 |
jsonPayload.dest_vpc.subnetwork_name | read_only_udm.target.cloud.vpc.name | jsonPayload.dest_vpc.project_id が存在する場合に条件付きでマッピングされます。 |
jsonPayload.instance.project_id | read_only_udm.target.resource.product_object_id | jsonPayload.instance.project_id が存在する場合に条件付きでマッピングされます。 |
jsonPayload.instance.region | read_only_udm.target.location.name | jsonPayload.instance.project_id が存在する場合に条件付きでマッピングされます。 |
jsonPayload.instance.vm_name | read_only_udm.target.resource.attribute.cloud.project.name | jsonPayload.instance.project_id が存在する場合に条件付きでマッピングされます。 |
jsonPayload.instance.zone | read_only_udm.target.resource.attribute.cloud.availability_zone | jsonPayload.instance.project_id が存在する場合に条件付きでマッピングされます。 |
jsonPayload.message | read_only_udm.metadata.product_event_type, read_only_udm.principal.application, read_only_udm.target.process.pid, read_only_udm.target.user.userid, read_only_udm.principal.hostname, read_only_udm.target.process.command_line, read_only_udm.security_result.description, read_only_udm.principal.process.file.full_path | Grok パターンと条件ロジックに基づいてパースされ、さまざまなフィールドにマッピングされます。 |
jsonPayload.rule_details.action | read_only_udm.security_result.action | セキュリティ結果のアクション(ALLOW/BLOCK)を決定し、マッピングするために使用されます。 |
jsonPayload.rule_details.direction | read_only_udm.network.direction | ネットワークの方向(INBOUND、OUTBOUND、UNKNOWN_DIRECTION)を決定してマッピングするために使用されます。 |
jsonPayload.rule_details.priority | read_only_udm.security_result.priority_details | 変換中にエラーが発生しなかった場合は、文字列に変換され、マッピングされます。 |
jsonPayload.rule_details.reference | read_only_udm.security_result.rule_labels.value | ルールラベル値にマッピングされます。 |
jsonPayload.src_instance.project_id | read_only_udm.principal.resource.product_object_id | jsonPayload.src_vpc.project_id が存在する場合に条件付きでマッピングされます。 |
jsonPayload.src_instance.region | read_only_udm.principal.location.name | jsonPayload.src_vpc.project_id が存在する場合に条件付きでマッピングされます。 |
jsonPayload.src_instance.vm_name | read_only_udm.principal.resource.attribute.cloud.project.name | jsonPayload.src_vpc.project_id が存在する場合に条件付きでマッピングされます。 |
jsonPayload.src_instance.zone | read_only_udm.principal.resource.attribute.cloud.availability_zone | jsonPayload.src_vpc.project_id が存在する場合に条件付きでマッピングされます。 |
jsonPayload.src_vpc.project_id | read_only_udm.principal.cloud.vpc.product_object_id | 関連するフィールドをマッピングする条件として使用されます。 |
jsonPayload.src_vpc.subnetwork_name | read_only_udm.principal.cloud.vpc.name | jsonPayload.src_vpc.project_id が存在する場合に条件付きでマッピングされます。 |
jsonPayload.vpc.project_id | read_only_udm.target.cloud.vpc.product_object_id | jsonPayload.vpc.project_id が存在する場合に条件付きでマッピングされます。 |
jsonPayload.vpc.subnetwork_name | read_only_udm.target.cloud.vpc.name | jsonPayload.vpc.project_id が存在する場合に条件付きでマッピングされます。 |
logName | read_only_udm.security_result.category_details | 直接マッピングされます。 |
resource.labels.instance_id | read_only_udm.principal.resource.product_object_id、read_only_udm.principal.asset_id | 条件付きでマッピングされます。type が「PROCTITLE」の場合、アセット ID の作成に使用されます。 |
resource.labels.location | read_only_udm.principal.location.name | フィールドが存在する場合は条件付きでマッピングされます。 |
resource.labels.project_id | read_only_udm.metadata.product_deployment_id | フィールドが存在する場合は条件付きでマッピングされます。 |
resource.labels.zone | read_only_udm.principal.resource.attribute.cloud.availability_zone | フィールドが存在する場合は条件付きでマッピングされます。 |
resource.type | read_only_udm.metadata.event_type | イベントタイプを特定し、マッピングするために使用されます。 |
timestamp | read_only_udm.metadata.event_timestamp | 直接マッピングされます。 |
type | read_only_udm.metadata.product_event_type、read_only_udm.metadata.event_type、read_only_udm.extensions.auth.type | イベントタイプ、プロダクトイベントのタイプ、認証タイプを特定し、それに応じてマッピングするために使用されます。 |
read_only_udm.metadata.event_type | このロジックは、「type」フィールドとその他の条件に基づいてイベントタイプを設定します。特定の一致が見つからない場合、デフォルトは「GENERIC_EVENT」になります。 | |
read_only_udm.metadata.log_type | 定数値「GCP_COMPUTE」。 | |
read_only_udm.metadata.vendor_name | 定数値「Google Cloud Platform」。 | |
read_only_udm.metadata.product_name | 定数値「Google Cloud Platform」。 | |
read_only_udm.security_result.rule_labels.key | 定数値「参照」。 | |
read_only_udm.target.cloud.vpc.resource_type | jsonPayload.instance.project_id または jsonPayload.dest_vpc.project_id が存在する場合は、条件付きで「VPC_NETWORK」に設定されます。 | |
read_only_udm.target.resource.attribute.cloud.environment | jsonPayload.instance.project_id、jsonPayload.dest_vpc.project_id、または jsonPayload.src_vpc.project_id が存在する場合は、条件付きで「GOOGLE_CLOUD_PLATFORM」に設定されます。 | |
read_only_udm.principal.administrative_domain | 「kv_data」フィールドから抽出された「Account Domain」フィールドからマッピングされます。 | |
read_only_udm.principal.user.user_display_name | 「kv_data」フィールドから抽出された「Account Name」フィールドからマッピングされます。 | |
read_only_udm.target.resource.name | 「kv_data」フィールドから抽出された「Object Name」フィールドからマッピングされます。 | |
read_only_udm.target.resource.type | 「kv_data」フィールドから抽出された「Object Type」フィールドからマッピングされます。 | |
read_only_udm.principal.process.pid | 「kv_data」フィールドから抽出された「プロセス ID」フィールドからマッピングされます。 | |
read_only_udm.target.user.windows_sid | 「kv_data」フィールドから抽出された「Security ID」フィールドからマッピングされます。 | |
read_only_udm.network.session_id | 「auid」フィールドからマッピングされます。 |
変更点
2024-06-18
機能強化:
- 「file」を「principal.file.names」にマッピングしました。
- 「function」を「principal.resource.attribute.labels」にマッピングしました。
- 「line」を「principal.resource.attribute.labels」にマッピングしました。
- 「timestamp」を「event_timestamp」にマッピングしました。
2023-02-24
バグの修正:
- UI での検索を容易にするため、「asset_id」のマッピングを追加しました。「asset:resource.labels.instance_id」が「principal.asset_id」にマッピングされます。
2022-06-16
機能強化:
- 次の新しいフィールドのマッピングを追加しました。jsonPayload.Message(syslog)。
- プロセス名を principal.application に変更。
- プロセス ID は principal.process.pid にマッピングされます。
- アカウントのドメインを principal.administrative_domain に変更。
- Account Name を principal.user.user_display_name に変更します。
- オブジェクト名を target.resource.name に変更します。
- Object Type を target.resource.type に変更。
- セキュリティ ID は target.user.windows_sid にマッピングされます。
- addr を principal.ip に変更します。
- auid を network.session_id に変更しました。
- Linux ログの「LINUX - %{type}」、Windows ログの「WINDOWS event log」を metadata.product_event_type にマッピングしました。
- pid を target.process.pid に変更します。
- acct を target.user.userid に変更します。
- exe を target.process.command_line にマッピングします。
- file_path を principal.process.file.full_path に変更します。
- desc のマッピングを metadata.description から security_result.description に変更しました。
2022-05-23
機能強化:
- 次の新しいフィールドのマッピングを追加しました。
- jsonPayload.message を syslog として送信します。
- resource.labels.zone を principal.resource.attribute.cloud.availability_zone に変更しました。
- resource.labels.location を principal.location.name に変更しました。
- resource.labels.project_id を metadata.product_deployment_id に変更しました。
- resource.labels.instance_id を principal.resource.product_object_id に変更しました。
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。