Mengumpulkan log konteks Pengguna Duo

Didukung di:

Dokumen ini menjelaskan cara menyerap log konteks Pengguna Duo ke Google Security Operations menggunakan API. Parser memproses data JSON, memetakan informasi pengguna (termasuk membuat alias nama pengguna ke alamat email, grup, nomor telepon, dan detail perangkat) ke UDM dan merekam status akun pengguna. Selain itu, UDM juga menangani struktur data bertingkat dan melakukan beberapa transformasi serta penggabungan data untuk membuat peristiwa UDM akhir.

Sebelum memulai

Pastikan Anda memenuhi prasyarat berikut:

Mengonfigurasi aplikasi Admin API dan mendapatkan kunci

  1. Login ke Panel Admin Duo sebagai administrator.
  2. Di sidebar kiri, klik Aplikasi > Kelola Aplikasi.
  3. Tekan tombol Add Application.
  4. Di kolom penelusuran, ketik Admin API, lalu klik Tambahkan di samping Duo Admin API.
  5. Di layar berikutnya, informasi berikut akan ditampilkan:
    • Kunci Integrasi: (string seperti DIYYYYYYYYYYYYYY).
    • Secret Key: string 40 karakter.
    • Nama host API: Misalnya, api-abcd1234.duosecurity.com.
  6. Salin dan simpan Integration Key, Secret Key, dan API hostname ke lokasi yang aman.
  7. Scroll ke Setelan dan tetapkan Izin ke Berikan akses baca resource.
  8. Klik Simpan Perubahan.

Menyiapkan feed

  1. Buka Setelan SIEM > Feed.
  2. Klik + Tambahkan Feed Baru.
  3. Di kolom Nama feed, masukkan nama untuk feed (misalnya, Duo Users Logs).
  4. Pilih Third Party API sebagai Source type.
  5. Pilih jenis log Konteks Pengguna Duo.
  6. Klik Berikutnya.
  7. Tentukan nilai untuk parameter input berikut:
    • Nama pengguna: Masukkan Kunci Integrasi yang disalin sebelumnya.
    • Secret: Masukkan Secret Key yang disalin sebelumnya.
    • Nama Host API: Berikan URL server Duo API (misalnya, api-abcd1234.duosecurity.com).
    • Namespace aset: Namespace aset.
    • Label penyerapan: Label yang diterapkan ke peristiwa dari feed ini.
  8. Klik Berikutnya.
  9. Tinjau konfigurasi feed di layar Selesaikan, lalu klik Kirim.

Tabel Pemetaan UDM

