Mengumpulkan log login Microsoft Entra ID (sebelumnya Azure Active Directory)
Versi Parser: 26.0
Dokumen ini menjelaskan cara mengumpulkan log login Microsoft Entra ID (sebelumnya dikenal sebagai Azure Active Directory) dengan menyiapkan feed Google Security Operations. Anda dapat mengonfigurasi penyerapan menggunakan dua metode: Azure Event Hub (direkomendasikan) atau API pihak ketiga.
Sebelum memulai
Pastikan Anda memiliki prasyarat berikut:
- Instance Google SecOps.
- Akses istimewa ke portal Microsoft Azure.
- Peran Administrator Keamanan atau Administrator Global di Microsoft Entra ID (diperlukan untuk setelan diagnostik).
- Untuk metode Third Party API, salah satu peran berikut untuk memberikan izin admin:
- Administrator Global: dapat memberikan izin untuk semua izin, untuk semua API.
- Administrator Peran Istimewa: dapat memberikan izin untuk izin apa pun, untuk API apa pun.
- Administrator Aplikasi Cloud: dapat memberikan izin untuk semua izin untuk semua API, kecuali peran aplikasi Microsoft Graph (izin aplikasi).
Metode 1: Azure Event Hub (direkomendasikan)
Metode ini mengalirkan log login Microsoft Entra ID melalui Azure Event Hub menggunakan setelan diagnostik. Google SecOps menyerap log langsung dari Event Hub menggunakan jenis feed Azure Event Hub.
Buat namespace Event Hub
Namespace Event Hub adalah container pengelolaan untuk satu atau beberapa Event Hub.
- Di portal Azure, cari Event Hubs.
- Klik + Create.
Berikan detail konfigurasi berikut:
Setelan Nilai Langganan Pilih langganan Azure Anda Grup resource Pilih yang sudah ada atau buat yang baru Nama namespace Masukkan nama unik (misalnya, secops-entraid-signin)Location Pilih wilayah yang paling dekat dengan tenant Microsoft Entra Anda Tingkatan harga Standar (direkomendasikan untuk produksi) Unit throughput Mulai dengan 1, aktifkan Pemompaan otomatis (direkomendasikan) Klik Review + create.
Tinjau ringkasan, lalu klik Buat.
Tunggu hingga deployment selesai (1-2 menit).
Membuat Hub Acara
- Setelah namespace di-deploy, buka namespace Event Hub.
- Di navigasi kiri, pilih Event Hubs di bagian Entitas.
- Klik + Event Hub.
Berikan detail konfigurasi berikut:
Setelan Nilai Nama Masukkan nama unik (misalnya, entraid-signin-logs)Jumlah partisi 40 (direkomendasikan untuk penskalaan Google SecOps yang optimal) Retensi pesan 7 hari (minimum yang direkomendasikan) Ambil Dinonaktifkan (tidak diperlukan untuk Google SecOps) Klik Create.
Mendapatkan string koneksi Event Hub
Google SecOps memerlukan string koneksi untuk melakukan autentikasi ke Event Hub.
Opsi A: String koneksi tingkat namespace (direkomendasikan)
- Buka namespace Event Hub.
- Di navigasi kiri, pilih Kebijakan akses bersama di bagian Setelan.
- Klik kebijakan default RootManageSharedAccessKey.
- Salin Connection string - primary key.
- Simpan string koneksi ini dengan aman.
Contoh:
Original: Endpoint=sb://secops-entraid-signin.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=abc123==;EntityPath=entraid-signin-logs Remove EntityPath: Endpoint=sb://secops-entraid-signin.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=abc123==
Opsi B: String koneksi tingkat Event Hub
- Buka Event Hub (bukan namespace).
- Di navigasi kiri, pilih Kebijakan akses bersama di bagian Setelan.
- Klik + Tambahkan untuk membuat kebijakan baru.
- Berikan detail konfigurasi berikut:
- Nama kebijakan: Masukkan nama deskriptif (misalnya,
chronicle-read) - Izin: Pilih Dengarkan saja (akses hanya baca)
- Nama kebijakan: Masukkan nama deskriptif (misalnya,
- Klik Create.
- Klik kebijakan yang baru dibuat.
- Salin Connection string - primary key.
Simpan string koneksi ini dengan aman.
Mengonfigurasi setelan diagnostik Microsoft Entra ID
- Login ke pusat admin Microsoft Entra sebagai Administrator Keamanan.
- Buka Entra ID > Monitoring & health > Diagnostic settings.
- Klik + Tambahkan setelan diagnostik.
- Berikan detail konfigurasi berikut:
- Nama setelan diagnostik: Masukkan nama deskriptif (misalnya,
signin-logs-to-eventhub). - Di bagian Log, pilih kategori log login yang ingin Anda ekspor:
- SignInLogs: Login pengguna interaktif.
- NonInteractiveUserSignInLogs: Login pengguna non-interaktif (direkomendasikan).
- ServicePrincipalSignInLogs: Login akun utama layanan (opsional).
- ManagedIdentitySignInLogs: Login identitas terkelola (opsional).
- ADFSSignInLogs: Log login AD FS (opsional, jika AD FS sedang digunakan).
- RiskyUsers: Pengguna yang ditandai berisiko oleh Microsoft Entra ID Protection (opsional).
- UserRiskEvents: Detail peristiwa login berisiko (opsional).
- Di bagian Detail tujuan, pilih Streaming ke hub peristiwa.
- Subscription: Pilih langganan yang berisi namespace Event Hub Anda.
- Event hub namespace: Pilih namespace yang Anda buat (misalnya,
secops-entraid-signin). - Nama hub peristiwa: Pilih Hub Peristiwa yang Anda buat (misalnya,
entraid-signin-logs). - Nama kebijakan hub peristiwa: Pilih RootManageSharedAccessKey.
- Nama setelan diagnostik: Masukkan nama deskriptif (misalnya,
Klik Simpan.
(Opsional) Mengonfigurasi Azure Blob Storage untuk pembuatan titik pemeriksaan
Google SecOps dapat menggunakan Azure Blob Storage untuk menyimpan titik pemeriksaan Event Hub, yang melacak peristiwa mana yang telah diproses. Tindakan ini mencegah penyerapan duplikat jika feed terganggu untuk sementara.
Membuat Akun Penyimpanan untuk pembuatan titik pemeriksaan
- Di portal Azure, cari Storage accounts.
- Klik + Create.
Berikan detail konfigurasi berikut:
Setelan Nilai Langganan Pilih langganan Azure Anda Grup resource Gunakan grup resource yang sama dengan Event Hub Nama akun penyimpanan Masukkan nama unik (misalnya, secopsaadsignin)Region Region yang sama dengan Event Hub Performa Standar Redundansi LRS (Penyimpanan redundan lokal) Klik Review + create.
Klik Create.
Buat Blob Container
- Buka Akun Penyimpanan yang Anda buat.
- Di navigasi kiri, pilih Containers di bagian Data storage.
- Klik + Penampung.
- Berikan detail konfigurasi berikut:
- Nama: Masukkan
checkpoints. - Tingkat akses publik: Pribadi (tidak ada akses anonim)
- Nama: Masukkan
- Klik Create.
Mendapatkan kredensial Akun Penyimpanan
- Di Akun Penyimpanan, pilih Kunci akses di bagian Keamanan + jaringan.
- Klik Tampilkan kunci.
- Salin dan simpan:
- Nama akun penyimpanan: Nama akun penyimpanan Anda.
- Kunci 1: Nilai kunci akses.
(Opsional) Buat grup konsumen khusus
Secara default, Event Hub menyediakan grup konsumen bernama $Default. Untuk lingkungan produksi, sebaiknya buat grup konsumen khusus untuk Google SecOps.
- Buka Event Hub (bukan namespace).
- Di navigasi kiri, pilih Grup konsumen di bagian Entitas.
- Klik + Grup konsumen.
- Berikan detail konfigurasi berikut:
- Nama: Masukkan nama deskriptif (misalnya,
chronicle)
- Nama: Masukkan nama deskriptif (misalnya,
Klik Create.
Mengonfigurasi feed di Google SecOps untuk menyerap log login Microsoft Entra ID
- Buka Setelan SIEM > Feed.
- Klik Tambahkan Feed Baru.
- Di halaman berikutnya, klik Konfigurasi satu feed.
- Di kolom Nama feed, masukkan nama untuk feed (misalnya,
Microsoft Entra ID Sign-In Logs - Event Hub). - Pilih Microsoft Azure Event Hub sebagai Jenis sumber.
- Pilih Microsoft Azure AD sebagai Jenis log.
- Klik Berikutnya.
Tentukan nilai untuk parameter input berikut:
- String koneksi hub peristiwa: Masukkan string koneksi Event Hub yang Anda catat sebelumnya.
Jika menggunakan string koneksi tingkat namespace:
- Pastikan Anda telah menghapus parameter
EntityPath. - Anda juga harus memberikan Nama hub peristiwa di kolom berikutnya.
Jika menggunakan string koneksi tingkat hub peristiwa:
- Gunakan string koneksi apa adanya (termasuk
EntityPath). Kolom Event hub name dapat dibiarkan kosong.
- Nama hub peristiwa: Masukkan nama Hub Peristiwa (misalnya,
entraid-signin-logs).
Diperlukan jika menggunakan string koneksi tingkat namespace. Opsional jika menggunakan string koneksi tingkat hub peristiwa.
- Nama hub peristiwa: Masukkan nama Hub Peristiwa (misalnya,
Grup konsumen (opsional): Masukkan nama grup konsumen.
Kosongkan untuk menggunakan grup konsumen
$Defaultdefault.Jika Anda membuat grup konsumen khusus, masukkan namanya (misalnya,
chronicle).Nama container penyimpanan blob (opsional): Untuk pembuatan titik pemeriksaan, masukkan nama container (misalnya,
checkpoints).
Jika menyediakan penyimpanan blob untuk pembuatan checkpoint:
- Nama akun penyimpanan Azure: Masukkan nama akun penyimpanan dari konfigurasi pembuatan titik pemeriksaan.
Kunci akun penyimpanan Azure: Masukkan kunci akses dari konfigurasi pembuatan titik pemeriksaan.
Namespace aset: Namespace aset.
Label penyerapan: Label yang akan diterapkan ke peristiwa dari feed ini.
Klik Berikutnya.
Tinjau konfigurasi feed baru Anda di layar Selesaikan, lalu klik Kirim.
Metode 2: API Pihak Ketiga
Metode ini menggunakan Microsoft Graph API untuk mengambil log login Microsoft Entra ID langsung dari tenant Microsoft Anda.
Mengonfigurasi daftar IP yang diizinkan
Sebelum membuat feed, Anda harus memasukkan rentang IP Google SecOps ke dalam daftar yang diizinkan di setelan jaringan Microsoft Azure atau kebijakan Akses Bersyarat Anda.
Mendapatkan rentang IP Google SecOps
- Buka Setelan SIEM > Feed.
- Klik Tambahkan Feed Baru.
- Catat rentang IP yang ditampilkan di antarmuka pembuatan feed.
- Atau, ambil rentang IP secara terprogram menggunakan Feed Management API.
Mengonfigurasi Akses Bersyarat untuk identitas workload (jika diperlukan)
Jika organisasi Anda menggunakan kebijakan Akses Bersyarat yang membatasi akses berdasarkan lokasi:
- Di pusat admin Microsoft Entra, buka Protection > Conditional Access > Named locations.
- Klik + Lokasi baru.
- Berikan detail konfigurasi berikut:
- Nama: Masukkan
Google SecOps IP Ranges. - Tandai sebagai lokasi tepercaya: Opsional, berdasarkan kebijakan keamanan Anda.
- Rentang IP: Tambahkan setiap rentang IP Google SecOps dalam notasi CIDR.
- Nama: Masukkan
- Klik Create.
- Buka Conditional Access > Policies.
- Untuk kebijakan apa pun yang berlaku untuk identitas workload, konfigurasi pengecualian untuk lokasi bernama
Google SecOps IP Rangesatau principal layanan tertentu.
Mengonfigurasi akses API Microsoft Entra ID
Membuat pendaftaran aplikasi
- Login ke pusat admin Microsoft Entra atau portal Azure.
- Buka Identity > Applications > App registrations.
- Klik New registration.
Berikan detail konfigurasi berikut:
- Name: Masukkan nama deskriptif (misalnya,
Google SecOps Sign-In Logs Integration). - Jenis akun yang didukung: Pilih Accounts in this organizational directory only (Single tenant).
- Redirect URI: Biarkan kosong (tidak diperlukan untuk autentikasi principal layanan).
- Name: Masukkan nama deskriptif (misalnya,
Klik Daftar.
Setelah pendaftaran, salin dan simpan nilai berikut:
- ID aplikasi (klien)
- Directory (tenant) ID
Mengonfigurasi izin API
Integrasi ini memerlukan izin aplikasi Microsoft Graph berikut:
- Di pendaftaran aplikasi, buka API permissions.
- Klik Add a permission.
- Pilih Microsoft Graph > Izin aplikasi.
- Pilih izin berikut:
- AuditLog.Read.All: Diperlukan untuk membaca log login.
- Directory.Read.All: Diperlukan oleh Microsoft Graph API untuk akses log aktivitas login (masalah umum).
- SecurityEvents.Read.All: Diperlukan oleh Google Security Operations.
- Klik Add permissions.
- Klik Grant admin consent for [Your Organization].
- Verifikasi bahwa kolom Status menampilkan Diberikan untuk [Organisasi Anda] untuk ketiga izin tersebut.
| Izin | Jenis | Deskripsi |
|---|---|---|
| AuditLog.Read.All | Aplikasi | Membaca semua data log audit dan login |
| Directory.Read.All | Aplikasi | Membaca data direktori (diperlukan untuk akses API) |
| SecurityEvents.Read.All | Aplikasi | Membaca peristiwa keamanan |
Buat rahasia klien
- Buka Certificates & secrets.
- Klik New client secret.
Berikan detail konfigurasi berikut:
- Description: Masukkan nama deskriptif (misalnya,
Google SecOps Feed). - Masa berlaku: Pilih periode masa berlaku.
- Description: Masukkan nama deskriptif (misalnya,
Klik Tambahkan.
Penting: Segera salin Nilai rahasia klien. Nilai ini hanya ditampilkan satu kali dan tidak dapat diambil lagi.
Memverifikasi akses API sebelum membuat feed
Sebelum membuat feed Google SecOps, verifikasi bahwa principal layanan dapat berhasil mengautentikasi dan mengakses Microsoft Graph API.
Menguji autentikasi menggunakan PowerShell
# Replace with your actual values $tenantId = "your-tenant-id" $clientId = "your-client-id" $clientSecret = "your-client-secret" # Token request parameters (must be lowercase) $tokenBody = @{ grant_type = "client_credentials" client_id = $clientId client_secret = $clientSecret scope = "https://graph.microsoft.com/.default" } # Request access token $tokenEndpoint = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token" $tokenResponse = Invoke-RestMethod -Method Post -Uri $tokenEndpoint -Body $tokenBody -ContentType "application/x-www-form-urlencoded" if ($tokenResponse.access_token) { Write-Host "✓ Successfully obtained access token" -ForegroundColor Green # Test API call to sign-ins endpoint $apiUrl = "https://graph.microsoft.com/v1.0/auditLogs/signIns?`$top=1" $headers = @{ Authorization = "Bearer $($tokenResponse.access_token)" } try { $signInResponse = Invoke-RestMethod -Method Get -Uri $apiUrl -Headers $headers Write-Host "✓ Successfully accessed sign-ins API" -ForegroundColor Green Write-Host "Sample sign-in log retrieved successfully" -ForegroundColor Green } catch { Write-Host "✗ Failed to access sign-ins API" -ForegroundColor Red Write-Host "Error: $($_.Exception.Message)" -ForegroundColor Red } } else { Write-Host "✗ Failed to obtain access token" -ForegroundColor Red }Output yang diharapkan:
✓ Successfully obtained access token ✓ Successfully accessed sign-ins API Sample sign-in log retrieved successfully
Menguji autentikasi menggunakan curl
# Replace with your actual values TENANT_ID="your-tenant-id" CLIENT_ID="your-client-id" CLIENT_SECRET="your-client-secret" # Request access token curl -X POST "https://login.microsoftonline.com/$TENANT_ID/oauth2/v2.0/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=client_credentials" \ -d "client_id=$CLIENT_ID" \ -d "client_secret=$CLIENT_SECRET" \ -d "scope=https://graph.microsoft.com/.default" # Test API access curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ "https://graph.microsoft.com/v1.0/auditLogs/signIns?\$top=1"
Mengonfigurasi feed di Google SecOps untuk menyerap log login Microsoft Entra ID
Menyiapkan feed
- Buka Setelan SIEM > Feed.
- Klik Tambahkan Feed Baru.
- Di halaman berikutnya, klik Konfigurasi satu feed.
- Di kolom Nama feed, masukkan nama untuk feed (misalnya,
Microsoft Entra ID Sign-In Logs). - Pilih Third party API sebagai Source type.
- Pilih Microsoft Azure AD sebagai Jenis log.
- Klik Berikutnya.
Mengonfigurasi parameter feed
Tentukan nilai untuk parameter input berikut:
- Client ID OAuth: ID Aplikasi (klien) dari pendaftaran aplikasi.
- Rahasia klien OAuth: Nilai rahasia klien yang Anda salin sebelumnya.
- Tenant ID: ID tenant Microsoft Anda dari pendaftaran aplikasi (format UUID, misalnya,
0fc279f9-fe30-41be-97d3-abe1d7681418). Jalur Lengkap API: URL endpoint Microsoft Graph REST API:
graph.microsoft.com/v1.0/auditLogs/signInsEndpoint Autentikasi API: Endpoint Autentikasi Microsoft Active Directory:
login.microsoftonline.comOpsi Lanjutan:
- Nama Feed: Nilai yang telah diisi otomatis yang mengidentifikasi feed.
- Jenis Sumber: API pihak ketiga (mekanisme untuk mengumpulkan log ke Google SecOps).
- Namespace aset: Namespace aset yang akan dikaitkan dengan feed.
- Label Penyerapan: Label akan ditambahkan ke semua peristiwa dari feed ini.
- Klik Berikutnya.
Tinjau konfigurasi feed baru Anda di layar Selesaikan, lalu klik Kirim.
Endpoint regional
Untuk deployment Microsoft Entra ID di cloud kedaulatan, gunakan endpoint regional yang sesuai:
| Lingkungan Cloud | Jalur Lengkap API | Endpoint Autentikasi API |
|---|---|---|
| Global | graph.microsoft.com/v1.0/auditLogs/signIns |
login.microsoftonline.com |
| L4 Pemerintah AS | graph.microsoft.us/v1.0/auditLogs/signIns |
login.microsoftonline.us |
| Pemerintah AS L5 (DOD) | dod-graph.microsoft.us/v1.0/auditLogs/signIns |
login.microsoftonline.us |
| China (21Vianet) | microsoftgraph.chinacloudapi.cn/v1.0/auditLogs/signIns |
login.chinacloudapi.cn |
Tabel Pemetaan UDM
| Kolom Log | Pemetaan UDM | Logika |
|---|---|---|
activityDateTime |
principal.event_timestamp |
Diuraikan dari kolom activityDateTime. Jika kolom tidak dalam format "yyyy-MM-ddTHH:mm:ss.SSSZ" atau "ISO8601" yang diharapkan, parser akan mencoba format lain seperti "MM/dd/yyyy HH:mm:ss A" atau "MM/d/yyyy HH:mm:ss A". |
activityDisplayName |
security_result.summary |
Dipetakan langsung dari activityDisplayName. |
additionalDetails.0.value |
network.http.user_agent |
Dipetakan langsung dari additionalDetails.0.value. |
additionalDetails.1.key |
target.resource.attribute.labels.key |
Dipetakan langsung dari additionalDetails.1.key. |
additionalDetails.1.value |
target.resource.attribute.labels.value |
Dipetakan langsung dari additionalDetails.1.value. |
additionalInfo.[].Key |
network.http.user_agent, target.url |
Jika Key adalah userAgent, petakan Value ke network.http.user_agent dan network.http.parsed_user_agent. Jika Key adalah alertUrl, petakan Value ke target.url. |
additionalInfo.[].Value |
network.http.user_agent, target.url |
Jika Key adalah userAgent, petakan Value ke network.http.user_agent dan network.http.parsed_user_agent. Jika Key adalah alertUrl, petakan Value ke target.url. |
am_category |
metadata.description |
Dipetakan langsung dari am_category. |
am_tenantId |
metadata.product_deployment_id |
Dipetakan langsung dari am_tenantId. |
appId |
target.resource.attribute.labels.value |
Dipetakan langsung dari appId dengan kunci label sebagai "ID Aplikasi". |
appDisplayName |
target.application |
Dipetakan langsung dari appDisplayName. |
appliedConditionalAccessPolicies.[].displayName |
security_result.[].rule_name, about.[].user.user_display_name |
Dipetakan langsung dari appliedConditionalAccessPolicies.[].displayName. |
appliedConditionalAccessPolicies.[].enforcedGrantControls |
security_result.[].rule_labels.value |
Dipetakan langsung dari appliedConditionalAccessPolicies.[].enforcedGrantControls dengan kunci label sebagai "applied_conditional_access_policies_enforced_grant_controls". |
appliedConditionalAccessPolicies.[].enforcedSessionControls |
security_result.[].rule_labels.value |
Dipetakan langsung dari appliedConditionalAccessPolicies.[].enforcedSessionControls dengan kunci label sebagai "applied_conditional_access_policies_enforced_session_controls". |
appliedConditionalAccessPolicies.[].id |
security_result.[].rule_id, about.[].user.userid |
Dipetakan langsung dari appliedConditionalAccessPolicies.[].id. |
appliedConditionalAccessPolicies.[].result |
security_result.[].detection_fields.value, about.[].labels.value |
Dipetakan langsung dari appliedConditionalAccessPolicies.[].result dengan kunci label sebagai "Result". |
authenticationDetails.[].authenticationMethod |
security_result.[].detection_fields.value |
Dipetakan langsung dari authenticationDetails.[].authenticationMethod dengan kunci label sebagai "authenticationMethod". |
authenticationDetails.[].authenticationMethodDetail |
security_result.[].detection_fields.value |
Dipetakan langsung dari authenticationDetails.[].authenticationMethodDetail dengan kunci label sebagai "authenticationMethodDetail". |
authenticationDetails.[].authenticationStepDateTime |
security_result.[].detection_fields.value |
Dipetakan langsung dari authenticationDetails.[].authenticationStepDateTime dengan kunci label sebagai "authenticationStepDateTime". |
authenticationDetails.[].authenticationStepRequirement |
security_result.[].detection_fields.value |
Dipetakan langsung dari authenticationDetails.[].authenticationStepRequirement dengan kunci label sebagai "authenticationStepRequirement". |
authenticationDetails.[].authenticationStepResultDetail |
security_result.[].detection_fields.value |
Dipetakan langsung dari authenticationDetails.[].authenticationStepResultDetail dengan kunci label sebagai "authenticationStepResultDetail". |
authenticationDetails.[].succeeded |
security_result.action |
Jika nilai adalah "true", maka ALLOW, jika tidak BLOCK. |
authenticationRequirement |
additional.fields.value.string_value |
Dipetakan langsung dari authenticationRequirement dengan kunci label sebagai "AuthenticationRequirement". |
authenticationRequirementPolicies.[].detail |
security_result.detection_fields.value |
Dipetakan langsung dari authenticationRequirementPolicies.[].detail dengan kunci label sebagai "detail". |
authenticationRequirementPolicies.[].requirementProvider |
security_result.detection_fields.value |
Dipetakan langsung dari authenticationRequirementPolicies.[].requirementProvider dengan kunci label sebagai "requirementProvider". |
callerIpAddress |
principal.ip, principal.asset.ip |
Dipetakan langsung dari callerIpAddress. |
category |
metadata.description |
Dipetakan langsung dari category. |
clientAppUsed |
principal.application |
Dipetakan langsung dari clientAppUsed. |
conditionalAccessStatus |
additional.fields.value.string_value |
Dipetakan langsung dari conditionalAccessStatus dengan kunci label sebagai "conditionalAccessStatus". |
correlationId |
network.session_id, security_result.detection_fields.value |
Dipetakan langsung dari correlationId. Juga digunakan sebagai security_result.detection_fields.value dengan kunci label sebagai "CorrelationId". |
createdDateTime |
when |
Kolom when berasal dari kolom createdDateTime. Tanggal dan waktu diekstrak dari kolom createdDateTime menggunakan grok, lalu digabungkan untuk membentuk kolom when. |
deviceDetail.browser |
network.http.user_agent |
Dipetakan langsung dari deviceDetail.browser. |
deviceDetail.deviceId |
principal.asset.asset_id, principal.asset_id |
Dipetakan langsung dari deviceDetail.deviceId dan diawali dengan "ID Perangkat:". |
deviceDetail.displayName |
principal.asset.hostname |
Dipetakan langsung dari deviceDetail.displayName. |
deviceDetail.isCompliant |
principal.asset.attribute.labels.value |
Dipetakan langsung dari deviceDetail.isCompliant dengan kunci label sebagai "isCompliant". |
deviceDetail.isManaged |
principal.asset.attribute.labels.value |
Dipetakan langsung dari deviceDetail.isManaged dengan kunci label sebagai "isManaged". |
deviceDetail.operatingSystem |
principal.platform_version |
Dipetakan langsung dari deviceDetail.operatingSystem. |
deviceDetail.trustType |
principal.asset.attribute.labels.value |
Dipetakan langsung dari deviceDetail.trustType dengan kunci label sebagai "trustType". |
durationMs |
additional.fields.value.string_value |
Dipetakan langsung dari durationMs dengan kunci label sebagai "durationMs". |
event.id |
- | Tidak dipetakan sesuai petunjuk (poin 3). |
id |
metadata.product_log_id |
Dipetakan langsung dari id. |
identity |
target.user.user_display_name |
Dipetakan langsung dari identity jika berbeda dari userId dan bukan alamat email. |
initiatedBy.user.displayName |
principal.user.user_display_name |
Dipetakan langsung dari initiatedBy.user.displayName. |
initiatedBy.user.id |
principal.user.userid, principal.user.windows_sid |
Dipetakan langsung dari initiatedBy.user.id. |
initiatedBy.user.ipAddress |
principal.ip, principal.asset.ip |
Dipetakan langsung dari initiatedBy.user.ipAddress. |
initiatedBy.user.userPrincipalName |
principal.user.email_addresses, principal.user.userid |
Dipetakan langsung dari initiatedBy.user.userPrincipalName. Jika berupa alamat email, maka dipetakan ke email_addresses, jika tidak, maka dipetakan ke userid. |
Level |
security_result.severity_details, level |
Dipetakan langsung dari Level. |
level |
security_result.severity_details, security_result.severity |
Dipetakan langsung dari level. Juga dipetakan ke security_result.severity setelah dikonversi menjadi huruf besar. Penanganan khusus untuk nilai "Information", "Informational", "0", "4", "Warning", "1", "3", "Error", "2", dan "Critical". |
location.city |
principal.location.city |
Dipetakan langsung dari location.city. |
location.countryOrRegion |
principal.location.country_or_region |
Dipetakan langsung dari location.countryOrRegion. |
location.geoCoordinates.altitude |
additional.fields.value.string_value |
Dipetakan langsung dari location.geoCoordinates.altitude dengan kunci label sebagai "location_geoCoordinates_altitude". |
location.geoCoordinates.latitude |
principal.location.region_latitude, principal.location.region_coordinates.latitude |
Dipetakan langsung dari location.geoCoordinates.latitude. |
location.geoCoordinates.longitude |
principal.location.region_longitude, principal.location.region_coordinates.longitude |
Dipetakan langsung dari location.geoCoordinates.longitude. |
location.state |
principal.location.state |
Dipetakan langsung dari location.state. |
location |
principal.location.name |
Dipetakan langsung dari location. |
log_type |
metadata.log_type |
Dipetakan langsung dari log_type. |
networkLocationDetails.[].networkNames |
additional.fields.value.string_value |
Nilai yang digabungkan dari networkLocationDetails.[].networkNames dengan kunci label sebagai "networkName {index}". |
networkLocationDetails.[].networkType |
security_result.detection_fields.value, additional.fields.value.string_value |
Dipetakan langsung dari networkLocationDetails.[].networkType dengan kunci label sebagai "networkType". Juga digunakan sebagai additional.fields.value.string_value dengan kunci label sebagai "networkType {index}". |
operationName |
event_type |
Jika operationName adalah "Aktivitas login", maka USER_LOGIN. Jika operationName adalah "Tambahkan anggota ke grup", maka USER_CHANGE_PERMISSIONS. |
operationType |
security_result.action_details |
Dipetakan langsung dari operationType. |
properties.activity |
security_result.summary |
Dipetakan langsung dari properties.activity. |
properties.activityDateTime |
when |
Diuraikan dari kolom properties.activityDateTime. Jika kolom tidak dalam format "yyyy-MM-ddTHH:mm:ss.SSSZ" atau "ISO8601" yang diharapkan, parser akan mencoba format lain seperti "MM/dd/yyyy HH:mm:ss A" atau "MM/d/yyyy HH:mm:ss A". |
properties.activityDisplayName |
security_result.summary |
Dipetakan langsung dari properties.activityDisplayName. |
properties.additionalInfo |
network.http.user_agent, target.url |
Diuraikan sebagai JSON dan jika kuncinya adalah userAgent, petakan nilai ke network.http.user_agent dan network.http.parsed_user_agent. Jika kuncinya adalah alertUrl, petakan nilai ke target.url. |
properties.appliedConditionalAccessPolicies.[].displayName |
security_result.[].rule_name |
Dipetakan langsung dari properties.appliedConditionalAccessPolicies.[].displayName. |
properties.appliedConditionalAccessPolicies.[].enforcedGrantControls |
security_result.[].rule_labels.value |
Dipetakan langsung dari properties.appliedConditionalAccessPolicies.[].enforcedGrantControls dengan kunci label sebagai "applied_conditional_access_policies_enforced_grant_controls". |
properties.appliedConditionalAccessPolicies.[].enforcedSessionControls |
security_result.[].rule_labels.value |
Dipetakan langsung dari properties.appliedConditionalAccessPolicies.[].enforcedSessionControls dengan kunci label sebagai "applied_conditional_access_policies_enforced_session_controls". |
properties.appliedConditionalAccessPolicies.[].id |
security_result.[].rule_id |
Dipetakan langsung dari properties.appliedConditionalAccessPolicies.[].id. |
properties.appliedConditionalAccessPolicies.[].result |
security_result.[].detection_fields.value |
Dipetakan langsung dari properties.appliedConditionalAccessPolicies.[].result dengan kunci label sebagai "Result". |
properties.appId |
appId |
Dipetakan langsung dari properties.appId. |
properties.appDisplayName |
target.application |
Dipetakan langsung dari properties.appDisplayName. |
properties.authenticationDetails.[].authenticationMethod |
security_result.detection_fields.value |
Dipetakan langsung dari properties.authenticationDetails.[].authenticationMethod dengan kunci label sebagai "authenticationMethod". |
properties.authenticationDetails.[].authenticationMethodDetail |
security_result.detection_fields.value |
Dipetakan langsung dari properties.authenticationDetails.[].authenticationMethodDetail dengan kunci label sebagai "authenticationMethodDetail". |
properties.authenticationDetails.[].authenticationStepDateTime |
security_result.detection_fields.value |
Dipetakan langsung dari properties.authenticationDetails.[].authenticationStepDateTime dengan kunci label sebagai "authenticationStepDateTime". |
properties.authenticationDetails.[].authenticationStepRequirement |
security_result.detection_fields.value |
Dipetakan langsung dari properties.authenticationDetails.[].authenticationStepRequirement dengan kunci label sebagai "authenticationStepRequirement". |
properties.authenticationDetails.[].authenticationStepResultDetail |
security_result.detection_fields.value |
Dipetakan langsung dari properties.authenticationDetails.[].authenticationStepResultDetail dengan kunci label sebagai "authenticationStepResultDetail". |
properties.authenticationRequirement |
additional.fields.value.string_value |
Dipetakan langsung dari properties.authenticationRequirement dengan kunci label sebagai "AuthenticationRequirement". |
properties.authenticationRequirementPolicies.[].detail |
security_result.detection_fields.value |
Dipetakan langsung dari properties.authenticationRequirementPolicies.[].detail dengan kunci label sebagai "detail". |
properties.authenticationRequirementPolicies.[].requirementProvider |
security_result.detection_fields.value |
Dipetakan langsung dari properties.authenticationRequirementPolicies.[].requirementProvider dengan kunci label sebagai "requirementProvider". |
properties.clientAppUsed |
principal.application |
Dipetakan langsung dari properties.clientAppUsed. |
properties.conditionalAccessStatus |
additional.fields.value.string_value |
Dipetakan langsung dari properties.conditionalAccessStatus dengan kunci label sebagai "conditionalAccessStatus". |
properties.crossTenantAccessType |
additional.fields.value.string_value |
Dipetakan langsung dari properties.crossTenantAccessType dengan kunci label sebagai "crossTenantAccessType". |
properties.detectedDateTime |
additional.fields.value.string_value |
Dipetakan langsung dari properties.detectedDateTime dengan kunci label sebagai "detectedDateTime". |
properties.detectionTimingType |
additional.fields.value.string_value |
Dipetakan langsung dari properties.detectionTimingType dengan kunci label sebagai "detectionTimingType". |
properties.homeTenantId |
additional.fields.value.string_value |
Dipetakan langsung dari properties.homeTenantId dengan kunci label sebagai "homeTenantId". |
properties.id |
metadata.product_log_id |
Dipetakan langsung dari properties.id. |
properties.initiatedBy.user.displayName |
principal.user.user_display_name |
Dipetakan langsung dari properties.initiatedBy.user.displayName. |
properties.initiatedBy.user.id |
principal.user.windows_sid |
Dipetakan langsung dari properties.initiatedBy.user.id. |
properties.initiatedBy.user.ipAddress |
principal.ip, principal.asset.ip |
Dipetakan langsung dari properties.initiatedBy.user.ipAddress. |
properties.initiatedBy.user.userPrincipalName |
principal.user.email_addresses, principal.user.userid |
Dipetakan langsung dari properties.initiatedBy.user.userPrincipalName. Jika berupa alamat email, maka dipetakan ke email_addresses, jika tidak, maka dipetakan ke userid. |
properties.ipAddress |
principal.ip, principal.asset.ip |
Dipetakan langsung dari properties.ipAddress. |
properties.isGuest |
additional.fields.value.string_value |
Dipetakan langsung dari properties.isGuest dengan kunci label sebagai "isGuest". |
properties.isDeleted |
additional.fields.value.string_value |
Dipetakan langsung dari properties.isDeleted dengan kunci label sebagai "isDeleted". |
properties.isProcessing |
additional.fields.value.string_value |
Dipetakan langsung dari properties.isProcessing dengan kunci label sebagai "isProcessing". |
properties.lastUpdatedDateTime |
additional.fields.value.string_value |
Dipetakan langsung dari properties.lastUpdatedDateTime dengan kunci label sebagai "lastUpdatedDateTime". |
properties.location.city |
principal.location.city |
Dipetakan langsung dari properties.location.city. |
properties.location.countryOrRegion |
principal.location.country_or_region |
Dipetakan langsung dari properties.location.countryOrRegion. |
properties.location.geoCoordinates.latitude |
principal.location.region_latitude, principal.location.region_coordinates.latitude |
Dipetakan langsung dari properties.location.geoCoordinates.latitude. |
properties.location.geoCoordinates.longitude |
principal.location.region_longitude, principal.location.region_coordinates.longitude |
Dipetakan langsung dari properties.location.geoCoordinates.longitude. |
properties.location.state |
principal.location.state |
Dipetakan langsung dari properties.location.state. |
properties.networkLocationDetails.[].networkNames |
additional.fields.value.string_value |
Nilai yang digabungkan dari properties.networkLocationDetails.[].networkNames dengan kunci label sebagai "properties networkName {index}". |
properties.networkLocationDetails.[].networkType |
additional.fields.value.string_value |
Dipetakan langsung dari properties.networkLocationDetails.[].networkType dengan kunci label sebagai "properties networkType {index}". |
properties.riskEventType |
additional.fields.value.string_value |
Dipetakan langsung dari properties.riskEventType dengan kunci label sebagai "riskEventType". |
properties.riskLastUpdatedDateTime |
additional.fields.value.string_value |
Dipetakan langsung dari properties.riskLastUpdatedDateTime dengan kunci label sebagai "riskLastUpdatedDateTime". |
properties.riskLevel |
additional.fields.value.string_value |
Dipetakan langsung dari properties.riskLevel dengan kunci label sebagai "riskLevel". |
properties.riskLevelDuringSignIn |
additional.fields.value.string_value |
Dipetakan langsung dari properties.riskLevelDuringSignIn dengan kunci label sebagai "riskLevelDuringSignIn". |
properties.riskState |
additional.fields.value.string_value |
Dipetakan langsung dari properties.riskState dengan kunci label sebagai "riskState". |
properties.riskDetail |
additional.fields.value.string_value |
Dipetakan langsung dari properties.riskDetail dengan kunci label sebagai "riskDetail". |
properties.riskType |
additional.fields.value.string_value |
Dipetakan langsung dari properties.riskType dengan kunci label sebagai "riskType". |
properties.source |
additional.fields.value.string_value |
Dipetakan langsung dari properties.source dengan kunci label sebagai "source". |
properties.targetResources.0.id |
target.user.product_object_id |
Dipetakan langsung dari properties.targetResources.0.id. |
properties.targetResources.modifiedProperties.0.newValue |
target.group.product_object_id |
Dipetakan langsung dari properties.targetResources.modifiedProperties.0.newValue. |
properties.tokenIssuerType |
additional.fields.value.string_value |
Dipetakan langsung dari properties.tokenIssuerType dengan kunci label sebagai "tokenIssuerType". |
properties.userAgent |
network.http.user_agent, network.http.parsed_user_agent |
Dipetakan langsung dari properties.userAgent. |
properties.userDisplayName |
target.user.user_display_name |
Dipetakan langsung dari properties.userDisplayName. |
properties.userId |
target.user.product_object_id |
Dipetakan langsung dari properties.userId. |
properties.userPrincipalName |
target.user.userid, target.user.email_addresses |
Dipetakan langsung dari properties.userPrincipalName. Jika berupa alamat email, maka dipetakan ke email_addresses, jika tidak, maka dipetakan ke userid. |
result |
security_result.action, security_result.action_details |
Jika result adalah "success", maka ALLOW. |
resultDescription |
security_result.description |
Dipetakan langsung dari resultDescription. |
resultSignature |
additional.fields.value.string_value |
Dipetakan langsung dari resultSignature dengan kunci label sebagai "resultSignature". |
resultType |
security_result.rule_id, action, security_result.summary |
Jika resultType adalah "0", maka ALLOW dan "Login berhasil". Jika tidak, BLOCK dan "Terjadi login yang gagal". |
resourceId |
target.resource.id, target.resource.product_object_id |
Dipetakan langsung dari resourceId. |
resourceDisplayName |
target.resource.name, appDisplayName |
Dipetakan langsung dari resourceDisplayName. |
riskDetail |
additional.fields.value.string_value |
Dipetakan langsung dari riskDetail dengan kunci label sebagai "riskDetail". |
riskEventTypes.[]. |
additional.fields.value.string_value, additional.fields.value.list_value.values.string_value |
Nilai ditambahkan ke daftar dengan kunci sebagai "riskEventTypes" di additional.fields. Selain itu, setiap nilai ditambahkan sebagai kolom terpisah dengan kunci sebagai "riskEventType" di additional.fields. |
riskEventTypes_v2.[]. |
additional.fields.value.list_value.values.string_value |
Nilai ditambahkan ke daftar dengan kunci sebagai "riskEventTypes_v2" di additional.fields. |
riskLevelAggregated |
additional.fields.value.string_value |
Dipetakan langsung dari riskLevelAggregated dengan kunci label sebagai "riskLevelAggregated". |
riskLevelDuringSignIn |
additional.fields.value.string_value |
Dipetakan langsung dari riskLevelDuringSignIn dengan kunci label sebagai "riskLevelDuringSignIn". |
riskState |
additional.fields.value.string_value |
Dipetakan langsung dari riskState dengan kunci label sebagai "riskState". |
status.additionalDetails |
security_result.description |
Dipetakan langsung dari status.additionalDetails. |
status.errorCode |
security_result.rule_id, errorCode |
Dipetakan langsung dari status.errorCode. |
target.displayName |
resourceDisplayName |
Dipetakan langsung dari target.displayName. |
target.id |
resourceId |
Dipetakan langsung dari target.id. |
target.modifiedProperties.[].displayName |
target.resource.attribute.labels.key |
Dipetakan langsung dari target.modifiedProperties.[].displayName. |
target.modifiedProperties.[].newValue |
target.resource.attribute.labels.value, target.resource.product_object_id |
Dipetakan langsung dari target.modifiedProperties.[].newValue. |
target.modifiedProperties.[].oldValue |
target.resource.attribute.labels.value |
Dipetakan langsung dari target.modifiedProperties.[].oldValue. |
target.type |
target.resource.type |
Dipetakan langsung dari target.type. |
tenantId |
metadata.product_deployment_id |
Dipetakan langsung dari tenantId. |
time |
when |
Kolom when berasal dari kolom time. Tanggal dan waktu diekstrak dari kolom time menggunakan grok, lalu digabungkan untuk membentuk kolom when. |
userAgent |
network.http.user_agent, network.http.parsed_user_agent |
Dipetakan langsung dari userAgent. |
userDisplayName |
target.user.user_display_name |
Dipetakan langsung dari userDisplayName. |
userId |
target.user.product_object_id |
Dipetakan langsung dari userId. |
userPrincipalName |
target.user.userid, principal.administrative_domain, target.user.email_addresses |
Dipetakan langsung dari userPrincipalName. Jika berupa alamat email, alamat tersebut dipetakan ke email_addresses dan bagian domain diekstrak serta dipetakan ke principal.administrative_domain. Jika tidak, nilai ini dipetakan ke userid. |
| (Logika Parser) | event.idm.is_alert, event.idm.is_significant |
Tetapkan ke benar (true) jika tingkatnya adalah "Kritis". |
| (Logika Parser) | event.idm.read_only_udm.metadata.event_type |
Ditetapkan ke "USER_LOGIN" jika has_target_user adalah "true". Ditetapkan ke "USER_UNCATEGORIZED" jika has_principal_user adalah "true". Tetapkan ke "STATUS_UPDATE" jika has_principal adalah "true". Jika tidak, ditetapkan ke "GENERIC_EVENT". |
| (Logika Parser) | event.idm.read_only_udm.metadata.vendor_name |
Tetapkan ke "Microsoft". |
| (Logika Parser) | event.idm.read_only_udm.metadata.product_name |
Tetapkan ke "Azure AD". |
| (Logika Parser) | event.idm.read_only_udm.extensions.auth.type |
Ditetapkan ke "SSO". |
| (Logika Parser) | event.idm.read_only_udm.extensions.auth.mechanism |
Tetapkan ke "INTERACTIVE" jika isInteractive adalah "true". Jika tidak, setel ke "MECHANISM_OTHER". |
| (Logika Parser) | security_result.action |
Tetapkan ke ALLOW jika hasilnya berhasil. |
| (Logika Parser) | security_result.action |
Setel ke ALLOW jika resultType adalah 0. |
| (Logika Parser) | security_result.action |
Ditetapkan ke BLOCK jika resultType bukan 0 dan bukan "". |
| (Logika Parser) | security_result.category |
Ditetapkan ke "AUTH_VIOLATION" jika resultType bukan 0 dan bukan "". |
| (Logika Parser) | security_result.description |
Disetel ke "Keanggotaan grup diubah" jika operationName adalah "Tambahkan anggota ke grup" dan hasilnya adalah "berhasil". |
| (Logika Parser) | security_result.priority |
Ditetapkan ke "MEDIUM_PRIORITY" jika properties.riskLevelDuringSignIn adalah "medium". |
| (Logika Parser) | security_result.summary |
Ditetapkan ke "Login berhasil" jika resultType adalah 0. |
| (Logika Parser) | security_result.summary |
Ditetapkan ke "Terjadi upaya login yang gagal" jika resultType bukan 0 dan bukan "". |
| (Logika Parser) | security_result.summary |
Ditetapkan ke properties.activityDisplayName jika ada. |
| (Logika Parser) | security_result.severity |
Setel ke INFORMATIONAL jika levelnya adalah "Information", "Informational", "0", atau "4". Setel ke SEDANG jika levelnya adalah "Peringatan", "1", atau "3". Disetel ke ERROR jika levelnya adalah "Error" atau "2". Disetel ke CRITICAL jika levelnya adalah "Critical". |
| (Logika Parser) | security_result.severity |
Ditetapkan ke ERROR jika resultType bukan 0 dan bukan "". |
Log Perubahan
Melihat Log Perubahan untuk parser ini
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.