Mengumpulkan log Auth0
Ringkasan
Parser ini mengekstrak peristiwa log Auth0 dari pesan berformat JSON. Fungsi ini melakukan inisialisasi kolom UDM, mengurai payload JSON, memetakan kolom yang relevan ke skema UDM, dan mengategorikan peristiwa berdasarkan kolom type, yang menetapkan tindakan keamanan dan jenis peristiwa yang sesuai.
Sebelum memulai
- Pastikan Anda memiliki instance Google Chronicle.
- Akun Auth0 dengan izin yang diperlukan.
Mengonfigurasi feed di Google SecOps untuk menyerap log Auth0
- Buka Setelan SIEM > Feed.
- Klik Tambahkan baru.
- Di kolom Feed name, masukkan nama untuk feed (misalnya, Auth0 Logs).
- Pilih Webhook sebagai Jenis sumber.
- Pilih AUTH_ZERO sebagai Jenis log.
- Klik Berikutnya.
- Opsional: tentukan nilai untuk parameter input berikut:
- Pemisah pemisahan: pembatas yang digunakan untuk memisahkan baris log, seperti
\n
. - Namespace aset: namespace aset.
- Label penyerapan: label yang diterapkan ke peristiwa dari feed ini.
- Pemisah pemisahan: pembatas yang digunakan untuk memisahkan baris log, seperti
- Klik Berikutnya.
- Tinjau konfigurasi feed di layar Finalize, lalu klik Submit.
- Klik Buat Kunci Rahasia untuk membuat kunci rahasia guna mengautentikasi feed ini.
- Salin dan simpan kunci rahasia. Anda tidak dapat melihat kunci rahasia ini lagi. Jika perlu, Anda dapat membuat ulang kunci rahasia baru, tetapi tindakan ini akan membuat kunci rahasia sebelumnya tidak berlaku lagi.
- Di tab Detail, salin URL endpoint feed dari kolom Endpoint Information. Anda perlu menentukan URL endpoint ini di aplikasi klien.
- Klik Done.
Membuat kunci API untuk feed webhook
Buka Konsol Google Cloud > Kredensial.
Klik Create credentials, lalu pilih API key.
Batasi akses kunci API ke Google Security Operations API.
Menentukan URL endpoint
- Di aplikasi klien, tentukan URL endpoint HTTPS yang diberikan di feed webhook.
Aktifkan autentikasi dengan menentukan kunci API dan kunci secret sebagai bagian dari header kustom dalam format berikut:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
Rekomendasi: Tentukan kunci API sebagai header, bukan menentukannya di URL. Jika klien webhook Anda tidak mendukung header kustom, Anda dapat menentukan kunci API dan kunci rahasia menggunakan parameter kueri dalam format berikut:
ENDPOINT_URL?key=API_KEY&secret=SECRET
Ganti kode berikut:
ENDPOINT_URL
: URL endpoint feed.API_KEY
: kunci API untuk mengautentikasi ke Google Security Operations.SECRET
: kunci rahasia yang Anda buat untuk mengautentikasi feed.
Mengonfigurasi webhook Auth0 untuk Google SecOps
- Akses Dasbor Auth0.
- Buka Monitoring > Aliran Data.
- Klik Buat Aliran Log.
- Klik tombol Webhook Kustom, lalu beri nama sesuai keinginan Anda. Misalnya: Webhook Google SecOps.
- Konfigurasikan hal berikut:
- URL Payload: Masukkan URL endpoint Google SecOps API.
- Content-Type: Tetapkan header Content-Type ke application/json. Hal ini memberi tahu Google SecOps format data yang dikirim.
- Opsional: Token Otorisasi: Konfigurasikan secret untuk keamanan tambahan. Token ini akan digunakan untuk memverifikasi keaslian permintaan webhook.
Menyesuaikan Payload: Anda dapat menyesuaikan payload yang dikirim ke Google SecOps dengan mengubah Kategori Peristiwa. Tindakan ini memungkinkan Anda memilih titik data tertentu dari peristiwa Auth0 dan memformatnya sesuai kebutuhan untuk Google SecOps. Lihat dokumentasi Auth0 untuk mengetahui detail tentang opsi skrip dan variabel konteks yang tersedia. Pastikan payload akhir sesuai dengan format UDM Google SecOps yang diharapkan.
- Klik Simpan untuk membuat webhook.
- Memicu peristiwa yang terkait dengan hook (misalnya, mendaftarkan pengguna baru, login).
- Pastikan log dikirim ke Google SecOps dengan memeriksa feed di konsol Google SecOps.
Tabel Pemetaan UDM
Kolom Log | Pemetaan UDM | Logika |
---|---|---|
client_id |
principal.asset.product_object_id |
Dipetakan langsung dari kolom client_id . |
client_name |
principal.hostname |
Dipetakan langsung dari kolom client_name . |
connection |
security_result.description |
Dipetakan langsung dari kolom connection . |
connection_id |
security_result.rule_id |
Dipetakan langsung dari kolom connection_id . |
date |
metadata.event_timestamp |
Diurai dari kolom date menggunakan format ISO8601. |
description |
metadata.description |
Dipetakan langsung dari kolom description . |
details.error |
security_result.detection_fields |
Dipetakan dari kolom details.error . Kuncinya adalah "Error". |
details.error.oauthError |
security_result.detection_fields |
Dipetakan dari kolom details.error.oauthError . Kuncinya adalah "oauthError". |
details.error.type |
security_result.detection_fields |
Dipetakan dari kolom details.error.type . Kuncinya adalah "oauth_error_type". |
details.ipOnAllowlist |
security_result.detection_fields |
Dipetakan dari kolom details.ipOnAllowlist . Kuncinya adalah "ipOnAllowlist". |
details.link |
target.url |
Dipetakan langsung dari kolom details.link jika ada, jika tidak, berasal dari kolom lain (lihat di bawah). |
details.request.auth.strategy |
security_result.detection_fields |
Dipetakan dari kolom details.request.auth.strategy . Kuncinya adalah "strategy". |
details.request.body.app_metadata.blockedReason |
security_result.detection_fields |
Dipetakan dari kolom details.request.body.app_metadata.blockedReason . Kuncinya adalah "blockedReason". |
details.request.body.app_metadata.customer_id |
target.user.product_object_id |
Dipetakan langsung dari kolom details.request.body.app_metadata.customer_id . |
details.request.body.app_metadata.migrated |
security_result.detection_fields |
Dipetakan dari kolom details.request.body.app_metadata.migrated . Kunci "dimigrasikan". |
details.request.channel |
security_result.detection_fields |
Dipetakan dari kolom details.request.channel . Kuncinya adalah "channel". |
details.request.method |
network.http.method |
Dipetakan langsung dari kolom details.request.method setelah dikonversi ke huruf besar. |
details.request.path |
target.url |
Dipetakan langsung dari kolom details.request.path jika details.link tidak ada, atau berasal dari kolom lain (lihat di bawah). |
details.response.body.email |
target.user.email_addresses |
Dipetakan langsung dari kolom details.response.body.email . |
details.response.body.email_verified |
security_result.detection_fields |
Dipetakan dari kolom details.response.body.email_verified . Kuncinya adalah "email_verified". |
details.response.body.nickname |
target.user.user_display_name |
Dipetakan langsung dari kolom details.response.body.nickname . |
details.response.body.user_id |
target.user.userid |
Dipetakan langsung dari kolom details.response.body.user_id . |
details.response.statusCode |
network.http.response_code |
Dipetakan langsung dari kolom details.response.statusCode setelah dikonversi menjadi bilangan bulat. |
details.return_to |
target.url |
Dipetakan langsung dari kolom details.return_to jika details.link dan details.request.path tidak ada, jika tidak, berasal dari kolom lain (lihat di bawah). |
details.session_id |
network.session_id |
Dipetakan langsung dari kolom details.session_id . |
details.stats.loginsCount |
additional.fields |
Dipetakan dari kolom details.stats.loginsCount . Kuncinya adalah "loginsCount". |
details.requiresVerification |
security_result.detection_fields |
Dipetakan dari kolom details.requiresVerification . Kuncinya adalah "requiresVerification". |
details.to |
target.user.email_addresses |
Dipetakan langsung dari kolom details.to . |
hostname |
target.hostname |
Dipetakan langsung dari kolom hostname . |
ip |
principal.ip |
Dipetakan langsung dari kolom ip . |
js_data.audience |
target.url |
Dipetakan langsung dari kolom js_data.audience jika details.link , details.request.path , dan details.return_to tidak ada. |
js_data.details.body.email_verified |
security_result.detection_fields |
Dipetakan dari kolom js_data.details.body.email_verified . Kuncinya adalah "email_verified". |
js_data.details.body.is_signup |
security_result.detection_fields |
Dipetakan dari kolom js_data.details.body.is_signup . Kuncinya adalah "is_signup". |
js_data.details.body.transaction.redirect_uri |
target.url |
Dipetakan langsung dari kolom js_data.details.body.transaction.redirect_uri jika details.link , details.request.path , details.return_to , dan js_data.audience tidak ada. |
js_data.scope |
security_result.detection_fields |
Dipetakan dari kolom js_data.scope . Kuncinya adalah "scope". |
js_data.tracking_id |
security_result.detection_fields |
Dipetakan dari kolom js_data.tracking_id . Kuncinya adalah "tracking_id". |
log_id |
metadata.product_log_id |
Dipetakan langsung dari kolom log_id . |
metadata.log_type |
metadata.log_type |
Dipetakan langsung dari kolom log_type . |
metadata.product_name |
metadata.product_name |
Tetapkan ke "AUTH_ZERO". |
metadata.vendor_name |
metadata.vendor_name |
Tetapkan ke "AUTH_ZERO". |
metadata.product_event_type |
metadata.product_event_type |
Dipetakan langsung dari kolom type . |
network.http.parsed_user_agent |
network.http.parsed_user_agent |
Diurai dari kolom user_agent . |
network.http.user_agent |
network.http.user_agent |
Dipetakan langsung dari kolom user_agent . |
security_result.action |
security_result.action |
Ditentukan oleh kolom type (ALLOW atau BLOCK). Lihat kode parser untuk pemetaan tertentu. |
strategy |
security_result.detection_fields |
Dipetakan dari kolom strategy . Kuncinya adalah "strategy". |
strategy_type |
security_result.detection_fields |
Dipetakan dari kolom strategy_type . Kuncinya adalah "strategy_type". |
target.user.email_addresses |
target.user.email_addresses |
Dipetakan langsung dari kolom user_name jika merupakan alamat email, jika tidak, berasal dari kolom lain (lihat di atas). |
target.user.userid |
target.user.userid |
Dipetakan langsung dari kolom user_id , atau details.response.body.user_id atau user_name jika user_id tidak ada. |
user_agent |
network.http.user_agent |
Dipetakan langsung dari kolom user_agent . |
user_id |
target.user.userid |
Dipetakan langsung dari kolom user_id . |
user_name |
target.user.email_addresses |
Dipetakan langsung dari kolom user_name . Tetapkan ke "MACHINE" jika security_result.action adalah "ALLOW" dan type adalah "slo", "sapi", "s", "ss", atau "ssa". Tetapkan ke "OTP" jika extensions.auth.type adalah "MACHINE" dan type adalah "slo". Ditentukan oleh kombinasi kolom termasuk type , client_name , ip , hostname , dan has_user . Lihat kode parser untuk pemetaan tertentu. |
Perubahan
2024-03-07
- Perbaikan Bug:
- Memetakan "data.user_name" ke "target.user.email_addresses".
- Memetakan "data.details.body.email_verified", "data.details.body.is_signup" ke "security_result.detection_fields".
- Memetakan "data.details.body.transaction.redirect_uri" ke "target.url".
2023-06-19
- Parser yang baru dibuat.