F5 Distributed Cloud Services のログを収集する
パーサーのバージョン: 6.0
このドキュメントでは、Google Cloud Storage V2 を使用して F5 Distributed Cloud Services ログを Google Security Operations に取り込む方法について説明します。
F5 Distributed Cloud Services は、マルチクラウドとエッジ ロケーション全体に分散クラウド インフラストラクチャ、アプリケーション配信、API セキュリティ、ウェブ アプリケーション ファイアウォール機能を提供する SaaS ベースのセキュリティ、ネットワーキング、アプリケーション管理プラットフォームです。
始める前に
次の前提条件を満たしていることを確認してください。
- 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と入力します。
- サービス アカウント名:
[作成して続行] をクリックします。
[このサービス アカウントにプロジェクトへのアクセスを許可する] セクションで、次の操作を行います。
- [ロールを選択] をクリックします。
- [ストレージ オブジェクト管理者] を検索して選択します。
[続行] をクリックします。
[完了] をクリックします。
サービス アカウント キーを作成する
- [サービス アカウント] リストで、作成したサービス アカウント(例:
f5-dcs-log-writer)をクリックします。 - [キー] タブに移動します。
- [鍵を追加] > [新しい鍵を作成] の順にクリックします。
- キーのタイプとして [JSON] を選択します。
- [作成] をクリックします。
- JSON キーファイルがパソコンにダウンロードされます。
- このファイルは安全な場所に保存してください。これは次のステップで必要になります。
GCS バケットに対する IAM 権限を付与する
- [Cloud Storage] > [バケット] に移動します。
- バケット名(例:
f5-dcs-logs)をクリックします。 - [権限] タブに移動します。
- [アクセス権を付与] をクリックします。
- 次の構成の詳細を指定します。
- プリンシパルを追加: サービス アカウントのメールアドレス(例:
f5-dcs-log-writer@PROJECT_ID.iam.gserviceaccount.com)を入力します。 - ロールを割り当てる: [ストレージ オブジェクト管理者] を選択します。
- プリンシパルを追加: サービス アカウントのメールアドレス(例:
- [保存] をクリックします。
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 認証情報] フィールドで [構成] をクリックします。
- [認証情報のタイプ] プルダウンで、[サービス アカウント認証情報ファイル] を選択します。
- [ファイルをアップロード] をクリックし、前の手順でダウンロードした JSON キーファイルを選択します。
- [適用] をクリックします。
- [保存して終了] をクリックします。
グローバル ログ レシーバーを作成する
- F5 Distributed Cloud Console で、[Multi-Cloud Network Connect] サービスに移動します。
- [Manage> Log Management> Global Log Receiver] に移動します。
- [グローバル ログ レシーバを追加] をクリックします。
[メタデータ] セクションで、次の操作を行います。
- 名前: わかりやすい名前を入力します(例:
chronicle-gcs-receiver)。 - 説明(省略可):
Global log receiver for Google SecOps SIEMと入力します。
- 名前: わかりやすい名前を入力します(例:
[ログの種類] プルダウンで、エクスポートするログの種類を選択します。
- リクエストログ: ユーザー、パス、メソッド、レスポンス コードを含む HTTP リクエスト/レスポンス ログ
- セキュリティ イベント: WAF イベント、DDoS、API 保護、Bot Defense イベント
- 監査ログ: 公開 API を介した構成の変更
- DNS リクエストログ: DNS クエリログ
[ログ メッセージの選択] プルダウンで、次のいずれかを選択します。
- 現在の Namespace からログを選択: 現在の Namespace からのみログを送信します。
- すべての Namespace からログを選択する: すべての Namespace からログを送信します(包括的な可視性を確保するためにおすすめします)。
- 特定の名前空間のログを選択する: 指定された名前空間からログを送信します([項目を追加] をクリックして名前空間名を追加します)。
[Receiver Configuration] プルダウンで、[GCP Bucket Receiver] を選択します。
[GCP Bucket Name] フィールドに、GCS バケットの名前(
f5-dcs-logsなど)を入力します。[GCP Cloud Credentials] プルダウンで、以前に作成したクラウド認証情報(
gcp-chronicle-logsなど)を選択します。省略可: [Show Advanced Fields] を開いて、バッチ オプションを構成します。
- バッチ タイムアウト オプション: [タイムアウト(秒)] を選択して値を入力します(デフォルト:
300秒)。 - Batch Max Events: [Max Events] を選択し、32 ~ 2,000 の値を入力します(上限なしにする場合は未設定のままにします)。
- バッチ バイト数: [最大バイト数] を選択し、4,096 ~ 1,048,576 の値を入力します(デフォルト:
10485760バイト / 10 MB)。
- バッチ タイムアウト オプション: [タイムアウト(秒)] を選択して値を入力します(デフォルト:
[保存して終了] をクリックします。
接続をテストする
- [グローバル ログ レシーバ] リストで、作成したレシーバ(
chronicle-gcs-receiverなど)を見つけます。 - [アクション] 列にある 3 つのドット [...] をクリックします。
- [接続をテスト] を選択します。
- テストが完了するまで待ちます。
接続が成功したことを示すメッセージが表示されます。
GCS バケットのログを確認する
- GCP コンソールで、[Cloud Storage] > [バケット] に移動します。
- バケット名(例:
f5-dcs-logs)をクリックします。 - ログファイルがバケットに作成されていることを確認します。
F5 Distributed Cloud は、次のフォルダ構造でログを整理します。
YYYY/MM/DD/HH/- フォルダは毎日(YYYY/MM/DD)作成されます。
- 各日のフォルダ内に、各時間(HH)のサブフォルダが作成されます。
- 5 分ごとに、新しい圧縮 gzip ファイルが時間単位のサブフォルダに書き込まれます。
- ファイルは NDJSON 形式(改行区切り JSON)です。
gzip ファイルをクリックしてダウンロードし、ログ形式を確認します。
Google SecOps サービス アカウントを取得する
Google SecOps は、一意のサービス アカウントを使用して GCS バケットからデータを読み取ります。このサービス アカウントにバケットへのアクセス権を付与する必要があります。
サービス アカウントのメールアドレスを取得する
- [SIEM 設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- [単一フィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
F5 DCS Logs)。 - [ソースタイプ] として [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 日)。
アセットの名前空間: アセットの名前空間
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 から統合(タグから派生) |
| アクション | security_result.action | 一致が許可の場合は ALLOW、一致が拒否の場合は BLOCK に設定します |
| 重要度 | security_result.severity | エラー / 警告の場合は HIGH、重大な場合は CRITICAL、通知の場合は MEDIUM、情報の場合は 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(時間から派生)から統合 |
| 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(サイトから派生)から統合 |
| cluster_name | additional.fields | cluster_name_field(cluster_name から派生)から統合されました |
| ドメイン | principal.administrative_domain | 値を直接コピー |
| method | network.http.method | 空でないか N/A でない場合、値が直接コピーされます |
| namespace | 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 のプロフェッショナルから回答を得ることができます。