F5 Distributed Cloud Services のログを収集する
このドキュメントでは、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 Protection、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秒)。 - バッチの最大イベント数: [最大イベント数] を選択し、32 ~ 2,000 の値を入力します(上限なしにする場合は未設定のままにします)。
- Batch Bytes: [Max Bytes] を選択し、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 | RFC3339、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 | 直接統合 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。