Cloudflare Page Shield ログを収集する
このドキュメントでは、Amazon S3 を使用して Cloudflare Page Shield ログを Google Security Operations に取り込む方法について説明します。
Page Shield は、ウェブサイト訪問者が読み込んだリソース(スクリプト、接続、Cookie など)を管理し、リソースが変更された場合や悪意のあるリソースと見なされた場合にアラート通知をトリガーします。
始める前に
- Google SecOps インスタンス
- Page Shield が有効になっている Cloudflare アカウント
- Cloudflare ダッシュボードへの特権アクセス
- AWS(S3、IAM)への特権アクセス
このオプションでは、Cloudflare Logpush を使用して Page Shield イベントを Amazon S3 にエクスポートし、Google SecOps が取り込みます。
Page Shield を有効にする
- Cloudflare ダッシュボードにログインします。
- アカウントとドメインを選択します。
- [セキュリティ> Page Shield] に移動します。
- [Page Shield を有効にする] をクリックします。
Amazon S3 バケットを作成する
- Amazon S3 コンソールを開きます。
- [バケットを作成] をクリックします。
- 次の構成の詳細を指定します。
- バケット名: バケットのわかりやすい名前を入力します(例:
cloudflare-pageshield-logs)。 - リージョン: 使用する AWS リージョン(
us-east-1など)を選択します。
- バケット名: バケットのわかりやすい名前を入力します(例:
- [作成] をクリックします。
- バケット名とリージョンを保存して、後で参照できるようにします。
S3 アクセス権を持つ IAM ユーザーを作成する
- IAM コンソールを開きます。
- [ユーザー] > [ユーザーを追加] をクリックします。
- ユーザー名を入力します(例:
chronicle-s3-user)。 - [プログラムによるアクセス] を選択します。
- [Next: Permissions] をクリックします。
- [既存のポリシーを直接アタッチする] を選択します。
- AmazonS3FullAccess ポリシーを検索して選択します。
- [Next: Tags] をクリックします。
- [次へ: 確認] をクリックします。
- [Create user] をクリックします。
- [.csv ファイルをダウンロード] をクリックして、[アクセスキー ID] と [シークレット アクセスキー] を保存します。
Cloudflare 用に S3 バケット ポリシーを構成する
- Amazon S3 コンソールで、バケットを選択します。
- [権限> バケット ポリシー] をクリックします。
- [編集] をクリックします。
次のポリシーを貼り付けます。
<BUCKET_NAME>はバケット名に置き換えます。{ "Id": "Policy1506627184792", "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1506627150918", "Action": ["s3:PutObject"], "Effect": "Allow", "Resource": "arn:aws:s3:::<BUCKET_NAME>/*", "Principal": { "AWS": ["arn:aws:iam::391854517948:user/cloudflare-logpush"] } } ] }[変更を保存] をクリックします。
Cloudflare Logpush ジョブを作成する
- Cloudflare ダッシュボードにログインします。
- アカウントとドメインを選択します。
- [Analytics & Logs] > [Logs] に移動します。
- [Create a Logpush job] をクリックします。
- [Select a destination] で、[Amazon S3] を選択します。
- 次の宛先情報を入力します。
- バケット名: S3 バケット名(
cloudflare-pageshield-logsなど)を入力します。 - バケット リージョン: S3 バケットと一致するリージョンを選択します。
- バケットパス(省略可): パス接頭辞(
pageshield/など)を入力します。
- バケット名: S3 バケット名(
- [続行] をクリックします。
- 所有権を証明するため、Cloudflare は指定された宛先にファイルを送信します。トークンを確認するには、所有権の確認ファイルの [概要] タブで [開く] ボタンを選択し、Cloudflare ダッシュボードに貼り付けて、バケットへのアクセス権を確認します。所有権トークンを入力し、[Continue] を選択します。
- [データセットを選択] で、[Page Shield イベント] を選択します。
- [次へ] をクリックします。
- ログプッシュ ジョブを構成します。
- ジョブ名: わかりやすい名前を入力します(例:
pageshield-to-s3)。 - ログが一致する場合: すべてのイベントを含める場合は空白のままにします。必要に応じてフィルタを構成します。
- Send the following fields: [All fields] を選択するか、特定のフィールドを選択します。
- ジョブ名: わかりやすい名前を入力します(例:
- [送信] をクリックします。
Page Shield のログを取り込むように Google SecOps でフィードを構成する
- [SIEM 設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- 次のページで [単一のフィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
Cloudflare Page Shield S3)。 - [ソースタイプ] として [Amazon S3 V2] を選択します。
- [Log type] として [Cloudflare Page Shield] を選択します。
- [次へ] をクリックします。
次の入力パラメータの値を指定します。
S3 URI: バケット URI を
s3://<BUCKET_NAME>/<BUCKET_PATH>/の形式で入力します。Source deletion option: 必要に応じて削除オプションを選択します。
- なし: 転送後にファイルを削除しません。
- 転送されたファイルを削除する: 転送が完了した後にファイルを削除します。
- 転送されたファイルと空のディレクトリを削除する: 転送が完了した後にファイルと空のディレクトリを削除します。
ファイルの最大経過日数: 指定した日数以内に変更されたファイルを含めます。デフォルトは 180 日です。
アクセスキー ID: S3 バケットにアクセスできるユーザー アクセスキー。
シークレット アクセスキー: S3 バケットにアクセスできるユーザーのシークレット キー。
アセットの名前空間: アセットの名前空間。
Ingestion labels: このフィードのイベントに適用されるラベル。
[次へ] をクリックします。
[Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
UDM マッピング テーブル
| ログフィールド | UDM マッピング | 論理 |
|---|---|---|
| URLContainsCDNCGIPath | event.idm.read_only_udm.additional.fields.CGI_label | URLContainsCDNCGIPath から取得した値。キー「CGI」を持つラベルの string_value として設定 |
| アクション | event.idm.read_only_udm.additional.fields.action_label | Action から値を取得し、キーが「action」のラベルで string_value として設定 |
| resource.first_page_url | event.idm.read_only_udm.additional.fields.first_page_label | resource.first_page_url から取得した値。キー「first_page_url」を持つラベルの string_value として設定 |
| resource.last_page_url | event.idm.read_only_udm.additional.fields.last_page_label | resource.last_page_url から取得した値。キー「last_page_url」のラベルの string_value として設定 |
| name | event.idm.read_only_udm.additional.fields.name_label | 名前から取得した値。キー「name」のラベルの string_value として設定 |
| ts | event.idm.read_only_udm.metadata.event_timestamp | ts(UNIX)からタイムスタンプに変換 |
| event.idm.read_only_udm.metadata.event_type | has_principal、has_target、has_target_user に基づいて派生します。プリンシパルとターゲットの両方が存在する場合は NETWORK_CONNECTION、target_user が存在する場合は USER_UNCATEGORIZED、プリンシパルが存在する場合は STATUS_UPDATE、それ以外の場合は GENERIC_EVENT | |
| resource.url | event.idm.read_only_udm.network.http.referral_url | resource.url から取得された値 |
| ホスト | event.idm.read_only_udm.principal.asset.hostname | Host または host.hostname から取得した値 |
| ホスト | event.idm.read_only_udm.principal.hostname | Host または host.hostname から取得した値 |
| alert_type | event.idm.read_only_udm.principal.resource.attribute.labels.alert_type_label | alert_type から取得した値。キー「alert_type」のラベルの値として設定 |
| resource.cryptomining_score | event.idm.read_only_udm.principal.resource.attribute.labels.crypto_label | resource.cryptomining_score から取得した値。キー「cryptominingscore%{index2}」のラベルの値として設定 |
| resource.dataflow_score | event.idm.read_only_udm.principal.resource.attribute.labels.dataflow_label | resource.dataflow_score から取得した値。キー「dataflowscore%{index2}」のラベルの値として設定 |
| policie.description | event.idm.read_only_udm.principal.resource.attribute.labels.desc_label | policie.description から取得した値。キー「description_%{index}」のラベルの値として設定 |
| version.fetched_at | event.idm.read_only_udm.principal.resource.attribute.labels.fetched_at_label | version.fetched_at から取得した値。キー「fetchedat%{index2}」のラベルの値として設定 |
| version.hash | event.idm.read_only_udm.principal.resource.attribute.labels.hash_label | version.hash から取得した値。キー「hash_%{index2}」のラベルの値として設定 |
| policie.id | event.idm.read_only_udm.principal.resource.attribute.labels.id_label | policie.id から取得した値。キー「policyid%{index}」のラベルの値として設定 |
| data.options.remove_dashboard_links | event.idm.read_only_udm.principal.resource.attribute.labels.remove_dash_label | data.options.remove_dashboard_links から取得した値。キー「remove_dashboard_links」のラベルの値として設定 |
| resource.resource_type | event.idm.read_only_udm.principal.resource.attribute.labels.res_type_label | resource.resource_type から取得した値。キー「resourcetype%{index2}」のラベルの値として設定 |
| data.type | event.idm.read_only_udm.principal.resource.attribute.labels.type_label | data.type から取得した値。キー「type」のラベルの値として設定 |
| data.zones | event.idm.read_only_udm.principal.resource.attribute.labels.zones_label | data.zones から取得した値。キー「zones」のラベルの値として設定 |
| resource.id | event.idm.read_only_udm.principal.resource.id | resource.id から取得した値 |
| PageURL | event.idm.read_only_udm.principal.url | PageURL から取得された値 |
| account_id | event.idm.read_only_udm.principal.user.product_object_id | account_id から取得された値 |
| policy_id | event.idm.read_only_udm.security_result.detection_fields.policy_id_label | policy_id から取得した値。キー「policy_id」のラベルの値として設定 |
| policy_name | event.idm.read_only_udm.security_result.detection_fields.policy_name_label | policy_name から取得された値。キー「policy_name」のラベルの値として設定 |
| テキスト | event.idm.read_only_udm.security_result.description | テキストから取得した値 |
| resource.first_seen_at | event.idm.read_only_udm.security_result.first_discovered_time | resource.first_seen_at から ISO8601 タイムスタンプに変換 |
| PolicyID | event.idm.read_only_udm.security_result.rule_name | PolicyID から取得した値 |
| data.severity | event.idm.read_only_udm.security_result.severity | data.severity から派生します。「INFO」の場合は「INFORMATIONAL」、「WARN」の場合は「MEDIUM」、それ以外の場合は「UNKNOWN_SEVERITY」 |
| URL | event.idm.read_only_udm.target.url | URL から取得された値 |
| URLHost | event.idm.read_only_udm.target.user.email_addresses | メール パターンと一致する場合、URLHost から取得された値 |
ご不明な点がございましたら、コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。