Fivetran のログを収集する
このドキュメントでは、Webhook を使用してログを Google Security Operations に push するように Fivetran を構成する方法について説明します。
Fivetran は、さまざまなソースからデータ ウェアハウスへのデータ パイプラインを自動化するデータ統合プラットフォームです。Fivetran は、コネクタの同期イベント、変換イベント、接続ステータスの変更などの運用イベントを生成します。これらのイベントは、モニタリング、アラート、セキュリティ分析のために、アウトバウンド Webhook 経由で外部エンドポイントに送信できます。
始める前に
次の前提条件を満たしていることを確認します。
- Google SecOps インスタンス
- 管理者権限またはアカウント レベルの権限を持つ Fivetran アカウント
- Google Cloud コンソールへのアクセス(API キーの作成用)
- Business Critical プランまたは Enterprise プランの Fivetran アカウント(Webhook 機能用)
Google SecOps で Webhook フィードを作成する
フィードを作成する
- [SIEM 設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- 次のページで [単一のフィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
Fivetran Events)。 - [Source type] として [Webhook] を選択します。
- [ログタイプ] として [Fivetran] を選択します。
- [次へ] をクリックします。
- 次の入力パラメータの値を指定します。
- 分割区切り文字(省略可): 空のままにします(各 Webhook リクエストには単一の JSON イベントが含まれます)。
- アセットの名前空間: アセットの名前空間
- 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 キーを作成する
Google SecOps では、認証に API キーが必要です。Google Cloud コンソールで制限付き API キーを作成します。
API キーを作成する
- Google Cloud コンソールの [認証情報] ページに移動します。
- プロジェクト(Google SecOps インスタンスに関連付けられているプロジェクト)を選択します。
- [認証情報を作成> API キー] をクリックします。API キーが作成され、ダイアログに表示されます。
- [API キーを編集] をクリックして、キーを制限します。
API キーを制限する
- [API キー] 設定ページで、次の操作を行います。
- 名前: わかりやすい名前を入力します(例:
Google SecOps Webhook API Key)。
- 名前: わかりやすい名前を入力します(例:
- [API の制限] で次の操作を行います。
- [キーを制限] を選択します。
- [API を選択] リストで、[Google SecOps API](または [Chronicle API])を検索して選択します。
- [保存] をクリックします。
- ページ上部の [API キー] フィールドから API キーの値をコピーします。
- API キーを安全に保存します。
Fivetran Webhook を構成する
Webhook URL を作成する
Google SecOps エンドポイント URL と API キーを組み合わせます。
<ENDPOINT_URL>?key=<API_KEY>例:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...
Fivetran REST API を使用して Webhook を作成する
Fivetran ウェブフックは REST API を介して構成されます。アカウント単位の Webhook(すべてのグループ)またはグループ単位の Webhook(特定の宛先グループ)を作成できます。
Fivetran API 認証情報を取得する
- Fivetran アカウントにログインします。
- 右上にあるユーザー名をクリックします。
- [アカウント設定] > [API 構成] に移動します。
- API キーがない場合:
- [API キーを生成] をクリックします。
- API キーと API シークレットをコピーして安全に保存します。
アカウント単位の Webhook を作成する
このメソッドを使用すると、アカウント内のすべてのグループのすべてのコネクタからイベントを受信できます。
- ターミナルまたは API クライアントを開きます。
次の curl コマンドを使用して Webhook を作成します。
curl -X POST https://api.fivetran.com/v1/webhooks/account \ -u "API_KEY:API_SECRET" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{ "url": "https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=YOUR_SECOPS_API_KEY", "events": [ "sync_start", "sync_end", "transformation_start", "transformation_succeeded", "transformation_failed", "connection_successful", "connection_failure", "create_connector", "pause_connector", "resume_connector", "edit_connector", "delete_connector", "force_update_connector", "resync_connector", "resync_table" ], "active": true, "secret": "YOUR_SECOPS_SECRET_KEY" }'次の値を置き換えます。
API_KEY: Fivetran API キーAPI_SECRET: Fivetran API シークレットYOUR_SECOPS_API_KEY: 先ほど作成した Google Cloud API キーYOUR_SECOPS_SECRET_KEY: フィード作成時の Google SecOps 秘密鍵
レスポンスに webhook ID が含まれます。
{ "code": "Success", "message": "Operation performed.", "data": { "id": "webhook_abc123", "type": "account", "url": "https://malachiteingestion-pa.googleapis.com/...", "events": ["sync_start", "sync_end", ...], "active": true, "secret": "******", "created_at": "2025-01-15T10:30:00Z", "created_by": "user_id" } }後で参照できるように、Webhook ID を保存します。
グループレベルの Webhook を作成する(省略可)
このメソッドを使用して、特定の宛先グループのコネクタからイベントを受信します。
グループ ID を取得します。
- Fivetran にログインします。
- モニタリングする宛先グループに移動します。
- グループ ID は URL(
https://fivetran.com/dashboard/groups/GROUP_ID)にあります。
次の curl コマンドを使用して Webhook を作成します。
curl -X POST https://api.fivetran.com/v1/webhooks/group/GROUP_ID \ -u "API_KEY:API_SECRET" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{ "url": "https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=YOUR_SECOPS_API_KEY", "events": [ "sync_start", "sync_end", "transformation_start", "transformation_succeeded", "transformation_failed", "connection_successful", "connection_failure" ], "active": true, "secret": "YOUR_SECOPS_SECRET_KEY" }'GROUP_IDは、宛先グループ ID に置き換えます。
利用可能な Webhook イベント
モニタリングするイベントを選択します。
| イベント | 説明 |
|---|---|
sync_start |
コネクタの同期を開始しました |
sync_end |
コネクタの同期が完了しました |
transformation_start |
変換が開始されました |
transformation_succeeded |
変換が正常に完了しました |
transformation_failed |
変換に失敗しました |
connection_successful |
接続テストに成功しました |
connection_failure |
接続テストに失敗しました |
create_connector |
新しいコネクタが作成されました |
pause_connector |
コネクタが一時停止されました |
resume_connector |
コネクタが再開されました |
edit_connector |
コネクタ構成が編集されました |
delete_connector |
コネクタを削除しました |
force_update_connector |
コネクタの強制更新がトリガーされました |
resync_connector |
コネクタの再同期がトリガーされた |
resync_table |
テーブルの再同期がトリガーされた |
Webhook をテストする
Fivetran API を使用して Webhook をテストします。
curl -X POST https://api.fivetran.com/v1/webhooks/WEBHOOK_ID/test \ -u "API_KEY:API_SECRET" \ -H "Accept: application/json"WEBHOOK_IDは、作成レスポンスの Webhook ID に置き換えます。Fivetran はテストイベントを Google SecOps に送信します。
Google SecOps でイベントを確認します。
- [SIEM 設定] > [フィード] に移動します。
- Fivetran フィードをクリックします。
- [ログ] タブに移動します。
- テストイベントが受信されたことを確認します。
Webhook ペイロード形式
Fivetran は、次の JSON 形式で Webhook イベントを送信します。
{ "event": "sync_end", "created": "2025-01-15T10:30:00.386Z", "connector_type": "salesforce", "connector_id": "mystified_presiding", "connector_name": "Salesforce Production", "sync_id": "abc123-def456-ghi789", "destination_group_id": "deck_enjoy", "data": { "status": "SUCCESSFUL" } }
Webhook 認証
Fivetran は、提供されたシークレットを使用して HMAC SHA-256 で Webhook ペイロードに署名します。署名は X-Fivetran-Signature-256 ヘッダーで送信されます。
Google SecOps は、フィードの作成時に構成された秘密鍵を使用して署名を自動的に検証します。
Webhook の再試行の動作
Fivetran は、失敗した Webhook を自動的に再試行します。
| 再試行 | Time After Initial Attempt(初回試行後の時間) |
|---|---|
| 最初の試行 | 0 分 |
| 1 回目の再試行 | 6 分 |
| 2 回目の再試行 | 27 分 |
| 3 回目の再試行 | 1 時間 45 分 |
| 4 回目の再試行 | 6 時間 25 分 |
| 5 回目の再試行 | 23 時間 13 分 |
- Fivetran は最大 24 時間再試行します。
- Webhook のタイムアウトは 10 秒です。
- Webhook は、3 日間連続して失敗すると自動的に無効になります。
Webhook を管理
すべての Webhook を一覧表示する
bash curl -X GET https://api.fivetran.com/v1/webhooks \ -u "API_KEY:API_SECRET" \ -H "Accept: application/json"
Webhook の詳細を取得する
bash curl -X GET https://api.fivetran.com/v1/webhooks/WEBHOOK_ID \ -u "API_KEY:API_SECRET" \ -H "Accept: application/json"
Webhook の更新
bash curl -X PATCH https://api.fivetran.com/v1/webhooks/WEBHOOK_ID \ -u "API_KEY:API_SECRET" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{ "active": true, "events": ["sync_start", "sync_end"] }'
Webhook を削除する
bash curl -X DELETE https://api.fivetran.com/v1/webhooks/WEBHOOK_ID \ -u "API_KEY:API_SECRET" \ -H "Accept: application/json"
認証方法のリファレンス
Google SecOps ウェブフック フィードは、複数の認証方法をサポートしています。ベンダーがサポートしている方法を選択します。
方法 1: クエリ パラメータ(Fivetran に推奨)
Fivetran は、アウトバウンド Webhook のカスタム HTTP ヘッダーをサポートしていません。クエリ パラメータを使用して認証情報を渡します。
URL 形式:
<ENDPOINT_URL>?key=<API_KEY>例:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...認証:
- URL クエリ パラメータの API キー
X-Fivetran-Signature-256ヘッダーの HMAC 署名で検証された秘密鍵
方法 2: カスタム ヘッダー(Fivetran ではサポートされていません)
Fivetran のアウトバウンド Webhook は、カスタム HTTP ヘッダーをサポートしていません。代わりに方法 1 を使用してください。
Webhook の上限とベスト プラクティス
リクエストに関する上限
| 上限 | 値 |
|---|---|
| 最大リクエスト サイズ | 4 MB |
| 最大 QPS(秒間クエリ数) | 15,000 |
| リクエストのタイムアウト | 10 秒(Fivetran)/ 30 秒(Google SecOps) |
| 再試行の動作 | 指数バックオフによる自動再試行 |
ベスト プラクティス
- HTTP リクエストを最小限に抑えるために、必要なイベントのみをサブスクライブします。
- Fivetran ダッシュボードで Webhook の配信ステータスをモニタリングします。
- Webhook の無効化に関するアラートを設定します。
- 一元化されたモニタリングには、アカウント単位の Webhook を使用します。
- 特定の宛先のモニタリングには、グループレベルの Webhook を使用します。
- イベント サブスクリプションを定期的に確認して更新します。
トラブルシューティング
Webhook の作成に失敗する
エラー: Webhook の作成中に HTTP 400 Bad Request が発生します。
原因: Google SecOps エンドポイントに到達できないか、2xx 以外のステータスが返されます。
ソリューション:
- Google SecOps エンドポイントの URL が正しいことを確認します。
- API キーが有効で、Google SecOps API へのアクセス権があることを確認します。
エンドポイントを手動でテストします。
curl -X POST "https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=YOUR_API_KEY" \ -H "Content-Type: application/json" \ -H "x-chronicle-auth: YOUR_SECRET_KEY" \ -d '{"test": "event"}'"active": falseを使用してウェブフックを作成し、初期検証をスキップしてから、後で有効にします。
Webhook が無効になっている
原因: Webhook が 3 日以上連続して失敗しました。
ソリューション:
- Google SecOps フィードが有効で正常であることを確認します。
- Google SecOps フィードログでエラーを確認します。
- API キーとシークレット キーがまだ有効であることを確認します。
Webhook を再度有効にします。
curl -X PATCH https://api.fivetran.com/v1/webhooks/WEBHOOK_ID \ -u "API_KEY:API_SECRET" \ -H "Content-Type: application/json" \ -d '{"active": true}'
イベントが Google SecOps に表示されない
原因: イベントは送信されているが、取り込まれていない。
ソリューション:
- Google SecOps で、[SIEM 設定] > [フィード] に移動します。
- Fivetran フィードをクリックします。
- [ログ] タブに移動します。
- 取り込みエラーを確認します。
- ログタイプが [Fivetran] に設定されていることを確認します。
- シークレット キーが Webhook で構成されているキーと一致していることを確認します。
HMAC 署名の検証が失敗する
原因: シークレット キーが一致しません。
ソリューション:
- Google SecOps フィードのシークレット キーが、Webhook の作成で使用されたものと一致することを確認します。
- 必要に応じて、Google SecOps のシークレット キーを再生成します。
新しいシークレットで Fivetran Webhook を更新します。
curl -X PATCH https://api.fivetran.com/v1/webhooks/WEBHOOK_ID \ -u "API_KEY:API_SECRET" \ -H "Content-Type: application/json" \ -d '{"secret": "NEW_SECOPS_SECRET_KEY"}'
UDM マッピング テーブル
| ログフィールド | UDM マッピング | ロジック |
|---|---|---|
| jsonPayload.connector_id | additional.connector_id | 値を直接コピー |
| jsonPayload.connector_type | additional.connector_type | 値を直接コピー |
| jsonPayload.data.executionTime | additional.executionTime | 文字列に変換しました |
| insertId | additional.insertId | 値が空でない場合はコピーされます |
| labels.levelName | additional.levelName | 値が空でない場合はコピーされます |
| labels.levelValue | additional.levelValue | 値が空でない場合はコピーされます |
| jsonPayload.data.number | additional.number | 文字列に変換しました |
| jsonPayload.data.query | additional.query | 値を直接コピー |
| resource.type | additional.type | 値が空でない場合はコピーされます |
| metadata.event_type | has_principal_user == 「true」かつ has_target == 「true」の場合は「RESOURCE_READ」、has_principal_user == 「true」の場合は「USER_COMMUNICATION」、has_principal == 「true」の場合は「STATUS_UPDATE」、それ以外の場合は「GENERIC_EVENT」に設定 | |
| jsonPayload.event | metadata.product_event_type | 値を直接コピー |
| jsonPayload.sync_id | metadata.product_log_id | 値を直接コピー |
| jsonPayload.connector_name | principal.asset.hostname | 値を直接コピー |
| jsonPayload.connector_name | principal.hostname | 値を直接コピー |
| resource.labels.email_id | principal.user.email_addresses | 「^.+@.+$」と一致する場合は統合されます |
| resource.labels.project_id | principal.user.product_object_id | 値が空でない場合はコピーされます |
| resource.labels.unique_id | principal.user.userid | 値が ["", "null", " "] に含まれていない場合はコピーされます |
| 重要度 | security_result.severity | 「INFO」と一致する場合は「INFORMATIONAL」に設定します。 |
| logName | target.resource.name | 値が空でない場合はコピーされます |
| target.resource.type | 「DATABASE」に設定 | |
| metadata.product_name | 「FIVETRAN」に設定します。 | |
| metadata.vendor_name | 「FIVETRAN」に設定します。 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。