指紋認証のログを収集する
パーサーのバージョン: 1.0
このドキュメントでは、Webhook を使用してログを Google Security Operations に push するように Fingerprint(以前の FingerprintJS)を構成する方法について説明します。
Fingerprint は、訪問者の識別と不正行為の検出機能を提供するデバイス インテリジェンス プラットフォームです。一意のサイト訪問者 ID を生成し、ボット検出、VPN 検出、シークレット モード検出などのスマート シグナルや、その他のデバイス インテリジェンス分析情報を提供します。FingerprintJS JavaScript エージェントで訪問者が識別されると、Webhook は識別イベントデータを Google Security Operations にリアルタイムで送信できます。
始める前に
次の前提条件を満たしていることを確認します。
- Google SecOps インスタンス
- Webhook サポート付きの FingerprintJS アカウント
- Google Cloud コンソールへのアクセス(API キーの作成用)
- ウェブサイトまたはアプリケーションにインストールされた FingerprintJS JavaScript エージェント
Google SecOps で Webhook フィードを作成する
フィードを作成する
- [SIEM 設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- 次のページで、[単一のフィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
FingerprintJS Identification Events)。 - [Source type] として [Webhook] を選択します。
- [ログタイプ] として [FingerprintJS] を選択します。
- [次へ] をクリックします。
- 次の入力パラメータの値を指定します。
- Split delimiter(省略可): 空白のままにします。各 Webhook リクエストには、1 つの識別イベントが含まれています。
- アセットの名前空間: アセットの名前空間。
- Ingestion labels: このフィードのイベントに適用されるラベル。
- [次へ] をクリックします。
- [Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
秘密鍵を生成して保存する
フィードを作成したら、認証用のシークレット キーを生成する必要があります。
- フィードの詳細ページで、[シークレット キーを生成] をクリックします。
- ダイアログに秘密鍵が表示されます。
- 秘密鍵をコピーして安全に保存します。
重要: シークレット キーは一度しか表示されず、後で取得することはできません。秘密鍵を紛失した場合は、新しい秘密鍵を生成する必要があります。
フィード エンドポイントの URL を取得する
- フィードの [詳細] タブに移動します。
- [エンドポイント情報] セクションで、[フィード エンドポイント URL] をコピーします。
URL の形式は次のとおりです。
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreateまたは
https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate次の手順で使用するため、この URL を保存します。
[完了] をクリックします。
Google Cloud API キーを作成する
Chronicle では、認証に API キーが必要です。Google Cloud コンソールで制限付き API キーを作成します。
API キーを作成する
- Google Cloud コンソールの [認証情報] ページに移動します。
- プロジェクト(Chronicle インスタンスに関連付けられているプロジェクト)を選択します。
- [認証情報を作成> API キー] をクリックします。
- API キーが作成され、ダイアログに表示されます。
- [API キーを編集] をクリックして、キーを制限します。
API キーを制限する
- [API キー] 設定ページで、次の操作を行います。
- 名前: わかりやすい名前を入力します(例:
Chronicle FingerprintJS Webhook API Key)。
- 名前: わかりやすい名前を入力します(例:
- [API の制限] で次の操作を行います。
- [キーを制限] を選択します。
- [API を選択] プルダウンで、[Google SecOps API](または Chronicle API)を検索して選択します。
- [保存] をクリックします。
- ページ上部の [API キー] フィールドから API キーの値をコピーします。
API キーを安全に保存します。
FingerprintJS Webhook を構成する
Webhook URL を作成する
Chronicle エンドポイント URL と API キーを組み合わせます。
<ENDPOINT_URL>?key=<API_KEY>例:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...
FingerprintJS ダッシュボードで Webhook を作成する
- FingerprintJS ダッシュボードにログインします。
- [Dashboard] > [Webhooks] に移動します。
- [Add webhook] をクリックします。
- 次の構成の詳細を指定します。
- URL: 上記の API キーを含む完全なエンドポイント URL を貼り付けます。
- 環境(省略可): 環境を選択すると、Webhook は一致する環境のイベントのみをレポートします。すべての環境からイベントを受信する場合は、空欄にします。
- 基本認証(省略可): 追加の認証を追加する場合は、[基本認証] を開きます。Chronicle との統合では、認証は API キーとシークレット キーを介して処理されるため、このフィールドは空のままにできます。
- [Webhook を作成] をクリックします。
- 成功モーダルに [Webhook が作成されました] と表示されます。
- 重要: ウェブフック署名を使用している場合(Enterprise プランのみ)、成功モーダルに表示された暗号鍵をコピーして保存します。キーは 1 回だけ表示されます。
Chronicle のシークレット キーを Webhook に追加する
FingerprintJS は、Webhook の作成時にカスタム HTTP ヘッダーをサポートしていません。Chronicle シークレット キーを Webhook URL のクエリ パラメータとして追加する必要があります。
シークレット キーを含むように Webhook URL を更新します。
<ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>例:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...&secret=abcd1234...
Webhook の URL を更新するには:
- FingerprintJS ダッシュボードで、[Dashboard] > [Webhooks] に移動します。
- テーブルでウェブフックを見つけて、[編集] アイコンをクリックします。
- API キーとシークレット キーの両方を含む完全な URL で [URL] フィールドを更新します。
- [Webhook を編集] をクリックします。
Webhook をテストする
- FingerprintJS ダッシュボードで、[Dashboard] > [Webhooks] に移動します。
- テーブルで Webhook を見つけます。
- [テストイベントを送信] をクリックします。
- テストイベントが正常に送信されたことを確認します。
Webhook に配信成功ステータスが表示されていることを確認します。
認証方法のリファレンス
Chronicle ウェブフック フィードは、複数の認証方法をサポートしています。FingerprintJS ウェブフックは、認証にクエリ パラメータを使用します。
クエリ パラメータ メソッド
FingerprintJS は、Webhook の作成時にカスタム HTTP ヘッダーをサポートしていないため、認証情報を URL に追加する必要があります。
URL 形式:
<ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>例:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...&secret=abcd1234...
リクエストの形式:
POST <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY> HTTP/1.1 Content-Type: application/json { "visitorId": "3HNey93AkBW6CRbxV6xP", "requestId": "1708102555327.NLOjmg", "timestamp": 1582299576512 }
UDM マッピング テーブル
| ログフィールド | UDM マッピング | ロジック |
|---|---|---|
| rawDeviceAttributes.architecture.value、rawDeviceAttributes.audio.value、rawDeviceAttributes.colorDepth.value、rawDeviceAttributes.colorGamut.value、rawDeviceAttributes.contrast.value、rawDeviceAttributes.cookiesEnabled.value、rawDeviceAttributes.deviceMemory.value、rawDeviceAttributes.fonts.value、rawDeviceAttributes.forcedColors.value、rawDeviceAttributes.hardwareConcurrency.value、rawDeviceAttributes.hdr.value、rawDeviceAttributes.indexedDB.value、rawDeviceAttributes.localStorage.value、rawDeviceAttributes.math.value、rawDeviceAttributes.monochrome.value、rawDeviceAttributes.openDatabase.value、rawDeviceAttributes.pdfViewerEnabled.value、rawDeviceAttributes.reducedMotion.value、rawDeviceAttributes.screenFrame.value、rawDeviceAttributes.screenResolution.value、rawDeviceAttributes.sessionStorage.value、rawDeviceAttributes.touchSupport.value.maxTouchPoints、rawDeviceAttributes.languages.value、rawDeviceAttributes.vendorFlavors.value、rawDeviceAttributes.fontPreferences.value.apple、rawDeviceAttributes.fontPreferences.value.default、rawDeviceAttributes.fontPreferences.value.min、rawDeviceAttributes.fontPreferences.value.mono、rawDeviceAttributes.fontPreferences.value.sans、rawDeviceAttributes.fontPreferences.value.serif、rawDeviceAttributes.fontPreferences.value.system | additional.fields | ソースフィールドから作成されたラベルから統合されました |
| has_principal、has_target、has_target_resource | metadata.event_type | has_principal と has_target が true の場合は「NETWORK_CONNECTION」、has_target_resource が true の場合は「USER_RESOURCE_ACCESS」、has_principal が true の場合は「STATUS_UPDATE」、それ以外の場合は「GENERIC_EVENT」に設定します。 |
| source_type | metadata.product_event_type | 値を直接コピー |
| requestId | metadata.product_log_id | 値を直接コピー |
| browserDetails.userAgent | network.http.parsed_user_agent | browserDetails.userAgent から解析されます |
| browserDetails.browserName | network.http.parsed_user_agent.browser | 値を直接コピー |
| browserDetails.browserFullVersion | network.http.parsed_user_agent.browser_version | 値を直接コピー |
| browserDetails.device | network.http.parsed_user_agent.device | 値を直接コピー |
| network.http.parsed_user_agent.family | 「USER_DEFINED」に設定 | |
| browserDetails.os | network.http.parsed_user_agent.os | 値を直接コピー |
| browserDetails.clientReferrer | network.http.referral_url | 値を直接コピー |
| browserDetails.userAgent、userAgent | network.http.user_agent | userAgent が空でない場合は userAgent の値、それ以外の場合は browserDetails.userAgent |
| tag.session | network.session_id | 値を直接コピー |
| rawDeviceAttributes.vendor.value | principal.administrative_domain | 値を直接コピー |
| ip | principal.asset.ip | 値を直接コピー |
| ip | principal.ip | 値を直接コピー |
| ipInfo.v4.geolocation.city.name | principal.location.city | 値を直接コピー |
| ipInfo.v4.geolocation.country.name | principal.location.country_or_region | 値を直接コピー |
| ipInfo.v4.geolocation.latitude | principal.location.region_coordinates.latitude | 浮動小数点数に変換済み |
| ipInfo.v4.geolocation.longitude | principal.location.region_coordinates.longitude | 浮動小数点数に変換済み |
| browserDetails.osVersion、rawDeviceAttributes.platform.value | principal.platform_version | rawDeviceAttributes.platform.value が空でない場合はその値、それ以外の場合は browserDetails.osVersion |
| ipInfo.v4.asn.asn、ipInfo.v4.asn.network、ipInfo.v4.asn.name、ipInfo.v4.geolocation.accuracyRadius、ipInfo.v4.geolocation.continent.name、ipInfo.v4.geolocation.timezone、ipInfo.v4.geolocation.subdivisions.isoCode、ipInfo.v4.geolocation.subdivisions.name | principal.resource.attribute.labels | ソースフィールドから作成されたラベルから統合されました |
| bot.result、browserDetails.browserMajorVersion、confidence.score、confidence.revision、developerTools.result、highActivity.result、incognito、ipBlocklist.result、ipBlocklist.details.attackSource、ipBlocklist.details.emailSpam、visitorFound、visitorId、tag.request、privacySettings.result、proxy.result、suspectScore.result、tor.result、virtualMachine.result、tampering.anomalyScore、tampering.antiDetectBrowser、tampering.result、vpn.confidence、vpn.originCountry、vpn.originTimezone、vpn.result、vpn.methods.auxiliaryMobile、vpn.methods.osMismatch、vpn.methods.publicVPN、vpn.methods.timezoneMismatch、velocity.distinctCountry.intervals.1h、velocity.distinctCountry.intervals.24h、velocity.distinctCountry.intervals.5m、velocity.distinctIp.intervals.1h、velocity.distinctIp.intervals.24h、velocity.distinctIp.intervals.5m、velocity.events.intervals.1h、velocity.events.intervals.24h、velocity.events.intervals.5m、velocity.ipEvents.intervals.1h、velocity.ipEvents.intervals.24h、velocity.ipEvents.intervals.5m、rawDeviceAttributes.webGlBasics.value.renderer、rawDeviceAttributes.webGlBasics.value.rendererUnmasked、rawDeviceAttributes.webGlBasics.value.vendorUnmasked、rawDeviceAttributes.webGlBasics.value.shadingLanguageVersion、rawDeviceAttributes.webGlExtensions.value.contextAttributes、rawDeviceAttributes.webGlExtensions.value.extensions、rawDeviceAttributes.webGlExtensions.value.extensionParameters、rawDeviceAttributes.webGlExtensions.value.parameters、rawDeviceAttributes.webGlExtensions.value.shaderPrecisions、rawDeviceAttributes.mathML.value.bottom、rawDeviceAttributes.mathML.value.top、rawDeviceAttributes.mathML.value.left、rawDeviceAttributes.mathML.value.right、rawDeviceAttributes.mathML.value.width、rawDeviceAttributes.mathML.value.height、rawDeviceAttributes.mathML.value.font、rawDeviceAttributes.mathML.value.x、rawDeviceAttributes.mathML.value.y、rawDeviceAttributes.emoji.value.bottom、rawDeviceAttributes.emoji.value.top、rawDeviceAttributes.emoji.value.left、rawDeviceAttributes.emoji.value.right、rawDeviceAttributes.emoji.value.width、rawDeviceAttributes.emoji.value.height、rawDeviceAttributes.emoji.value.font、rawDeviceAttributes.emoji.value.x、rawDeviceAttributes.emoji.value.y、rawDeviceAttributes.canvas.value.Geometry、rawDeviceAttributes.canvas.value.Text、rawDeviceAttributes.canvas.value.Winding | security_result.detection_fields | ソースフィールドから作成されたラベルから統合されました |
| rawDeviceAttributes.webGlBasics.value.vendor | target.administrative_domain | 値を直接コピー |
| ipInfo.v6.address | target.asset.ip | 値を直接コピー |
| ipInfo.v6.address | target.ip | 値を直接コピー |
| ipInfo.v6.geolocation.city.name | target.location.city | 値を直接コピー |
| ipInfo.v6.geolocation.country.name | target.location.country_or_region | 値を直接コピー |
| ipInfo.v6.geolocation.latitude | target.location.region_coordinates.latitude | 浮動小数点数に変換済み |
| ipInfo.v6.geolocation.longitude | target.location.region_coordinates.longitude | 浮動小数点数に変換済み |
| パス | target.path | 値を直接コピー |
| rawDeviceAttributes.webGlBasics.value.version | target.platform_version | 値を直接コピー |
| ipInfo.v6.asn.asn、ipInfo.v6.asn.network、ipInfo.v6.asn.name、ipInfo.v6.geolocation.accuracyRadius、ipInfo.v6.geolocation.continent.name、ipInfo.v6.geolocation.timezone、ipInfo.v6.geolocation.subdivisions.isoCode、ipInfo.v6.geolocation.subdivisions.name | target.resource.attribute.labels | ソースフィールドから作成されたラベルから統合されました |
| URL | target.url | 値を直接コピー |
| metadata.product_name | 「FINGERPRINT_JS」に設定 | |
| metadata.vendor_name | 「FINGERPRINT_JS」に設定 |
変更履歴
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。