Duo ユーザー コンテキスト ログを収集する
以下でサポートされています。
Google SecOps
SIEM
このドキュメントでは、API を使用して Duo ユーザー コンテキスト ログを Google Security Operations に取り込む方法について説明します。パーサーは JSON データを処理し、ユーザー情報(ユーザー名をメールアドレス、グループ、電話番号、デバイスの詳細にエイリアス化するなど)を UDM にマッピングして、ユーザー アカウントのステータスを取得します。また、ネストされたデータ構造を処理し、いくつかのデータ変換と統合を実行して、最終的な UDM イベントを作成します。
始める前に
次の前提条件を満たしていることを確認してください。
- Google SecOps インスタンス
- Duo 管理パネルへの特権アクセス
Admin API アプリケーションを構成してキーを取得する
- 管理者として Duo 管理パネルにログインします。
- 左側のサイドバーで [アプリケーション] > [アプリケーションの管理] をクリックします。
- [Add Application] ボタンを押します。
- 検索フィールドに「Admin API」と入力し、[Duo Admin API] の横にある [追加] をクリックします。
- 次の画面に、以下の情報が表示されます。
- 統合キー:(
DIYYYYYYYYYYYYYY
などの文字列)。 - シークレット キー: 40 文字の文字列。
- API ホスト名: 例:
api-abcd1234.duosecurity.com
。
- 統合キー:(
- [Integration Key]、[Secret Key]、[API hostname] の値をコピーして、安全な場所に保存します。
- [設定] までスクロールし、[権限] を [リソースの読み取り権限を付与] に設定します。
- [変更を保存] をクリックします。
フィードを設定する
- [SIEM 設定] > [フィード] に移動します。
- [+ 新しいフィードを追加] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
Duo Users Logs
)。 - [ソースタイプ] として [サードパーティ API] を選択します。
- [Duo User Context] ログタイプを選択します。
- [次へ] をクリックします。
- 次の入力パラメータの値を指定します。
- ユーザー名: 先ほどコピーした統合キーを入力します。
- シークレット: 前の手順でコピーしたシークレット キーを入力します。
- API ホスト名: Duo API サーバー URL(
api-abcd1234.duosecurity.com
など)を指定します。 - アセットの名前空間: アセットの名前空間。
- Ingestion labels: このフィードのイベントに適用されるラベル。
- [次へ] をクリックします。
- [Finalize] 画面でフィードの設定を確認し、[送信] をクリックします。
UDM マッピング テーブル
ログフィールド | UDM マッピング | ロジック |
---|---|---|
access_device.browser |
event.idm.entity.entity.resource.attribute.labels.value |
値は access_device.browser フィールドから直接取得されます。access_device.browser フィールドが空の場合は surfaced_auth.access_device.browser から取得されます。キーは「access_device browser」に設定されます。 |
access_device.browser_version |
event.idm.entity.entity.resource.attribute.labels.value |
値は access_device.browser_version フィールドから直接取得されます。access_device.browser_version フィールドが空の場合は surfaced_auth.access_device.browser_version から取得されます。キーは「access_device browser_version」に設定されます。 |
access_device.ip.address |
event.idm.entity.entity.ip |
値は access_device.ip.address フィールドから直接取得されます。access_device.ip.address フィールドが空の場合は surfaced_auth.access_device.ip から取得されます。 |
access_device.location.city |
event.idm.entity.entity.location.city |
値は access_device.location.city フィールドから直接取得されます。access_device.location.city フィールドが空の場合は surfaced_auth.access_device.location.city から取得されます。 |
access_device.location.country |
event.idm.entity.entity.location.country_or_region |
値は access_device.location.country フィールドから直接取得されます。access_device.location.country フィールドが空の場合は surfaced_auth.access_device.location.country から取得されます。 |
access_device.location.state |
event.idm.entity.entity.location.state |
値は access_device.location.state フィールドから直接取得されます。access_device.location.state フィールドが空の場合は surfaced_auth.access_device.location.state から取得されます。 |
access_device.os |
event.idm.entity.entity.asset.platform_software.platform |
値は access_device.os フィールドから取得されます。access_device.os フィールドが空の場合は、surfaced_auth.access_device.os から取得されます。値が「ios」または「mac」と一致する場合(大文字と小文字を区別しない)、UDM フィールドは「MAC」に設定されます。「windows」と一致する場合、UDM フィールドは「WINDOWS」に設定されます。「linux」と一致する場合、UDM フィールドは「LINUX」に設定されます。 |
access_device.os_version |
event.idm.entity.entity.asset.platform_software.platform_version |
値は access_device.os_version フィールドから直接取得されます。access_device.os_version フィールドが空の場合は surfaced_auth.access_device.os_version から取得されます。 |
action.details |
event.idm.entity.sec_result.action_details |
action が空の場合、値はこのフィールドから取得されます。 |
action.name |
event.idm.entity.sec_result.detection_fields.value |
値はフィールドから直接取得されます。キーは「action_name」に設定されます。 |
activity_id |
event.idm.entity.sec_result.detection_fields.value |
値はフィールドから直接取得されます。キーは「activity_id」に設定されます。 |
actor.details.created |
event.idm.entity.entity.user.attribute.labels.value |
値はフィールドから直接取得されます。キーは「created」に設定されます。 |
actor.details.email |
event.idm.entity.entity.user.email_addresses |
値はフィールドから直接取得されます。 |
actor.details.groups.key |
event.idm.entity.entity.user.group_identifiers |
値はフィールドから直接取得されます。 |
actor.details.groups.name |
event.idm.entity.entity.user.group_identifiers |
値はフィールドから直接取得されます。 |
actor.details.last_login |
event.idm.entity.entity.user.attribute.labels.value |
値はフィールドから直接取得されます。キーは「last_login」に設定されます。 |
actor.details.status |
event.idm.entity.entity.user.attribute.labels.value |
値はフィールドから直接取得されます。キーは「status」に設定されます。 |
actor.key |
event.idm.entity.entity.resource.product_object_id |
値はフィールドから直接取得されます。 |
actor.name |
event.idm.entity.entity.user.user_display_name |
値は、フィールドから直接取得されます。フィールドが空の場合は surfaced_auth.user.name から取得されます。 |
actor.type |
event.idm.entity.entity.user.attribute.labels.value |
値はフィールドから直接取得されます。キーは「actor type」に設定されます。 |
akey |
event.idm.entity.metadata.product_entity_id |
値はフィールドから直接取得されます。akey が空の場合は sekey から取得されます。 |
application |
event.idm.entity.entity.application |
値はフィールドから直接取得されます。 |
collection_time.seconds 、create_time.seconds |
event.idm.entity.metadata.collected_timestamp.seconds 、event.timestamp.seconds |
collection_time.seconds と create_time.seconds の大きい方の値が、collected_timestamp.seconds と最上位の timestamp.seconds の両方に使用されます。 |
collection_time.nanos 、create_time.nanos |
event.idm.entity.metadata.collected_timestamp.nanos 、event.timestamp.nanos |
collection_time.seconds と create_time.seconds のうち大きい方の値に対応するナノ秒値が、collected_timestamp.nanos と最上位の timestamp.nanos の両方に使用されます。 |
email |
event.idm.entity.entity.user.email_addresses |
値はフィールドから直接取得されます。 |
explanations |
event.idm.entity.entity.resource.attribute.labels |
explanations 配列内の各オブジェクトの Key-Value ペアはラベルに変換されます。各ラベルのキーの先頭に「explanation 」が付加されます。 |
firstname |
event.idm.entity.entity.user.first_name |
値はフィールドから直接取得されます。 |
from_common_netblock |
event.idm.entity.entity.resource.attribute.labels.value |
値はフィールドから直接取得されます。キーは「from_common_netblock」に設定されます。 |
from_new_user |
event.idm.entity.entity.resource.attribute.labels.value |
値はフィールドから直接取得されます。キーは「from_new_user」に設定されます。 |
groups.N.name (N=0..10) |
event.idm.entity.entity.user.group_identifiers |
値はフィールドから直接取得されます。 |
lastname |
event.idm.entity.entity.user.last_name |
値はフィールドから直接取得されます。 |
low_risk_ip |
event.idm.entity.entity.resource.attribute.labels.value |
値はフィールドから直接取得されます。キーは「low_risk_ip」に設定されます。 |
phones.0.model |
event.idm.entity.relations.entity.asset.hardware.model |
値はフィールドから直接取得されます。 |
phones.0.number |
event.idm.entity.entity.user.phone_numbers |
値はフィールドから直接取得されます。 |
phones.0.phone_id |
event.idm.entity.relations.entity.asset.product_object_id |
値はフィールドから直接取得されます。 |
phones.0.platform |
event.idm.entity.relations.entity.asset.hardware.manufacturer |
値はフィールドから直接取得されます。 |
priority_event |
event.idm.entity.entity.resource.attribute.labels.value |
値はフィールドから直接取得されます。キーは「priority_event」に設定されます。 |
realname |
event.idm.entity.entity.user.user_display_name |
値はフィールドから直接取得されます。 |
sekey |
event.idm.entity.metadata.product_entity_id |
akey が空の場合、値はフィールドから直接取得されます。 |
state |
event.idm.entity.entity.resource.attribute.labels.value |
値はフィールドから直接取得されます。キーは「state」に設定されます。 |
status |
event.idm.entity.entity.user.attribute.labels.value 、event.idm.entity.entity.user.user_authentication_status |
値はフィールドから直接取得されます。ラベルのキーは「status」に設定されます。この値は user_authentication_status の決定にも使用されます。「active」と「bypass」は「ACTIVE」にマッピングされ、「disabled」と「pending deletion」は「SUSPENDED」にマッピングされ、「locked out」は「NO_ACTIVE_CREDENTIALS」にマッピングされます。 |
surfaced_auth.access_device.browser |
event.idm.entity.entity.resource.attribute.labels.value |
access_device.browser が空の場合、値はこのフィールドから取得されます。キーは「surfaced_auth access_device browser」に設定されます。 |
surfaced_auth.access_device.browser_version |
event.idm.entity.entity.resource.attribute.labels.value |
access_device.browser_version が空の場合、値はこのフィールドから取得されます。キーは「surfaced_auth access_device browser_version」に設定されます。 |
surfaced_auth.access_device.ip |
event.idm.entity.entity.ip |
access_device.ip.address が空の場合、値はこのフィールドから取得されます。 |
surfaced_auth.access_device.location.city |
event.idm.entity.entity.location.city |
access_device.location.city が空の場合、値はこのフィールドから取得されます。 |
surfaced_auth.access_device.location.country |
event.idm.entity.entity.location.country_or_region |
access_device.location.country が空の場合、値はこのフィールドから取得されます。 |
surfaced_auth.access_device.location.state |
event.idm.entity.entity.location.state |
access_device.location.state が空の場合、値はこのフィールドから取得されます。 |
surfaced_auth.access_device.os |
event.idm.entity.entity.asset.platform_software.platform |
access_device.os が空の場合、値はこのフィールドから取得されます。UDM フィールドへのマッピングのロジックは、access_device.os の場合と同じです。 |
surfaced_auth.access_device.os_version |
event.idm.entity.entity.asset.platform_software.platform_version |
access_device.os_version が空の場合、値はこのフィールドから取得されます。 |
surfaced_auth.user.key |
event.idm.entity.entity.user.userid |
username が空の場合、値はこのフィールドから取得されます。 |
surfaced_auth.user.name |
event.idm.entity.entity.user.user_display_name |
actor.name が空の場合、値はこのフィールドから取得されます。 |
target.details.biometrics_status |
event.idm.entity.entity.asset.attribute.labels.value |
値はフィールドから直接取得されます。キーは「biometrics_status」に設定されます。 |
target.details.country_code |
event.idm.entity.entity.asset.attribute.labels.value |
値はフィールドから直接取得されます。キーは「country_code」に設定されます。 |
target.details.extension |
event.idm.entity.entity.asset.attribute.labels.value |
値はフィールドから直接取得されます。キーは「extension」に設定されます。 |
target.details.manufacturer |
event.idm.entity.entity.asset.hardware.manufacturer |
値はフィールドから直接取得されます。 |
target.details.model |
event.idm.entity.entity.asset.hardware.model |
値はフィールドから直接取得されます。 |
target.details.number |
event.idm.entity.entity.user.phone_numbers |
値はフィールドから直接取得されます。 |
target.details.os |
event.idm.entity.entity.asset.software.name |
値はフィールドから直接取得されます。 |
target.details.os_version |
event.idm.entity.entity.asset.software.version |
値はフィールドから直接取得されます。 |
target.details.passcode_status |
event.idm.entity.entity.asset.attribute.labels.value |
値はフィールドから直接取得されます。キーは「passcode_status」に設定されます。 |
target.details.tampered_status |
event.idm.entity.entity.asset.attribute.labels.value |
値はフィールドから直接取得されます。キーは「tampered_status」に設定されます。 |
target.key |
event.idm.entity.entity.asset.asset_id |
値はフィールドから直接取得されます。 |
target.name |
event.idm.entity.entity.asset.attribute.labels.value |
値はフィールドから直接取得されます。キーは「name」に設定されます。 |
target.type |
event.idm.entity.entity.asset.attribute.labels.value |
値はフィールドから直接取得されます。キーは「type」に設定されます。 |
triage_event_uri |
event.idm.entity.entity.url |
値はフィールドから直接取得されます。 |
triaged_as_interesting |
event.idm.entity.entity.resource.attribute.labels.value |
値はフィールドから直接取得されます。キーは「triaged_as_interesting」に設定されます。 |
ts |
event.timestamp.seconds 、event.idm.entity.metadata.collected_timestamp.seconds |
タイムスタンプは、このフィールドが存在する場合は ISO8601 または RFC 3339 形式を使用して解析されます。抽出された秒とナノ秒は、最上位の timestamp と collected_timestamp の両方に使用されます。 |
type |
event.idm.entity.entity.resource.attribute.labels.value |
値はフィールドから直接取得されます。キーは「type」に設定されます。 |
user_id |
event.idm.entity.metadata.product_entity_id |
値はフィールドから直接取得されます。 |
username |
event.idm.entity.entity.user.userid |
値はフィールドから直接取得されます。username が空の場合は surfaced_auth.user.key から取得されます。 |
(パーサー ロジック) | event.idm.entity.metadata.vendor_name |
「Duo」にハードコードされています。 |
(パーサー ロジック) | event.idm.entity.metadata.product_name |
「Duo User Context」にハードコードされています。 |
(パーサー ロジック) | event.idm.entity.metadata.entity_type |
他のフィールドの有無に基づいて決定されます。user_present が true の場合、「USER」に設定されます。asset_mid_present が true の場合、「ASSET」に設定されます。ip_present が true の場合、「IP_ADDRESS」に設定されます。resource_present が true の場合、「RESOURCE」に設定されます。それ以外の場合は、「UNKNOWN_ENTITYTYPE」に設定されます。 |
(パーサー ロジック) | event.idm.entity.relations.entity_type |
phones[0] が空でない場合は「ASSET」に設定します。 |
(パーサー ロジック) | event.idm.entity.relations.relationship |
phones[0] が空でない場合は「OWNS」に設定します。 |
(パーサー ロジック) | event.idm.entity.relations.entity.asset.type |
phones[0] が空でない場合は、「MOBILE」に設定します。 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。