Kolom Log Pemetaan UDM Logika
access_device.browser event.idm.entity.entity.resource.attribute.labels.value Nilai diambil langsung dari kolom access_device.browser atau surfaced_auth.access_device.browser jika kolom sebelumnya kosong. Kuncinya ditetapkan ke "access_device browser".
access_device.browser_version event.idm.entity.entity.resource.attribute.labels.value Nilai diambil langsung dari kolom access_device.browser_version atau surfaced_auth.access_device.browser_version jika kolom sebelumnya kosong. Kuncinya ditetapkan ke "access_device browser_version".
access_device.ip.address event.idm.entity.entity.ip Nilai diambil langsung dari kolom access_device.ip.address atau surfaced_auth.access_device.ip jika kolom sebelumnya kosong.
access_device.location.city event.idm.entity.entity.location.city Nilai diambil langsung dari kolom access_device.location.city atau surfaced_auth.access_device.location.city jika kolom sebelumnya kosong.
access_device.location.country event.idm.entity.entity.location.country_or_region Nilai diambil langsung dari kolom access_device.location.country atau surfaced_auth.access_device.location.country jika kolom sebelumnya kosong.
access_device.location.state event.idm.entity.entity.location.state Nilai diambil langsung dari kolom access_device.location.state atau surfaced_auth.access_device.location.state jika kolom sebelumnya kosong.
access_device.os event.idm.entity.entity.asset.platform_software.platform Nilai ini berasal dari kolom access_device.os atau surfaced_auth.access_device.os jika kolom sebelumnya kosong. Jika nilai cocok (tidak peka huruf besar/kecil) dengan "ios" atau "mac", kolom UDM akan ditetapkan ke "MAC". Jika cocok dengan "windows", kolom UDM akan ditetapkan ke "WINDOWS". Jika cocok dengan "linux", kolom UDM akan ditetapkan ke "LINUX".
access_device.os_version event.idm.entity.entity.asset.platform_software.platform_version Nilai diambil langsung dari kolom access_device.os_version atau surfaced_auth.access_device.os_version jika kolom sebelumnya kosong.
action.details event.idm.entity.sec_result.action_details Nilai diambil dari kolom ini jika action kosong.
action.name event.idm.entity.sec_result.detection_fields.value Nilai diambil langsung dari kolom. Kuncinya ditetapkan ke "action_name".
activity_id event.idm.entity.sec_result.detection_fields.value Nilai diambil langsung dari kolom. Kuncinya ditetapkan ke "activity_id".
actor.details.created event.idm.entity.entity.user.attribute.labels.value Nilai diambil langsung dari kolom. Kunci disetel ke "dibuat".
actor.details.email event.idm.entity.entity.user.email_addresses Nilai diambil langsung dari kolom.
actor.details.groups.key event.idm.entity.entity.user.group_identifiers Nilai diambil langsung dari kolom.
actor.details.groups.name event.idm.entity.entity.user.group_identifiers Nilai diambil langsung dari kolom.
actor.details.last_login event.idm.entity.entity.user.attribute.labels.value Nilai diambil langsung dari kolom. Kuncinya ditetapkan ke "last_login".
actor.details.status event.idm.entity.entity.user.attribute.labels.value Nilai diambil langsung dari kolom. Kuncinya ditetapkan ke "status".
actor.key event.idm.entity.entity.resource.product_object_id Nilai diambil langsung dari kolom.
actor.name event.idm.entity.entity.user.user_display_name Nilai diambil langsung dari kolom atau surfaced_auth.user.name jika kolom kosong.
actor.type event.idm.entity.entity.user.attribute.labels.value Nilai diambil langsung dari kolom. Kuncinya ditetapkan ke "actor type".
akey event.idm.entity.metadata.product_entity_id Nilai diambil langsung dari kolom, atau sekey jika akey kosong.
application event.idm.entity.entity.application Nilai diambil langsung dari kolom.
collection_time.seconds, create_time.seconds event.idm.entity.metadata.collected_timestamp.seconds, event.timestamp.seconds Nilai yang lebih besar dari collection_time.seconds dan create_time.seconds digunakan untuk collected_timestamp.seconds dan timestamp.seconds tingkat teratas.
collection_time.nanos, create_time.nanos event.idm.entity.metadata.collected_timestamp.nanos, event.timestamp.nanos Nilai nanodetik yang sesuai dengan collection_time.seconds dan create_time.seconds yang lebih besar digunakan untuk collected_timestamp.nanos dan timestamp.nanos tingkat teratas.
email event.idm.entity.entity.user.email_addresses Nilai diambil langsung dari kolom.
explanations event.idm.entity.entity.resource.attribute.labels Pasangan nilai kunci dalam setiap objek di array explanations dikonversi menjadi label. Kunci untuk setiap label diawali dengan "explanation ".
firstname event.idm.entity.entity.user.first_name Nilai diambil langsung dari kolom.
from_common_netblock event.idm.entity.entity.resource.attribute.labels.value Nilai diambil langsung dari kolom. Kuncinya ditetapkan ke "from_common_netblock".
from_new_user event.idm.entity.entity.resource.attribute.labels.value Nilai diambil langsung dari kolom. Kuncinya ditetapkan ke "from_new_user".
groups.N.name (N=0..10) event.idm.entity.entity.user.group_identifiers Nilai diambil langsung dari kolom.
lastname event.idm.entity.entity.user.last_name Nilai diambil langsung dari kolom.
low_risk_ip event.idm.entity.entity.resource.attribute.labels.value Nilai diambil langsung dari kolom. Kuncinya ditetapkan ke "low_risk_ip".
phones.0.model event.idm.entity.relations.entity.asset.hardware.model Nilai diambil langsung dari kolom.
phones.0.number event.idm.entity.entity.user.phone_numbers Nilai diambil langsung dari kolom.
phones.0.phone_id event.idm.entity.relations.entity.asset.product_object_id Nilai diambil langsung dari kolom.
phones.0.platform event.idm.entity.relations.entity.asset.hardware.manufacturer Nilai diambil langsung dari kolom.
priority_event event.idm.entity.entity.resource.attribute.labels.value Nilai diambil langsung dari kolom. Kuncinya ditetapkan ke "priority_event".
realname event.idm.entity.entity.user.user_display_name Nilai diambil langsung dari kolom.
sekey event.idm.entity.metadata.product_entity_id Nilai diambil langsung dari kolom jika akey kosong.
state event.idm.entity.entity.resource.attribute.labels.value Nilai diambil langsung dari kolom. Kuncinya ditetapkan ke "state".
status event.idm.entity.entity.user.attribute.labels.value, event.idm.entity.entity.user.user_authentication_status Nilai diambil langsung dari kolom. Kunci untuk label disetel ke "status". Nilai ini juga digunakan untuk menentukan user_authentication_status. "active" dan "bypass" dipetakan ke "ACTIVE", "disabled" dan "pending deletion" dipetakan ke "SUSPENDED", dan "locked out" dipetakan ke "NO_ACTIVE_CREDENTIALS".
surfaced_auth.access_device.browser event.idm.entity.entity.resource.attribute.labels.value Nilai diambil dari kolom ini jika access_device.browser kosong. Kunci ditetapkan ke "surfaced_auth access_device browser".
surfaced_auth.access_device.browser_version event.idm.entity.entity.resource.attribute.labels.value Nilai diambil dari kolom ini jika access_device.browser_version kosong. Kuncinya ditetapkan ke "surfaced_auth access_device browser_version".
surfaced_auth.access_device.ip event.idm.entity.entity.ip Nilai diambil dari kolom ini jika access_device.ip.address kosong.
surfaced_auth.access_device.location.city event.idm.entity.entity.location.city Nilai diambil dari kolom ini jika access_device.location.city kosong.
surfaced_auth.access_device.location.country event.idm.entity.entity.location.country_or_region Nilai diambil dari kolom ini jika access_device.location.country kosong.
surfaced_auth.access_device.location.state event.idm.entity.entity.location.state Nilai diambil dari kolom ini jika access_device.location.state kosong.
surfaced_auth.access_device.os event.idm.entity.entity.asset.platform_software.platform Nilai diambil dari kolom ini jika access_device.os kosong. Logika untuk memetakan ke kolom UDM sama dengan access_device.os.
surfaced_auth.access_device.os_version event.idm.entity.entity.asset.platform_software.platform_version Nilai diambil dari kolom ini jika access_device.os_version kosong.
surfaced_auth.user.key event.idm.entity.entity.user.userid Nilai diambil dari kolom ini jika username kosong.
surfaced_auth.user.name event.idm.entity.entity.user.user_display_name Nilai diambil dari kolom ini jika actor.name kosong.
target.details.biometrics_status event.idm.entity.entity.asset.attribute.labels.value Nilai diambil langsung dari kolom. Kuncinya ditetapkan ke "biometrics_status".
target.details.country_code event.idm.entity.entity.asset.attribute.labels.value Nilai diambil langsung dari kolom. Kuncinya ditetapkan ke "country_code".
target.details.extension event.idm.entity.entity.asset.attribute.labels.value Nilai diambil langsung dari kolom. Kuncinya ditetapkan ke "extension".
target.details.manufacturer event.idm.entity.entity.asset.hardware.manufacturer Nilai diambil langsung dari kolom.
target.details.model event.idm.entity.entity.asset.hardware.model Nilai diambil langsung dari kolom.
target.details.number event.idm.entity.entity.user.phone_numbers Nilai diambil langsung dari kolom.
target.details.os event.idm.entity.entity.asset.software.name Nilai diambil langsung dari kolom.
target.details.os_version event.idm.entity.entity.asset.software.version Nilai diambil langsung dari kolom.
target.details.passcode_status event.idm.entity.entity.asset.attribute.labels.value Nilai diambil langsung dari kolom. Kuncinya ditetapkan ke "passcode_status".
target.details.tampered_status event.idm.entity.entity.asset.attribute.labels.value Nilai diambil langsung dari kolom. Kuncinya ditetapkan ke "tampered_status".
target.key event.idm.entity.entity.asset.asset_id Nilai diambil langsung dari kolom.
target.name event.idm.entity.entity.asset.attribute.labels.value Nilai diambil langsung dari kolom. Kuncinya ditetapkan ke "name".
target.type event.idm.entity.entity.asset.attribute.labels.value Nilai diambil langsung dari kolom. Kuncinya ditetapkan ke "type".
triage_event_uri event.idm.entity.entity.url Nilai diambil langsung dari kolom.
triaged_as_interesting event.idm.entity.entity.resource.attribute.labels.value Nilai diambil langsung dari kolom. Kuncinya ditetapkan ke "triaged_as_interesting".
ts event.timestamp.seconds, event.idm.entity.metadata.collected_timestamp.seconds Stempel waktu diuraikan dari kolom ini jika ada, menggunakan format ISO8601 atau RFC 3339. Detik dan nanodetik yang diekstrak digunakan untuk timestamp tingkat teratas dan collected_timestamp.
type event.idm.entity.entity.resource.attribute.labels.value Nilai diambil langsung dari kolom. Kuncinya ditetapkan ke "type".
user_id event.idm.entity.metadata.product_entity_id Nilai diambil langsung dari kolom.
username event.idm.entity.entity.user.userid Nilai diambil langsung dari kolom, atau surfaced_auth.user.key jika username kosong.
(Logika Parser) event.idm.entity.metadata.vendor_name Dikodekan secara permanen ke "Duo".
(Logika Parser) event.idm.entity.metadata.product_name Dikodekan secara permanen ke "Konteks Pengguna Duo".
(Logika Parser) event.idm.entity.metadata.entity_type Ditentukan berdasarkan keberadaan kolom lain. Jika user_present benar, setel ke "USER". Jika asset_mid_present benar, maka akan ditetapkan ke "ASSET". Jika ip_present benar, maka akan ditetapkan ke "IP_ADDRESS". Jika resource_present benar, maka akan disetel ke "RESOURCE". Jika tidak, nilai ini akan ditetapkan ke "UNKNOWN_ENTITYTYPE".
(Logika Parser) event.idm.entity.relations.entity_type Setel ke "ASSET" jika phones[0] tidak kosong.
(Logika Parser) event.idm.entity.relations.relationship Tetapkan ke "OWNS" jika phones[0] tidak kosong.
(Logika Parser) event.idm.entity.relations.entity.asset.type Ditetapkan ke "MOBILE" jika phones[0] tidak kosong.

Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.