Mengumpulkan log konteks Pengguna Duo

Versi Parser: 1.0

Didukung di:

Dokumen ini menjelaskan cara menyerap log konteks Duo User 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 mencatat status akun pengguna. Parser ini juga menangani struktur data bertingkat serta melakukan beberapa transformasi dan penggabungan data untuk membuat peristiwa UDM akhir.

Sebelum memulai

Pastikan Anda memiliki prasyarat berikut:

Mengonfigurasi aplikasi Admin API dan mendapatkan kunci

  1. Login ke Panel Admin Duo sebagai administrator.
  2. Di sidebar kiri, klik Applications > Manage Applications.
  3. Tekan tombol Add Application.
  4. Di kolom penelusuran, ketik Admin API dan klik Add 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 Settings dan tetapkan Permissions ke Grant read resource.
  8. Klik Simpan Perubahan.

Menyiapkan feed

  1. Buka Setelan > Pengelolaan Data > Feed. Jika Anda menggunakan platform khusus SIEM, buka Settings > Feeds.
  2. Klik + Tambahkan Feed Baru.
  3. Di kolom Nama feed, masukkan nama untuk feed (misalnya, Duo Users Logs).
  4. Pilih API Pihak Ketiga sebagai Jenis sumber.
  5. Pilih jenis log Duo User Context.
  6. Klik Berikutnya.
  7. Tentukan nilai untuk parameter input berikut:
    • Username: Masukkan Integration Key yang disalin sebelumnya.
    • Secret: Masukkan Secret Key yang disalin sebelumnya.
    • API Hostname: Berikan URL server API Duo (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 Finalisasi, 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. Kunci 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. Kunci 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 pertama 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 pertama 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 nilainya 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 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. Kunci ditetapkan ke "action_name".
activity_id event.idm.entity.sec_result.detection_fields.value Nilai diambil langsung dari kolom. Kunci ditetapkan ke "activity_id".
actor.details.created event.idm.entity.entity.user.attribute.labels.value Nilai diambil langsung dari kolom. Kunci ditetapkan ke "created".
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. Kunci ditetapkan ke "last_login".
actor.details.status event.idm.entity.entity.user.attribute.labels.value Nilai diambil langsung dari kolom. Kunci 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 tersebut kosong.
actor.type event.idm.entity.entity.user.attribute.labels.value Nilai diambil langsung dari kolom. Kunci ditetapkan ke "jenis pelaku".
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 collection_time.seconds dan create_time.seconds yang lebih besar 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 nilai yang lebih besar dari collection_time.seconds dan create_time.seconds 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 Key-value pair 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. Kunci ditetapkan ke "from_common_netblock".
from_new_user event.idm.entity.entity.resource.attribute.labels.value Nilai diambil langsung dari kolom. Kunci 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. Kunci 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. Kunci 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. Kunci 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 ditetapkan 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. Kunci 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 pemetaan ke kolom UDM sama dengan logika untuk 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. Kunci ditetapkan ke "biometrics_status".
target.details.country_code event.idm.entity.entity.asset.attribute.labels.value Nilai diambil langsung dari kolom. Kunci ditetapkan ke "country_code".
target.details.extension event.idm.entity.entity.asset.attribute.labels.value Nilai diambil langsung dari kolom. Kunci 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. Kunci ditetapkan ke "passcode_status".
target.details.tampered_status event.idm.entity.entity.asset.attribute.labels.value Nilai diambil langsung dari kolom. Kunci 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. Kunci ditetapkan ke "name".
target.type event.idm.entity.entity.asset.attribute.labels.value Nilai diambil langsung dari kolom. Kunci 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. Kunci 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 dan collected_timestamp level teratas.
type event.idm.entity.entity.resource.attribute.labels.value Nilai diambil langsung dari kolom. Kunci 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 Diprogram ke "Duo".
(Logika Parser) event.idm.entity.metadata.product_name Diprogram ke "Duo User Context".
(Logika Parser) event.idm.entity.metadata.entity_type Ditentukan berdasarkan keberadaan kolom lain. Jika user_present benar, nilai akan ditetapkan ke "USER". Jika asset_mid_present bernilai benar, kolom ini akan ditetapkan ke "ASSET". Jika ip_present benar, nilai akan ditetapkan ke "IP_ADDRESS". Jika resource_present bernilai benar, nilainya ditetapkan ke "RESOURCE". Jika tidak, nilai ini akan ditetapkan ke "UNKNOWN_ENTITYTYPE".
(Logika Parser) event.idm.entity.relations.entity_type Tetapkan 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 Tetapkan ke "MOBILE" jika phones[0] tidak kosong.

Log Perubahan

Melihat Log Perubahan untuk parser ini

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