Cloud Run のログを収集する
このガイドでは、Cloud Storage を使用して Cloud Run ログを Google Security Operations にエクスポートする方法について説明します。パーサーは JSON ログからフィールドを抽出し、統合データモデル(UDM)に変換します。HTTP リクエストデータやシステム監査ログなど、さまざまなログ形式を処理し、関連するフィールドを UDM にマッピングします。また、Cloud Run に固有のラベルとメタデータでデータを拡充します。
始める前に
- Google SecOps インスタンスがあることを確認します。
- 環境で Cloud Run が設定され、アクティブになっていることを確認します。 Google Cloud
- Google Cloudへの特権アクセス権があることを確認します。
Google Cloud Storage バケットを作成する
- Google Cloud コンソールにログインします。
[Cloud Storage バケット] のページに移動します。
[作成] をクリックします。
[バケットの作成] ページでユーザーのバケット情報を入力します。以下のステップでは、操作を完了した後に [続行] をクリックして、次のステップに進みます。
[始める] セクションで、次の操作を行います。
- バケット名の要件を満たす一意の名前を入力します(cloudrun-logs など)。
階層名前空間を有効にするには、展開矢印をクリックして [Optimize for file oriented and data-intensive workloads] セクションを開き、[このバケットで階層的な名前空間を有効にする] を選択します。
バケットラベルを追加するには、展開矢印をクリックして [ラベル] セクションを開きます。
[ラベルを追加] をクリックし、ラベルのキーと値を指定します。
[データの保存場所の選択] セクションで、次の操作を行います。
- ロケーション タイプを選択してください。
ロケーション タイプのメニューを使用して、バケット内のオブジェクト データが永続的に保存されるロケーションを選択します。
クロスバケット レプリケーションを設定するには、[クロスバケット レプリケーションを設定する] セクションを開きます。
[データのストレージ クラスを選択する] セクションで、バケットのデフォルトのストレージ クラスを選択します。あるいは、Autoclass を選択して、バケットデータのストレージ クラスを自動的に管理します。
[オブジェクトへのアクセスを制御する方法を選択する] セクションで、[なし] を選択して公開アクセスの防止を適用し、バケットのオブジェクトの [アクセス制御モデル] を選択します。
[オブジェクト データを保護する方法を選択する] セクションで、次の操作を行います。
- [データ保護] で、バケットに設定するオプションを選択します。
- オブジェクト データの暗号化方法を選択するには、[データ暗号化] というラベルの付いた展開矢印をクリックし、データの暗号化方法を選択します。
[作成] をクリックします。
Cloud Run でログのエクスポートを構成する
- Google Cloud [ようこそ] ページで、[Cloud Run] アイコンをクリックします。
- 上部の検索バーで「ロギング」を検索し、Enter キーを押します。
- ログ エクスプローラで、[ログ名] で [Cloud Run] を選択し、[適用] をクリックしてログをフィルタします。
- メニューから [その他の操作] > [シンクの作成] をクリックします。
- 次の構成を指定します。
- シンクの詳細: 名前と説明を入力します。
- [次へ] をクリックします。
- シンクのエクスポート先: [Cloud Storage バケット] を選択します。
- Cloud Storage バケット: 先ほど作成したバケットを選択するか、新しいバケットを作成します。
- [次へ] をクリックします。
- シンクに含めるログを選択する: Cloud Storage バケットでオプションを選択すると、デフォルトのログが入力されます。
- [次へ] をクリックします。
- 省略可: [シンクに含めないログの選択] で、シンクに含めないログを選択します。
- [シンクを作成] をクリックします。
Cloud Run のログを取り込むように Google SecOps でフィードを構成する
- [SIEM 設定] > [フィード] に移動します。
- [新しく追加] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例: Cloud Run Logs)。
- [Source type] として [Google Cloud Storage] を選択します。
- [Log type] として [GCP Cloud Run] を選択します。
- [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 マッピング | ロジック |
---|---|---|
httpRequest.latency |
target.resource.attribute.labels.[] |
未加工ログの httpRequest.latency の値は、target.resource.attribute.labels 内のキー http_request_latency を持つラベルの値として使用されます。 |
httpRequest.protocol |
network.application_protocol |
httpRequest.protocol に HTTP が含まれている場合、UDM フィールドは HTTP に設定されます。 |
httpRequest.remoteIp |
principal.asset.ip |
未加工ログの httpRequest.remoteIp の値が使用されます。 |
httpRequest.remoteIp |
principal.ip |
未加工ログの httpRequest.remoteIp の値が使用されます。 |
httpRequest.requestMethod |
network.http.method |
未加工ログの httpRequest.requestMethod の値が使用されます。 |
httpRequest.requestSize |
network.sent_bytes |
未加工ログの httpRequest.requestSize の値は符号なし整数に変換され、使用されます。 |
httpRequest.requestUrl |
target.url |
未加工ログの httpRequest.requestUrl の値が使用されます。 |
httpRequest.responseSize |
network.received_bytes |
未加工ログの httpRequest.responseSize の値は符号なし整数に変換され、使用されます。 |
httpRequest.serverIp |
target.asset.ip |
未加工ログの httpRequest.serverIp の値が使用されます。 |
httpRequest.serverIp |
target.ip |
未加工ログの httpRequest.serverIp の値が使用されます。 |
httpRequest.status |
network.http.response_code |
未加工ログの httpRequest.status の値は整数に変換され、使用されます。 |
httpRequest.userAgent |
network.http.parsed_user_agent |
未加工ログの httpRequest.userAgent の値は、ユーザー エージェント文字列として解析されます。 |
httpRequest.userAgent |
network.http.user_agent |
未加工ログの httpRequest.userAgent の値が使用されます。 |
insertId |
metadata.product_log_id |
未加工ログの insertId の値が使用されます。 |
labels.instanceId |
additional.fields.[] |
labels.instanceId の値は、additional.fields 内のキー instanceId を持つラベルの値として使用されます。 |
labels.run.googleapis.com_execution_name |
additional.fields.[] |
labels.run.googleapis.com_execution_name の値は、additional.fields 内のキー execution_name を持つラベルの値として使用されます。 |
labels.run.googleapis.com_task_attempt |
additional.fields.[] |
labels.run.googleapis.com_task_attempt の値は、additional.fields 内のキー task_attempt を持つラベルの値として使用されます。 |
labels.run.googleapis.com_task_index |
additional.fields.[] |
labels.run.googleapis.com_task_index の値は、additional.fields 内のキー task_index を持つラベルの値として使用されます。 |
logName |
metadata.product_event_type |
未加工ログの logName の値が使用されます。 |
resource.labels.configuration_name |
target.resource.attribute.labels.[] |
resource.labels.configuration_name の値は、target.resource.attribute.labels 内のキー configuration_name を持つラベルの値として使用されます。 |
resource.labels.job_name |
additional.fields.[] |
resource.labels.job_name の値は、additional.fields 内のキー job_name を持つラベルの値として使用されます。 |
resource.labels.location |
target.location.name |
未加工ログの resource.labels.location の値が使用されます。 |
resource.labels.project_id |
target.resource.attribute.labels.[] |
resource.labels.project_id の値は、target.resource.attribute.labels 内のキー project_id を持つラベルの値として使用されます。 |
resource.labels.revision_name |
target.resource.attribute.labels.[] |
resource.labels.revision_name の値は、target.resource.attribute.labels 内のキー revision_name を持つラベルの値として使用されます。 |
resource.labels.service_name |
target.resource.attribute.labels.[] |
resource.labels.service_name の値は、target.resource.attribute.labels 内のキー service_name を持つラベルの値として使用されます。 |
resource.type |
target.resource.resource_subtype |
未加工ログの resource.type の値が使用されます。 |
severity |
security_result.severity |
severity の値が Info と一致する場合(大文字と小文字は区別されません)、UDM フィールドは INFORMATIONAL に設定されます。 |
textPayload |
additional.fields.[] |
textPayload の値は、additional.fields 内のキー Textpayload を持つラベルの値として使用されます。 |
timestamp |
metadata.event_timestamp |
未加工ログの timestamp の値はタイムスタンプとして解析されます。 |
timestamp |
timestamp |
未加工ログの timestamp の値はタイムスタンプとして解析されます。特定のフィールドの有無に基づいてパーサー ロジックによって決定されます。デフォルトは GENERIC_EVENT です。has_principal_ip 、has_target_ip 、httpRequest.protocol が HTTP と一致する場合、NETWORK_HTTP に設定されます。GCP_RUN にハードコードされています。GCP_RUN にハードコードされています。Google Cloud Platform にハードコードされています。GOOGLE_CLOUD_PLATFORM にハードコードされています。 |
変更点
2024-01-22
機能強化:
- logName が
projects/1234/logs/run.googleapis.com%2Fstderr
、projects/1234/logs/run.googleapis.com%2Fstdout
、projects/1234/logs/run.googleapis.com%2Frequests
、projects/1234/logs/run.googleapis.com%2Fvarlog%2Fsystem
のログのマッピングを追加しました。 httpRequest.latency
をtarget.resource.attribute.labels
にマッピングしました。resource.labels.configuration_name
をtarget.resource.attribute.labels
にマッピングしました。resource.labels.revision_name
をtarget.resource.attribute.labels
にマッピングしました。resource.labels.service_name
をtarget.resource.attribute.labels
にマッピングしました。httpRequest.protocol
をnetwork.application_protocol
にマッピングしました。httpRequest.requestMethod
をnetwork.http.method
にマッピングしました。httpRequest.requestSize
をnetwork.sent_bytes
にマッピングしました。httpRequest.requestUrl
をtarget.url
にマッピングしました。httpRequest.responseSize
をnetwork.received_bytes
にマッピングしました。httpRequest.remoteIp
をprincipal.ip
とprincipal.asset.ip
にマッピングしました。httpRequest.serverIp
を target.ipand
target.asset.ip` にマッピングしました。httpRequest.status
をnetwork.http.response_code
にマッピングしました。httpRequest.userAgent
をnetwork.http.user_agent
にマッピングしました。logName
をmetadata.product_event_type
にマッピングしました。textPayload
をadditional.fields
にマッピングしました。labels.run.googleapis.com_execution_name
をadditional.fields
にマッピングしました。labels.run.googleapis.com_task_attempt
をadditional.fields
にマッピングしました。labels.run.googleapis.com_task_index
をadditional.fields
にマッピングしました。labels.instanceId
をadditional.fields
にマッピングしました。resource.labels.job_name
をadditional.fields
にマッピングしました。
2023-04-13
機能強化:
target.resource.attribute.cloud.environment
をGOOGLE_CLOUD_PLATFORM
に設定する。target.resource.name
を完全なリソース名の値に設定します。
2022-07-13
- パーサーを新しく作成しました。
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。