Google Cloud Compute ログを収集する
このドキュメントでは、Cloud Storage を使用して Google Cloud Compute ログを Google Security Operations にエクスポートするように構成する方法について説明します。パーサーはフィールドを抽出し、メッセージ フィールドを正規化して、抽出されたデータを統合データモデル(UDM)スキーマにマッピングし、セキュリティ イベントの一貫した表現を実現します。syslog のようなメッセージや Key-Value ペアなど、さまざまなログ形式を処理し、抽出されたフィールド(type や action など)に基づいてイベントを分類します。
始める前に
次の前提条件を満たしていることを確認します。
- Google SecOps インスタンス。
- Google Cloud 環境で Compute が設定され、有効になっている。
- Google Cloudへの特権アクセス。
Google Cloud Storage バケットを作成する
- Google Cloud コンソールにログインします。
[Cloud Storage バケット] のページに移動します。
[作成] をクリックします。
[バケットの作成] ページでユーザーのバケット情報を入力します。以下のステップでは、操作を完了した後に [続行] をクリックして、次のステップに進みます。
[始める] セクションで、次の操作を行います。
- バケット名の要件を満たす一意の名前(compute-logs など)を入力します。
階層名前空間を有効にするには、展開矢印をクリックして [Optimize for file oriented and data-intensive workloads] セクションを開き、[このバケットで階層的な名前空間を有効にする] を選択します。
- バケットラベルを追加するには、展開矢印をクリックして [ラベル] セクションを開きます。
- [ラベルを追加] をクリックし、ラベルのキーと値を指定します。
[データの保存場所の選択] セクションで、次の操作を行います。
ロケーション タイプを選択してください。
- ロケーション タイプのメニューを使用して、バケット内のオブジェクト データが永続的に保存されるロケーションを選択します。
- クロスバケット レプリケーションを設定するには、[クロスバケット レプリケーションを設定する] セクションを開きます。
[データのストレージ クラスを選択する] セクションで、バケットのデフォルトのストレージ クラスを選択します。あるいは、Autoclass を選択して、バケットデータのストレージ クラスを自動的に管理します。
[オブジェクトへのアクセスを制御する方法を選択する] セクションで、[なし] を選択して公開アクセスの防止を適用し、バケットのオブジェクトのアクセス制御モデルを選択します。
[オブジェクト データを保護する方法を選択する] セクションで、次の操作を行います。
- [データ保護] で、バケットに設定するオプションを選択します。
- オブジェクト データの暗号化方法を選択するには、[データ暗号化] というラベルの付いた展開矢印をクリックし、データの暗号化方法を選択します。
[作成] をクリックします。
Google Cloud Compute Logs Export を構成する
- Google Cloud コンソールで、[ロギング] > [ログルーター] に移動します。
- [シンクを作成] をクリックします。
- 次の構成の詳細を入力します。
- シンク名: わかりやすい名前を入力します(例:
Compute-Logs-Sink
)。 - シンクのエクスポート先: [Cloud Storage] を選択します。
- Cloud Storage バケット: バケット URI(
gs://compute-logs/compute-logs/
など)を入力します。
- シンク名: わかりやすい名前を入力します(例:
[包含フィルタの作成] セクションで、次の 1 つ以上のパターンを使用して Google Cloud Compute ログをキャプチャするようにログフィルタを構成します。
リソースタイプ フィルタ(必須 - 1 つ選択):
VM インスタンスのログのみの場合:
resource.type="gce_instance"
GCE 関連のすべてのリソース(VM インスタンス、サブネットワーク、ファイアウォール)の場合:
resource.type=("gce_instance" OR "gce_subnetwork" OR "gce_network" OR "gce_firewall_rule")
特定のログタイプ(省略可 - 必要に応じて追加):
監査ログ(インスタンス オペレーション、構成の変更)の場合:
resource.type="gce_instance" logName:"cloudaudit.googleapis.com/activity"
VPC Flow Logs(ネットワーク トラフィック)の場合:
resource.type="gce_subnetwork" logName:"vpc_flows"
ファイアウォール ログ(許可された接続/拒否された接続)の場合:
resource.type="gce_subnetwork" logName:"compute.googleapis.com/firewall"
シリアル コンソールのログの場合:
resource.type="gce_instance" logName:"serialconsole.googleapis.com"
ネットワーク関連のフィルタ(省略可 - 必要に応じて追加):
接続の詳細(送信元/宛先の IP、ポート)でフィルタします。
jsonPayload.connection.dest_ip:* OR jsonPayload.connection.src_ip:*
インスタンスの詳細でフィルタします。
jsonPayload.dest_instance.project_id:* OR jsonPayload.src_instance.project_id:*
セキュリティ アクションでフィルタ:
jsonPayload.rule_details.action=("ALLOW" OR "BLOCK")
例: 包括的な Compute ロギング用の完全なフィルタ:
(resource.type="gce_instance" OR resource.type="gce_subnetwork") AND ( logName:"cloudaudit.googleapis.com/activity" OR logName:"vpc_flows" OR logName:"compute.googleapis.com/firewall" OR jsonPayload.connection.dest_ip:* OR jsonPayload.connection.src_ip:* )
[シンクを作成] をクリックします。
Cloud Storage の権限を構成する
- [IAM> IAM と管理> サービス アカウント] に移動します。
- Cloud Logging サービス アカウント(service-account@logging.iam.gserviceaccount.comなど)を見つけます。
- バケットに対する roles/storage.admin ロールを付与します。
フィードを設定する
Google SecOps プラットフォームでフィードを設定するには、次の 2 つのエントリ ポイントがあります。
- [SIEM 設定] > [フィード] > [新規追加]
- Content Hub > Content Packs > Get Started
Google Cloud コンピューティング フィードを設定する方法
- [Google Cloud Compute platform] パックをクリックします。
- GCP Compute Feed ログタイプを見つけて、[新しいフィードを追加] をクリックします。
次のフィールドに値を指定します。
- ソースタイプ: Google Cloud Storage V2。
- ストレージ バケット URI: Cloud Storage バケットの URL(例:
gs://compute-context-logs/
)。この URL は、末尾にスラッシュ(/)が付いている必要があります。 Source deletion option: 必要に応じて削除オプションを選択します。
ファイルの最大経過日数: 指定した日数以内に変更されたファイルを含めます。デフォルトは 180 日です。
Chronicle サービス アカウント: サービス アカウントをコピーします。このサービス アカウントにバケット内の権限を追加して、Google SecOps がバケット内のデータを読み取ることや削除することが可能になるようにする必要があります。
詳細オプション
- フィード名: フィードを識別する事前入力された値。
- アセットの名前空間: フィードに関連付けられた名前空間。
- Ingestion Labels: このフィードのすべてのイベントに適用されるラベル。
[フィードを作成] をクリックします。
このプロダクト ファミリー内の異なるログタイプに対して複数のフィードを構成する方法については、プロダクト別にフィードを構成するをご覧ください。
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 | 条件付きでマッピングされます。タイプが「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 | 定数値「Reference」。 | |
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」フィールドからマッピングされます。 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。