Mengumpulkan log Konteks Microsoft Azure AD
Dokumen ini menjelaskan cara mengumpulkan log Microsoft Azure Active Directory (AD) dengan menyiapkan feed Google Security Operations.
Azure Active Directory (AZURE_AD
) kini disebut Microsoft Entra ID. Log audit Azure AD
(AZURE_AD_AUDIT
) kini menjadi log audit Microsoft Entra ID.
Untuk mengetahui informasi selengkapnya, lihat Penambahan data ke Google Security Operations.
Label penyerapan mengidentifikasi parser yang menormalisasi data log mentah ke format UDM terstruktur.
Sebelum memulai
Untuk menyelesaikan tugas di halaman ini, pastikan Anda memiliki hal berikut:
- Langganan Azure yang dapat Anda gunakan untuk login.
- Peran administrator global atau administrator Azure AD.
- Azure AD (tenant) di Azure.
Mengonfigurasi Azure AD
- Login ke portal Azure.
- Buka Beranda > Pendaftaran aplikasi, pilih aplikasi yang terdaftar atau daftarkan aplikasi jika Anda belum membuat aplikasi.
- Untuk mendaftarkan aplikasi, di bagian Pendaftaran aplikasi, klik Pendaftaran baru.
- Di kolom Nama, berikan nama tampilan untuk aplikasi Anda.
- Di bagian Supported account types, pilih opsi yang diperlukan untuk menentukan siapa yang dapat menggunakan aplikasi atau mengakses API.
- Klik Daftar.
- Buka halaman Ringkasan dan salin ID aplikasi (klien) dan ID direktori (tenant), yang diperlukan untuk mengonfigurasi feed Google Security Operations.
- Klik API permissions.
- Klik Tambahkan izin, lalu pilih Microsoft Graph di panel baru.
- Klik Izin aplikasi.
- Pilih izin AuditLog.Read.All, Directory.Read.All, dan SecurityEvents.Read.All. Pastikan izinnya adalah Izin aplikasi, bukan Izin yang didelegasikan.
- Klik Grant admin consent for default directory. Aplikasi diberi otorisasi untuk memanggil API saat diberi izin oleh pengguna atau administrator sebagai bagian dari proses izin.
- Buka Setelan > Kelola.
- Klik Sertifikat dan rahasia.
- Klik New client secret. Di kolom Value, rahasia klien akan muncul.
- Salin nilai rahasia klien. Nilai ini hanya ditampilkan pada saat pembuatan dan diperlukan untuk pendaftaran aplikasi Azure serta untuk mengonfigurasi feed Operasi Keamanan Google.
Mengonfigurasi feed di Google Security Operations untuk menyerap log Konteks Azure AD
- Pilih Setelan SIEM > Feed.
- Klik Tambahkan baru.
- Masukkan nama unik untuk Nama feed.
- Pilih Third party API sebagai Source type.
- Pilih Azure AD Organizational Context sebagai Log type.
- Klik Berikutnya.
- Konfigurasikan parameter input wajib berikut:
- Client ID OAUTH: tentukan client ID yang Anda peroleh sebelumnya.
- Rahasia klien OAUTH: tentukan rahasia klien yang Anda peroleh sebelumnya.
- Tenant ID: tentukan tenant ID yang Anda peroleh sebelumnya.
- Klik Berikutnya, lalu klik Kirim.
Untuk informasi selengkapnya tentang feed Google Security Operations, lihat dokumentasi feed Google Security Operations. Untuk mengetahui informasi tentang persyaratan untuk setiap jenis feed, lihat Konfigurasi feed menurut jenis. Jika Anda mengalami masalah saat membuat feed, hubungi dukungan Google Security Operations.
Referensi pemetaan kolom
Kode parser ini mengubah log berformat JSON mentah dari Azure Active Directory menjadi Unified Data Model (UDM). Alat ini mengekstrak informasi pengguna dan pengelola, termasuk atribut, peran, hubungan, dan label, sekaligus menangani berbagai inkonsistensi data dan memperkaya output dengan kolom standar.
Tabel Pemetaan UDM
Kolom Log | Pemetaan UDM | Logika |
---|---|---|
businessPhones | user.phone_numbers | Dipetakan langsung dari kolom businessPhones dalam log mentah. Beberapa nomor telepon diekstrak dan dipetakan sebagai entri terpisah. |
city | user.personal_address.city | Dipetakan langsung dari kolom city dalam log mentah. |
companyName | user.company_name | Dipetakan langsung dari kolom companyName dalam log mentah. |
country | user.personal_address.country_or_region | Dipetakan langsung dari kolom country dalam log mentah. Jika country kosong, nilai diambil dari usageLocation . |
createdDateTime | user.attribute.creation_time | Dikonversi menjadi stempel waktu dari kolom createdDateTime dalam log mentah menggunakan format RFC3339. |
department | user.department | Dipetakan langsung dari kolom department dalam log mentah. Beberapa departemen diekstrak dan dipetakan sebagai entri terpisah. |
displayName | user.user_display_name | Dipetakan langsung dari kolom displayName dalam log mentah. |
employeeId | user.employee_id | Dipetakan langsung dari kolom employeeId dalam log mentah. Jika employeeId kosong, nilai diambil dari extension_employeeNumber . |
employeeType | user.attribute.labels.value (key: employeeType) | Dipetakan langsung dari kolom employeeType dalam log mentah dan ditambahkan sebagai label dengan kunci employeeType . |
extension_employeeNumber | user.employee_id | Dipetakan ke user.employee_id jika employeeId kosong. |
extension_wfc_AccountType | event.idm.entity.entity.labels.value (kunci: wfc_AccountType) | Dipetakan langsung dari kolom extension_wfc_AccountType dalam log mentah dan ditambahkan sebagai label dengan kunci wfc_AccountType . |
extension_wfc_AccountingUnitName | event.idm.entity.entity.labels.value (kunci: extension_wfc_AccountingUnitName) | Dipetakan langsung dari kolom extension_wfc_AccountingUnitName dalam log mentah dan ditambahkan sebagai label dengan kunci extension_wfc_AccountingUnitName . |
extension_wfc_execDescription | event.idm.entity.entity.labels.value (kunci: extension_wfc_execDescription) | Dipetakan langsung dari kolom extension_wfc_execDescription dalam log mentah dan ditambahkan sebagai label dengan kunci extension_wfc_execDescription . |
extension_wfc_groupDescription | event.idm.entity.entity.labels.value (kunci: extension_wfc_groupDescription) | Dipetakan langsung dari kolom extension_wfc_groupDescription dalam log mentah dan ditambahkan sebagai label dengan kunci extension_wfc_groupDescription . |
extension_wfc_orgDescription | event.idm.entity.entity.labels.value (kunci: extension_wfc_orgDescription) | Dipetakan langsung dari kolom extension_wfc_orgDescription dalam log mentah dan ditambahkan sebagai label dengan kunci extension_wfc_orgDescription . |
givenName | user.first_name | Dipetakan langsung dari kolom givenName dalam log mentah. |
gopher-devices | event.idm.entity.relations | Setiap perangkat dalam array gopher-devices dipetakan ke entri hubungan terpisah. deviceId dipetakan ke product_object_id , operatingSystem dan operatingSystemVersion digabungkan untuk membentuk platform_version , model dipetakan secara langsung, dan createdDateTime dikonversi menjadi stempel waktu dan dipetakan ke created_timestamp . Hubungan ditetapkan ke OWNS dan arah ditetapkan ke UNIDIRECTIONAL . |
gopher-groups | event.idm.entity.relations | Setiap grup dalam array gopher-groups dipetakan ke entri hubungan terpisah. id dipetakan ke product_object_id , dan displayName dipetakan ke group_display_name . Hubungan ditetapkan ke MEMBER dan arah ditetapkan ke UNIDIRECTIONAL . |
gopher-manager.businessPhones | empmanager.phone_numbers | Dipetakan ke empmanager.phone_numbers jika manager kosong. |
gopher-manager.country | empmanager.personal_address.country_or_region | Dipetakan ke empmanager.personal_address.country_or_region jika manager kosong. Jika gopher-manager.country dan gopher-manager.usageLocation kosong, kolom akan dibiarkan kosong. |
gopher-manager.department | empmanager.department | Dipetakan ke empmanager.department jika manager kosong. |
gopher-manager.displayName | empmanager.user_display_name | Dipetakan ke empmanager.user_display_name jika manager kosong. |
gopher-manager.employeeId | empmanager.employee_id | Dipetakan ke empmanager.employee_id jika manager kosong dan gopher-manager.employeeId tidak kosong. |
gopher-manager.extension_employeeNumber | empmanager.employee_id | Dipetakan ke empmanager.employee_id jika manager dan gopher-manager.employeeId kosong, dan gopher-manager.extension_employeeNumber tidak kosong. |
gopher-manager.givenName | empmanager.first_name | Dipetakan ke empmanager.first_name jika manager kosong. |
gopher-manager.id | empmanager.product_object_id | Dipetakan ke empmanager.product_object_id jika manager kosong. |
gopher-manager.jobTitle | empmanager.title | Dipetakan ke empmanager.title jika manager kosong. |
gopher-manager.mail | empmanager.email_addresses | Dipetakan ke empmanager.email_addresses jika manager kosong. |
gopher-manager.onPremisesImmutableId | user.attribute.labels.value (kunci: gopher-manager onPremisesImmutableId) | Dipetakan sebagai label dengan kunci gopher-manager onPremisesImmutableId . |
gopher-manager.onPremisesSamAccountName | empmanager.userid | Dipetakan ke empmanager.userid jika manager kosong. |
gopher-manager.onPremisesSecurityIdentifier | empmanager.windows_sid | Dipetakan ke empmanager.windows_sid jika manager kosong. |
gopher-manager.proxyAddresses | empmanager.email_addresses, empmanager.group_identifiers | Jika manager kosong, setiap alamat dalam array gopher-manager.proxyAddresses akan dipetakan ke empmanager.email_addresses atau empmanager.group_identifiers berdasarkan apakah alamat tersebut diawali dengan "smtp" atau "SMTP". |
gopher-manager.refreshTokensValidFromDateTime | empmanager.attribute.labels.value (kunci: refreshTokensValidFromDateTime) | Dipetakan sebagai label dengan kunci refreshTokensValidFromDateTime jika manager kosong. |
gopher-manager.streetAddress | empmanager.personal_address.name | Dipetakan ke empmanager.personal_address.name jika manager kosong. |
gopher-manager.surname | empmanager.last_name | Dipetakan ke empmanager.last_name jika manager kosong. |
gopher-manager.usageLocation | user.attribute.labels.value (key: manager_src_usageLocation) | Dipetakan sebagai label dengan kunci manager_src_usageLocation . |
gopher-manager.userType | empmanager.attribute.roles.name | Dipetakan ke empmanager.attribute.roles.name jika manager kosong. |
id | user.product_object_id | Dipetakan langsung dari kolom id dalam log mentah. |
identitas | user.attribute.labels.value (kunci: signInType), user.attribute.labels.value (kunci: userPrincipalName) | signInType dipetakan sebagai label dengan kunci signInType . Jika signInType dan userPrincipalName tidak kosong, keduanya akan digabungkan dan dipetakan sebagai label dengan kunci userPrincipalName . |
jobTitle | user.title | Dipetakan langsung dari kolom jobTitle dalam log mentah. |
user.email_addresses | Dipetakan langsung dari kolom mail dalam log mentah. Jika mail dimulai dengan "svc-", user_role.type akan disetel ke SERVICE_ACCOUNT . |
|
mailNickname | user.attribute.labels.value (kunci: mailNickname) | Dipetakan langsung dari kolom mailNickname dalam log mentah dan ditambahkan sebagai label dengan kunci mailNickname . |
manager.businessPhones | empmanager.phone_numbers | Dipetakan ke empmanager.phone_numbers jika gopher-manager kosong. |
manager.city | empmanager.personal_address.city | Dipetakan ke empmanager.personal_address.city jika gopher-manager kosong. |
manager.companyName | empmanager.company_name | Dipetakan ke empmanager.company_name jika gopher-manager kosong. |
manager.country | empmanager.personal_address.country_or_region | Dipetakan ke empmanager.personal_address.country_or_region jika gopher-manager kosong. Jika manager.country dan manager.usageLocation kosong, kolom akan dibiarkan kosong. |
manager.department | empmanager.department | Dipetakan ke empmanager.department jika gopher-manager kosong. |
manager.displayName | empmanager.user_display_name | Dipetakan ke empmanager.user_display_name jika gopher-manager kosong. |
manager.employeeId | empmanager.employee_id | Dipetakan ke empmanager.employee_id jika gopher-manager kosong dan manager.employeeId tidak kosong. |
manager.extension_employeeNumber | empmanager.employee_id | Dipetakan ke empmanager.employee_id jika gopher-manager dan manager.employeeId kosong, dan manager.extension_employeeNumber tidak kosong. |
manager.givenName | empmanager.first_name | Dipetakan ke empmanager.first_name jika gopher-manager kosong. |
manager.id | empmanager.product_object_id | Dipetakan ke empmanager.product_object_id jika gopher-manager kosong. |
manager.jobTitle | empmanager.title | Dipetakan ke empmanager.title jika gopher-manager kosong. |
manager.mail | empmanager.email_addresses | Dipetakan ke empmanager.email_addresses jika gopher-manager kosong. |
manager.onPremisesSamAccountName | empmanager.userid | Dipetakan ke empmanager.userid jika gopher-manager kosong. |
manager.onPremisesSecurityIdentifier | empmanager.windows_sid | Dipetakan ke empmanager.windows_sid jika gopher-manager kosong. |
manager.proxyAddresses | empmanager.email_addresses, empmanager.group_identifiers | Jika gopher-manager kosong, setiap alamat dalam array manager.proxyAddresses akan dipetakan ke empmanager.email_addresses atau empmanager.group_identifiers berdasarkan apakah alamat tersebut diawali dengan "smtp" atau "SMTP". |
manager.refreshTokensValidFromDateTime | empmanager.attribute.labels.value (kunci: refreshTokensValidFromDateTime) | Dipetakan sebagai label dengan kunci refreshTokensValidFromDateTime jika gopher-manager kosong. |
manager.state | empmanager.personal_address.state | Dipetakan ke empmanager.personal_address.state jika gopher-manager kosong. |
manager.streetAddress | empmanager.personal_address.name | Dipetakan ke empmanager.personal_address.name jika gopher-manager kosong. |
manager.surname | empmanager.last_name | Dipetakan ke empmanager.last_name jika gopher-manager kosong. |
manager.usageLocation | user.attribute.labels.value (key: manager_src_usageLocation), empmanager.personal_address.country_or_region | Dipetakan sebagai label dengan kunci manager_src_usageLocation . Jika manager.country kosong, nilainya juga akan dipetakan ke empmanager.personal_address.country_or_region . |
manager.userType | empmanager.attribute.roles.name | Dipetakan ke empmanager.attribute.roles.name jika gopher-manager kosong. |
onPremisesDistinguishedName | user.attribute.labels.value (kunci: onPremisesDistinguishedName), user.attribute.labels.value (kunci: data onPremisesDistinguishedName-OU) | Nama yang Dibedakan sepenuhnya dipetakan sebagai label dengan kunci onPremisesDistinguishedName . Bagian OU dari nama yang dibedakan diekstrak dan dipetakan sebagai label dengan kunci onPremisesDistinguishedName-OU data . Jika bagian OU berisi "Admin", user_role.type akan ditetapkan ke ADMINISTRATOR . Jika berisi "Akun Layanan", user_role.type akan ditetapkan ke SERVICE_ACCOUNT . |
onPremisesDomainName | user.group_identifiers, user.attribute.labels.value (kunci: onPremisesDomainName) | Dipetakan langsung ke user.group_identifiers dan ditambahkan sebagai label dengan kunci onPremisesDomainName . |
onPremisesImmutableId | user.attribute.labels.value (kunci: onPremisesImmutableId) | Dipetakan langsung dari kolom onPremisesImmutableId dalam log mentah dan ditambahkan sebagai label dengan kunci onPremisesImmutableId . |
onPremisesSamAccountName | user.userid, user.attribute.labels.value (kunci: onPremisesSamAccountName) | Dipetakan ke user.userid jika sAMAccountName kosong. Juga ditambahkan sebagai label dengan kunci onPremisesSamAccountName . |
onPremisesSecurityIdentifier | user.windows_sid | Dipetakan langsung dari kolom onPremisesSecurityIdentifier dalam log mentah. |
proxyAddresses | user.email_addresses, user.group_identifiers | Setiap alamat dalam array proxyAddresses dipetakan ke user.email_addresses atau user.group_identifiers berdasarkan apakah alamat tersebut diawali dengan "smtp" atau "SMTP". Jika alamat dimulai dengan "smtp" atau "SMTP", awalan "smtp:" atau "SMTP:" akan dihapus dan alamat email yang tersisa akan diekstrak dan dipetakan ke user.email_addresses . |
refreshTokensValidFromDateTime | user.attribute.labels.value (kunci: refreshTokensValidFromDateTime) | Dipetakan langsung dari kolom refreshTokensValidFromDateTime dalam log mentah dan ditambahkan sebagai label dengan kunci refreshTokensValidFromDateTime . |
sAMAccountName | user.userid | Dipetakan langsung dari kolom sAMAccountName dalam log mentah. |
state | user.personal_address.state | Dipetakan langsung dari kolom state dalam log mentah. |
streetAddress | user.personal_address.name | Dipetakan langsung dari kolom streetAddress dalam log mentah. |
surname | user.last_name | Dipetakan langsung dari kolom surname dalam log mentah. |
usageLocation | user.personal_address.country_or_region | Jika country kosong, nilai akan dipetakan ke user.personal_address.country_or_region . |
userPrincipalName | user.email_addresses | Dipetakan langsung dari kolom userPrincipalName dalam log mentah. Jika userPrincipalName dimulai dengan "svc-", user_role.type akan disetel ke SERVICE_ACCOUNT . |
userType | user.attribute.roles.name | Dipetakan langsung dari kolom userType dalam log mentah dan ditambahkan ke user.attribute.roles.name . |
Logika Parser | Pemetaan UDM | Logika |
T/A | event.idm.entity.metadata.vendor_name | Tetapkan ke "Microsoft". |
T/A | event.idm.entity.metadata.product_name | Tetapkan ke "Azure Active Directory". |
T/A | event.idm.entity.metadata.entity_type | Tetapkan ke "USER". |
T/A | event.idm.entity.metadata.collected_timestamp | Tetapkan ke kolom create_time dari log mentah. |
accountEnabled | user.user_authentication_status, user.attribute.labels.value (kunci: accountEnabled) | Jika accountEnabled bernilai benar, user.user_authentication_status akan ditetapkan ke "AKTIF" dan label dengan kunci accountEnabled dan nilai "true" akan ditambahkan. Jika tidak, label dengan kunci accountEnabled dan nilai "false" akan ditambahkan. |
empmanager-src.accountEnabled | user.user_authentication_status, user.attribute.labels.value (kunci: accountEnabled) | Jika manager kosong dan empmanager-src.accountEnabled adalah "true", user.user_authentication_status akan disetel ke "ACTIVE" dan label dengan kunci accountEnabled dan nilai "true" akan ditambahkan. Jika tidak, label dengan kunci accountEnabled dan nilai "false" akan ditambahkan. |
onPremisesDistinguishedName | user_role.type | Jika bagian OU dari nama yang dibedakan berisi "Admin", user_role.type akan ditetapkan ke ADMINISTRATOR . Jika berisi "Akun Layanan", user_role.type akan ditetapkan ke SERVICE_ACCOUNT . |
userPrincipalName | user_role.type | Jika userPrincipalName dimulai dengan "svc-", user_role.type akan disetel ke SERVICE_ACCOUNT . |
empmanager-src.onPremisesDistinguishedName | manager_role.type | Jika gopher-manager kosong dan bagian OU dari nama unik pengelola berisi "Pengguna", manager_role.type akan disetel ke ADMINISTRATOR . Jika berisi "Akun Layanan", manager_role.type akan ditetapkan ke SERVICE_ACCOUNT . |
empmanager-src.userPrincipalName | manager_role.type | Jika gopher-manager kosong dan empmanager-src.userPrincipalName dimulai dengan "svc-", manager_role.type akan ditetapkan ke SERVICE_ACCOUNT . |
user_role.type | Jika mail dimulai dengan "svc-", user_role.type akan disetel ke SERVICE_ACCOUNT . |
Perubahan
2024-04-29
- Memetakan "officeLocation" ke "entity.location.name".
- Memetakan "extension_wfc_groupDescription", "extension_wfc_execDescription", "extension_wfc_orgDescription", "extension_wfc_AccountingUnitName", dan "extension_wfc_AccountType" ke "entity.labels".
2024-05-02
Perbaikan bug:
- Menambahkan pemeriksaan untuk kolom "accountEnabled" guna mengurai nilai yang benar ke kolom "entity.user.attribute.labels.value".
2024-03-14
- Memetakan "onPremisesImmutableId" ke "entity.user.attribute.labels".
- Memetakan "gopher-manager.onPremisesImmutableId" ke "entity.user.attribute.labels".
2024-01-12
Perbaikan Bug:
- Mengubah pemetaan "empmanager-src.usageLocation" dari "entity.user.personal_address.country_or_region" menjadi "entity.user.attribute.labels".
2023-11-24
Penyempurnaan
- Memetakan atribut "employeeType" ke "entity.user.attribute.labels".
- Menghapus log JSON yang salah format dengan tag "TAG_MALFORMED_MESSAGE".
2023-10-25
Perbaikan Bug
- Menambahkan pemeriksaan null dan pemeriksaan 'on_error' untuk nilai yang tidak ada.
2023-09-25
Penyempurnaan
- Menambahkan fungsi ganti nama, bukan ganti, untuk memetakan "group.displayName" ke "relation_entity.entity.group.group_display_name".
- Memetakan "country" ke "user.personal_address.country_or_region". Jika "country" tidak ada, pemetaan "usageLocation" ke "user.personal_address.country_or_region".
2023-02-09
Penyempurnaan
- Menambahkan pemeriksaan null sebelum memetakan data untuk kolom "onPremisesDistinguishedName".
- Menambahkan gsub untuk mengekstrak alamat email dari kolom "proxyAddresses".
2023-01-23
- Memetakan "onPremisesExtensionAttributes.extensionAttribute4" ke "entity.entity.user.attribute.labels" jika "onPremisesExtensionAttributes.extensionAttribute4" adalah "Employee".
- Menambahkan gsub untuk "onPremisesDistinguishedName" guna menghapus garis miring terbalik tambahan.
2022-12-15
Perbaikan Bug:
- Memetakan "mailNickname" ke "entity.user.attribute.labels".
- Hanya memetakan "country_n_code" ke "user.manager.personal_address.country_or_region" jika "empmanager-src.usageLocation" null.
2022-09-19
- Perbaikan Bug:
- Memetakan "entity.user.attribute.roles" ke "ADMINISTRATOR" dengan OU yang menyertakan "Admin"
2022-08-11
- Memetakan "accountEnabled" ke "user.attribute.labels"
2022-05-16
- menambahkan pemetaan untuk kolom berikut:
- 'createdDateTime' dipetakan ke 'entity.user.attribute.creation_time'
- 'accountEnabled' dipetakan ke 'entity.user.user_authentication_status'
2022-05-09
- Peningkatan- Kolom yang dipetakan yang diawali dengan extension_GUID_sbuxXXXXXXX ke user.attribute.labels atau manager.attribute.labels, bergantung pada kemunculannya dalam log.
2022-03-24
- Peningkatan-Menambahkan beberapa kolom yang belum ada
- onPremisesSamAccountName, onPremisesDomainName, onPremisesDistinguishedName dipetakan ke entity.user.attribute.labels.
- Untuk signInType, userPrincipalName dipetakan ke entity.user.attribute.labels.