F5 Distributed Cloud Services のサービスログを収集する
パーサーのバージョン: 6.0
このドキュメントでは、Google Cloud Storage V2 を使用して F5 Distributed Cloud Services サービスログを Google Security Operations に取り込む方法について説明します。
F5 Distributed Cloud Services は、SaaS ベースのセキュリティ、ネットワーキング、アプリケーションの配信、アプリケーション管理プラットフォームです。マルチクラウドとエッジ ロケーションにわたって、分散クラウド インフラストラクチャ、API セキュリティ、ウェブ アプリケーション ファイアウォール機能を提供します。
始める前に
次の前提条件を満たしていることを確認してください。
- Google SecOps インスタンス
- Cloud Storage API が有効になっている Google Cloud プロジェクト
- GCS バケットを作成、管理する権限
- GCS バケットの IAM ポリシーを管理する権限
- F5 Distributed Cloud コンソールへの特権アクセス
- F5 Distributed Cloud でグローバル ログレシーバ オブジェクトを作成する権限
Google Cloud Storage バケットを作成する
- Google Cloud コンソールに移動します。
- プロジェクトを選択するか、新しいプロジェクトを作成します。
- ナビゲーション メニューで、[Cloud Storage] > [バケット] に移動します。
- [バケットを作成] をクリックします。
次の構成情報を提供してください。
設定 値 バケットに名前を付ける グローバルに一意の名前( f5-dcs-logsなど)を入力します。ロケーション タイプ ニーズに応じて選択します(リージョン、デュアルリージョン、マルチリージョン)。 ロケーション ロケーションを選択します(例: us-central1)。ストレージ クラス Standard(頻繁にアクセスされるログに推奨) アクセス制御 均一(推奨) 保護ツール 省略可: オブジェクトのバージョニングまたは保持ポリシーを有効にする [作成] をクリックします。
GCS にエクスポートするように F5 Distributed Cloud を構成する
GCS バケットをファイアウォールの許可リストに追加する
F5 Distributed Cloud Global Log Receiver では、次の IP アドレス範囲をファイアウォールの許可リストに追加する必要があります。
193.16.236.64/29185.160.8.152/29
GCS バケットで VPC Service Controls またはファイアウォール ルールを使用している場合は、これらの IP 範囲を許可リストに追加します。
F5 Distributed Cloud 用の Google Cloud サービス アカウントを作成する
- Google Cloud コンソールで、[IAM と管理] > [サービス アカウント] に移動します。
- [サービス アカウントを作成] をクリックします。
次の構成情報を提供してください。
- サービス アカウント名:
f5-dcs-log-writer(またはわかりやすい名前)を入力します。 - サービス アカウントの説明: 「
Service account for F5 Distributed Cloud to write logs to GCS」と入力します。
- サービス アカウント名:
[作成して続行] をクリックします。
[このサービス アカウントにプロジェクトへのアクセスを許可する] セクションで、次の操作を行います。
- [ロールを選択] をクリックします。
- [Storage オブジェクト管理者] を検索して選択します。
[続行] をクリックします。
[完了] をクリックします。
サービス アカウント キーを作成する
- [サービス アカウント] リストで、作成したサービス アカウント(例:
f5-dcs-log-writer)をクリックします。 - [キー] タブに移動します。
- [鍵を追加] > [新しい鍵を作成] の順にクリックします。
- キーのタイプとして [JSON] を選択します。
- [作成] をクリックします。
- JSON キーファイルがパソコンにダウンロードされます。
- このファイルを安全に保存します。これは次のステップで必要になります。
GCS バケットに IAM 権限を付与する
- [Cloud Storage] > [バケット] に移動します。
- バケット名(
f5-dcs-logsなど)をクリックします。 - [権限] タブに移動します。
- [アクセス権を付与] をクリックします。
- 次の構成情報を指定します。
- プリンシパルを追加: サービス アカウントのメールアドレス(例:
f5-dcs-log-writer@PROJECT_ID.iam.gserviceaccount.com)を入力します。 - ロールを割り当てる: [Storage オブジェクト管理者] を選択します。
- プリンシパルを追加: サービス アカウントのメールアドレス(例:
- [保存] をクリックします。
F5 Distributed Cloud コンソールで Google Cloud 認証情報を作成する
https://<tenant>.console.ves.volterra.ioで F5 Distributed Cloud コンソールにログインします。- ホームページで [Multi-Cloud Network Connect] サービスを選択します。
- [Manage] > [Site Management] > [Cloud Credentials] に移動します。
- [Add Cloud Credentials] をクリックします。
- [メタデータ] セクションで、次の操作を行います。
- 名前: わかりやすい名前を入力します(例:
gcp-chronicle-logs)。 - 説明(省略可): 「
Cloud Storage credentials for Google SecOps log export」と入力します。
- 名前: わかりやすい名前を入力します(例:
- [Cloud Credentials Type] セクションで、[GCP Credentials] を選択します。
- [GCP Credentials] フィールドで [Configure] をクリックします。
- [Credential Type] プルダウンで、[Service Account Credentials File] を選択します。
- [Upload File] をクリックし、前の手順でダウンロードした JSON キーファイルを選択します。
- [適用] をクリックします。
- [Save and Exit] をクリックします。
グローバル ログレシーバーを作成する
- F5 Distributed Cloud コンソールで、マルチクラウド ネットワーク接続サービスが表示されていることを確認します。
- [Manage] > [Log Management] > [Global Log Receiver] に移動します。
- [Add Global Log Receiver] をクリックします。
[メタデータ] セクションで、次の操作を行います。
- 名前: わかりやすい名前を入力します(例:
chronicle-gcs-receiver)。 - 説明(省略可): 「
Global log receiver for Google SecOps SIEM」と入力します。
- 名前: わかりやすい名前を入力します(例:
[ログタイプ] プルダウンで、エクスポートするログタイプを選択します。
- リクエスト ログ: ユーザー、パス、メソッド、レスポンス コードを含む HTTP リクエスト / レスポンス ログ
- セキュリティ イベント: WAF イベント、DDoS、API 保護、bot 対策イベント
- 監査ログ: 公開 API を介した構成の変更
- DNS リクエストログ: DNS クエリログ
[ログメッセージの選択] プルダウンで、次のいずれかを選択します。
- 現在の名前空間からログを選択する: 現在の名前空間からのみログを送信します。
- すべての Namespace からログを選択する: すべての Namespace からログを送信します(包括的な可視性を確保するためにおすすめします)。
- 特定の名前空間のログを選択する: 指定した名前空間からログを送信します([項目を追加] をクリックして名前空間名を追加します)。
[Receiver Configuration] プルダウンで、[GCP Bucket Receiver] を選択します。
[GCP Bucket Name] フィールドに、GCS バケットの名前(例:
f5-dcs-logs)を入力します。[GCP Cloud Credentials] プルダウンで、前に作成したクラウド認証情報(
gcp-chronicle-logsなど)を選択します。省略可: [Show Advanced Fields] を開いて、バッチ オプションを構成します。
- バッチ タイムアウト オプション: [タイムアウト(秒)] を選択して値を入力します(デフォルト:
300秒)。 - バッチの最大イベント数: [最大イベント数] を選択し、32 ~ 2,000 の値を入力します(制限なしにする場合は未設定のままにします)。
- バッチバイト数: [最大バイト数] を選択し、4096 ~ 1048576 の値を入力します(デフォルト:
10485760バイト / 10 MB)。
- バッチ タイムアウト オプション: [タイムアウト(秒)] を選択して値を入力します(デフォルト:
[Save and Exit] をクリックします。
接続をテストする
- [グローバル ログレシーバー] リストで、作成したレシーバー(
chronicle-gcs-receiverなど)を見つけます。 - [操作] 列のその他アイコン(...)をクリックします。
- [Test Connection] を選択します。
- テストが完了するまで待ちます。
接続が成功したことを示すメッセージが表示されます。
GCS バケットのログを確認する
- GCP コンソールで、[Cloud Storage] > [バケット] に移動します。
- バケット名(
f5-dcs-logsなど)をクリックします。 - バケットにログファイルが作成されていることを確認します。
F5 Distributed Cloud は、次のフォルダ構造でログを整理します。
YYYY/MM/DD/HH/- 日ごとにフォルダが作成されます(YYYY/MM/DD)。
- 各日のフォルダ内に、1 時間(HH)ごとにサブフォルダが作成されます。
- 5 分ごとに、新しい圧縮 gzip ファイルが 1 時間ごとのサブフォルダに書き込まれます。
- ファイルは NDJSON 形式(改行区切り JSON)です。
gzip ファイルをクリックしてダウンロードし、ログ形式を調べます。
Google SecOps サービス アカウントを取得する
Google SecOps は、一意のサービス アカウントを使用して GCS バケットからデータを読み取ります。このサービス アカウントにバケットへのアクセス権を付与する必要があります。
サービス アカウントのメールアドレスを取得する
- [設定] > [データ管理] > [フィード] に移動します。SIEM のみのプラットフォームを使用している場合は、[設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- [単一フィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
F5 DCS Logs)。 - [Source type] として [Google Cloud Storage V2] を選択します。
- [Log type] として [F5 Distributed Cloud Services] を選択します。
[サービス アカウントを取得する] をクリックします。一意のサービス アカウントのメールアドレスが表示されます。例:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comこのメールアドレスをコピーして、次のステップで使用します。
[次へ] をクリックします。
次の入力パラメータの値を指定します。
ストレージ バケットの URL: GCS バケットの URI を入力します。
gs://f5-dcs-logs/f5-dcs-logsは、GCS バケット名に置き換えます。Source deletion option: 必要に応じて削除オプションを選択します。
- なし: 転送後にファイルを削除しません(テストに推奨)。
- 転送されたファイルを削除する: 転送が完了した後にファイルを削除します。
転送されたファイルと空のディレクトリを削除する: 転送が成功した後にファイルと空のディレクトリを削除します。
ファイルの最長存続期間: 過去数日間に変更されたファイルを含めます(デフォルトは 180 日)。
Asset namespace: アセットの名前空間。
Ingestion labels: このフィードのイベントに適用されるラベル。
[次へ] をクリックします。
[Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
Google SecOps サービス アカウントに IAM 権限を付与する
Google SecOps サービス アカウントには、GCS バケットに対する Storage オブジェクト閲覧者のロールが必要です。
- [Cloud Storage] > [バケット] に移動します。
- バケット名(
f5-dcs-logsなど)をクリックします。 - [権限] タブに移動します。
- [アクセス権を付与] をクリックします。
次の構成情報を提供してください。
- プリンシパルを追加: Google SecOps サービス アカウントのメールアドレスを貼り付けます。
- ロールを割り当てる: [Storage オブジェクト閲覧者] を選択します。
[保存] をクリックします。
UDM マッピング テーブル
| ログフィールド | UDM マッピング | ロジック |
|---|---|---|
| _id | metadata.product_log_id | 値が直接コピーされる |
| src | principal.namespace | 値が直接コピーされる |
| kubernetes_labels_app | target.resource.attribute.labels | app_label(kubernetes_labels_app から派生)から統合 |
| kubernetes_host | target.hostname | 値が直接コピーされる |
| kubernetes_container_name | target.resource.product_object_id | 値が直接コピーされる |
| bot_info.classification | security_result.detection_fields | bot_info_classification_label(bot_info.classification から派生)から統合 |
| bot_info.name | security_result.detection_fields | bot_info_name_label(bot_info.name から派生)から統合 |
| bot_info.type | security_result.detection_fields | bot_info_type_label(bot_info.type から派生)から統合 |
| timestamp | @timestamp | RFC 3339、UNIX、ISO8601 の日付フィルタを使用して解析 |
| visitor_id | security_result.detection_fields | visitor_id_label(visitor_id から派生)から統合 |
| タグ | security_result.detection_fields | tag_label(tag から派生)から統合 |
| アクション | security_result.action | 一致する場合は ALLOW に設定し、一致しない場合は BLOCK に設定します。 |
| 重要度 | security_result.severity | エラー / 警告の場合は HIGH、重大な場合は CRITICAL、通知の場合は MEDIUM、情報 / info の場合は LOW に設定します。 |
| 重要度 | security_result.severity_details | 値が直接コピーされる |
| api_endpoint | target.labels | api_endpoint_label(api_endpoint から派生)から統合 |
| app_firewall_name | principal.process.command_line | 値が直接コピーされる |
| app_type | security_result.detection_fields | about_app_type(app_type から派生)から統合 |
| as_org | security_result.detection_fields | about_as_org(as_org から派生)から統合 |
| asn | security_result.detection_fields | about_asn(asn から派生)から統合 |
| kubernetes.pod_id | security_result.detection_fields | about_pod_id(kubernetes.pod_id から派生)から統合 |
| kubernetes.pod_name | security_result.detection_fields | about_pod_name(kubernetes.pod_name から派生)から統合 |
| latitude | principal.location.region_latitude | 浮動小数点数に変換 |
| longitude | principal.location.region_longitude | 浮動小数点数に変換 |
| req_params | additional.fields | about_req_params(req_params から派生)から統合 |
| as_number | additional.fields | about_as_number から統合(as_number から文字列に変換) |
| x_forwarded_for | intermediary.ip | 有効な IP の場合は統合 |
| x_forwarded_for | security_result.about.resource.attribute.labels | IP でない場合は x_forwarded_for_label からマージ |
| policy_hit.malicious_user_mitigate_action | security_result.detection_fields | malicious_user_label(policy_hit.malicious_user_mitigate_action から派生)から統合 |
| policy_hit.policy | security_result.about.resource.attribute.labels | policy_label(policy_hit.policy から派生)から統合 |
| policy_hit.policy_namespace | additional.fields | policy_namespace_label(policy_hit.policy_namespace から派生)から統合 |
| policy_hit.policy_rule | security_result.rule_name | 値が直接コピーされる |
| policy_hit.policy_rule_description | security_result.description | 値が直接コピーされる |
| policy_hit.policy_set | target.resource.name | 値が直接コピーされる |
| policy_hit.result | additional.fields | result_label(policy_hit.result から派生)から統合 |
| vhost_id | security_result.detection_fields | vhostlabel(vhost_id から派生)から統合 |
| messageid | security_result.detection_fields | messageid_label(messageid から派生)から統合 |
| sec_event_name | security_result.detection_fields | sec_event_name_label(sec_event_name から派生)から統合 |
| sec_event_type | security_result.detection_fields | sec_event_type_label(sec_event_type から派生)から統合 |
| vh_name | security_result.detection_fields | vhost_name_label(vh_name から派生)から統合 |
| tls_fingerprint | security_result.detection_fields | tls_fingerprint_label(tls_fingerprint から派生)から統合 |
| 時間 | additional.fields | time_label(time から派生)から統合 |
| kubernetes.namespace_name | additional.fields | namespace_name_label(kubernetes.namespace_name から派生)から統合 |
| src_instance | additional.fields | src_instance_label(src_instance から派生)から統合 |
| violation_rating | additional.fields | violation_rating_label(violation_rating から派生)から統合 |
| req_size | additional.fields | req_size_label からマージ(req_size から文字列に変換) |
| rsp_code | additional.fields | rsp_code_label から統合(rsp_code から文字列に変換) |
| rsp_code_class | additional.fields | rsp_code_class_label からマージ(rsp_code_class から文字列に変換) |
| rsp_size | additional.fields | rsp_size_label から統合(rsp_size から文字列に変換) |
| original_path | additional.fields | original_path_label(original_path から派生)から統合 |
| req_path | target.url | 値が直接コピーされる |
| req_headers_size | additional.fields | req_headers_size_label(req_headers_size から派生)から統合 |
| recommended_action | additional.fields | recommended_action_label(recommended_action から派生)から統合 |
| enforcement_mode | additional.fields | enforcement_mode_label(enforcement_mode から派生)から統合 |
| src_ip | principal.ip, principal.asset.ip | IPv4 正規表現に一致する場合は統合 |
| ホスト | principal.ip, principal.asset.ip | IPv4 正規表現に一致する場合は統合 |
| hostname | principal.hostname、principal.asset.hostname | 空でないか「-」でない場合、値は直接コピーされます。 |
| http_version | network.application_protocol_version | 値が直接コピーされる |
| http_version | network.application_protocol | HTTP が含まれている場合は HTTP に設定し、HTTPS が含まれている場合は HTTPS に設定します。 |
| network | principal.nat_ip | IPv4 正規表現に一致する場合は統合 |
| dst_ip | target.ip、target.asset.ip | IPv4 正規表現に一致する場合は統合 |
| dst_port | target.port | 整数に変換 |
| src_port | principal.port | 整数に変換 |
| src_site | additional.fields | src_site_field(src_site から派生)から統合 |
| サイト | additional.fields | site_field(site から派生)から統合 |
| cluster_name | additional.fields | cluster_name_field(cluster_name から派生)から統合 |
| ドメイン | principal.administrative_domain | 値が直接コピーされる |
| method | network.http.method | 空でもなしでもない場合、値は直接コピーされます。 |
| 名前空間 | target.namespace | 値が直接コピーされる |
| city | principal.location.city | 値が直接コピーされる |
| ストリーム | security_result.detection_fields | stream_label(stream から派生)から統合 |
| region | principal.location.country_or_region | 値が直接コピーされる |
| ユーザー | principal.user.userid | user_id の grok パターンを使用してユーザーから抽出 |
| user_ip | target.ip、target.asset.ip | 抽出された user_ip から統合 |
| Cookie | additional.fields | Cookie からマージ(req_headers の Cookie から派生) |
| X-F5-Request-Id | security_result.detection_fields | x_f5_request_id(req_headers の X-F5-Request-Id から派生)から統合 |
| X-Request-Id | security_result.detection_fields | request_id(req_headers の X-Request-Id から派生)からマージ |
| security_result | security_result | 直接統合 |
| has_network、has_principal、has_target | metadata.event_type | すべて true の場合は NETWORK_CONNECTION に設定。has_principal が true の場合は STATUS_UPDATE。それ以外の場合は GENERIC_EVENT |
| metadata.vendor_name | 「F5_DCS」に設定 | |
| metadata.product_name | 「F5 DCS」に設定します。 | |
| intermediary | intermediary | 直接統合 |
rsp_size |
event.idm.read_only_udm.network.received_bytes |
変更履歴からマッピング |
dst |
event.idm.read_only_udm.target.ip と event.idm.read_only_udm.target.asset.ip |
変更履歴からマッピング |
has_sec_event |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
app |
event.idm.read_only_udm.target.application |
変更履歴からマッピング |
node_id |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
sample_rate |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
time_to_first_downstream_tx_byte |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
time_to_first_upstream_rx_byte |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
time_to_first_upstream_tx_byte |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
time_to_last_downstream_tx_byte |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
time_to_last_rx_byte |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
time_to_last_upstream_rx_byte |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
time_to_last_upstream_tx_byte |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
timeseries_enabled |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
sni |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
terminated_time |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
rtt_downstream_seconds |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
rtt_upstream_seconds |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
rsp_code_details |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
authority |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
connected_time |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
req_id |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
proxy_type |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
vh_type |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
dst_instance |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
lb_port |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
mtls |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
ja4_tls_fingerprint |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
duration_with_data_tx_delay |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
dst_site |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
protocol and scheme |
event.idm.read_only_udm.network.application_protocol |
変更履歴からマッピング |
referer |
event.idm.read_only_udm.network.http.referral_url |
変更履歴からマッピング |
tls_cipher_suite |
event.idm.read_only_udm.network.tls.cipher |
変更履歴からマッピング |
tls_version |
event.idm.read_only_udm.network.tls.version |
変更履歴からマッピング |
user_agent |
event.idm.read_only_udm.network.http.user_agent |
変更履歴からマッピング |
user_agent |
event.idm.read_only_udm.network.http.parsed_user_agent |
変更履歴からマッピング |
browser_type |
event.idm.read_only_udm.principal.browser.browser_type |
変更履歴からマッピング |
content-type |
event.idm.read_only_udm.principal.process.file.mime_type |
変更履歴からマッピング |
response_flags |
security_result.detection_fields |
変更履歴からマッピング |
original_authority |
event.idm.read_only_udm.target.administrative_domain |
変更履歴からマッピング |
country |
event.idm.read_only_udm.principal.location.country_or_region |
変更履歴からマッピング |
変更ログ
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。