Mengumpulkan log Workday HCM
Dokumen ini menjelaskan cara menyerap log Workday HCM ke Google Security Operations dengan menyiapkan feed menggunakan Third Party API.
Parser mengekstrak data pengguna Workday HCM dari log berformat JSON. Parser ini menangani berbagai transformasi data, termasuk mengganti nama kolom, menggabungkan objek bertingkat, mengurai tanggal, dan mengisi kolom UDM untuk atribut pengguna, detail pekerjaan, dan struktur organisasi.
Sebelum memulai
Pastikan Anda memiliki prasyarat berikut:
- Instance Google SecOps
- Akses istimewa ke Workday dengan izin Security Administrator atau yang setara
Mengonfigurasi autentikasi Workday API
Membuat Integration System User (ISU)
- Login ke Workday dengan hak administratif.
- Di kotak penelusuran, ketik Create Integration System User , lalu pilih tugas.
- Masukkan Username (misalnya,
ISU_SecOps_HCM). - Tetapkan Password.
- Tetapkan Session Timeout Minutes ke
0untuk mencegah ISU mengalami waktu tunggu habis. - Aktifkan Do Not Allow UI Sessions untuk meningkatkan keamanan dengan membatasi login UI.
- Buka tugas Maintain Password Rules.
- Tambahkan pengguna sistem integrasi ke kolom System Users exempt from password expiration.
Membuat grup keamanan integrasi
- Di kotak penelusuran, ketik Create Security Group , lalu pilih tugas.
- Temukan kolom Type of Tenanted Security Group, lalu pilih Integration System Security Group (Unconstrained).
- Berikan Name untuk grup keamanan (misalnya,
ISG_SecOps_HCM). - Klik OK.
- Klik Edit untuk grup keamanan yang baru dibuat.
- Tetapkan Integration System User dari langkah sebelumnya ke grup keamanan.
- Klik Done.
Memberikan akses domain ke grup keamanan
Feed Google SecOps mengambil data dari empat endpoint Workday REST API. Setiap endpoint memerlukan izin Kebijakan Keamanan Domain tertentu yang diberikan ke grup keamanan integrasi.
- Di kotak penelusuran, ketik Maintain Permissions for Security Group , lalu pilih tugas.
- Pilih grup keamanan yang Anda buat (misalnya,
ISG_SecOps_HCM) dari daftar Source Security Group. - Klik OK.
- Buka Domain Security Policy Permissions.
Tambahkan akses GET untuk setiap domain berikut:
Endpoint API Kebijakan Keamanan Domain yang Diperlukan /workers— Daftar dan profil pekerjaWorker Data: Public Worker Reports/workers/{id}/timeOffEntries— Saldo cutiWorker Data: Time Off (Time Off Balances),Worker Data: Time Off (Time Off Balances Manager View)/workers/{id}/history— Riwayat kepegawaian pekerjaWorker Data: Historical Staffing Information/supervisoryOrganizations— Struktur organisasiManage: Supervisory OrganizationatauView: Supervisory OrganizationKlik OK.
Klik Done untuk menyimpan perubahan.
Mengaktifkan perubahan kebijakan keamanan
- Di kotak penelusuran, ketik Activate Pending Security Policy Changes , lalu pilih tugas.
- Masukkan alasan perubahan di kolom komentar (misalnya,
Granting API access for Google SecOps HCM integration). - Klik OK.
- Pilih Confirm, lalu klik OK.
Mendaftarkan klien API untuk integrasi
- Di kotak penelusuran, ketik Register API Client for Integrations , lalu pilih.
- Klik Create.
Berikan detail konfigurasi berikut:
- Nama Klien: Masukkan nama (misalnya,
Google SecOps HCM Client). - System User: Pilih Integration System User yang Anda buat (misalnya,
ISU_SecOps_HCM). Cakupan: Pilih cakupan berikut:
Cakupan Diperlukan untuk Staffing Endpoint /workersdan/workers/{id}/historyTime Off and Leave Endpoint /workers/{id}/timeOffEntriesOrganizations and Roles Endpoint /supervisoryOrganizations
- Nama Klien: Masukkan nama (misalnya,
Klik Save.
Klik OK.
Salin dan simpan Client ID dan Client Secret segera.
Membuat token refresh OAuth 2.0
- Di kotak penelusuran, ketik Manage Refresh Tokens for Integrations , lalu pilih.
- Klik Generate New Refresh Token.
- Di kolom Workday Account, cari dan pilih Integration System User (misalnya,
ISU_SecOps_HCM). - Pilih klien API yang Anda buat, lalu klik OK.
- Salin dan simpan Refresh Token.
Mendapatkan URL endpoint API
- Di kotak penelusuran, ketik View API Clients , lalu pilih.
- Di bagian API Clients for Integrations, temukan klien yang Anda buat (misalnya,
Google SecOps HCM Client). Salin dan simpan detail berikut:
- Token Endpoint: URL untuk mendapatkan token akses (misalnya,
https://wd2-impl-services1.workday.com/ccx/oauth2/YOUR_TENANT/token). - Workday REST API Endpoint: URL dasar untuk panggilan API (misalnya,
https://wd2-impl-services1.workday.com/ccx/api/v1/YOUR_TENANT).
- Token Endpoint: URL untuk mendapatkan token akses (misalnya,
Membuat token akses OAuth
Gunakan
curlatau klien HTTP serupa untuk mengirim permintaan POST ke Token Endpoint:curl -X POST "https://HOSTNAME/ccx/oauth2/TENANT/token" \ -d "grant_type=refresh_token" \ -d "client_id=YOUR_CLIENT_ID" \ -d "client_secret=YOUR_CLIENT_SECRET" \ -d "refresh_token=YOUR_REFRESH_TOKEN"
Tindakan ini akan menampilkan token akses (misalnya, "access_token": "abcd1234"). Salin dan simpan token akses.
Memverifikasi akses API
Sebelum mengonfigurasi feed, pastikan ISU memiliki izin yang diperlukan untuk endpoint kunci. Ganti variabel dengan nilai sebenarnya:
TOKEN="your-access-token" HOST="your-workday-host" TENANT="your-tenant" # Test 1: Workers (should return worker list) curl -s -o /dev/null -w "%{http_code}" \ -H "Authorization: Bearer $TOKEN" \ "https://$HOST/ccx/api/v1/$TENANT/workers?limit=1" # Test 2: Time off entries (replace WORKER_ID with an ID from Test 1) curl -s -o /dev/null -w "%{http_code}" \ -H "Authorization: Bearer $TOKEN" \ "https://$HOST/ccx/api/v1/$TENANT/workers/WORKER_ID/timeOffEntries" # Test 3: Worker history (replace WORKER_ID with an ID from Test 1) curl -s -o /dev/null -w "%{http_code}" \ -H "Authorization: Bearer $TOKEN" \ "https://$HOST/ccx/api/v1/$TENANT/workers/WORKER_ID/history" # Test 4: Supervisory organizations curl -s -o /dev/null -w "%{http_code}" \ -H "Authorization: Bearer $TOKEN" \ "https://$HOST/ccx/api/v1/$TENANT/supervisoryOrganizations"
Setiap pengujian harus menampilkan status HTTP 200. Jika endpoint menampilkan 403, lihat bagian Pemecahan masalah.
Mengonfigurasi feed di Google SecOps untuk menyerap data Workday HCM
Menyiapkan feed
- Buka SIEM Settings > Feeds.
- Klik Add New Feed.
- Di halaman berikutnya, klik Configure a single feed.
- Di kolom Feed name, masukkan nama untuk feed (misalnya,
Workday HCM). - Pilih Third Party API sebagai Source type.
- Pilih Workday sebagai Log type.
- Klik Next.
Mengonfigurasi parameter feed
Tentukan nilai untuk parameter input berikut:
Nama Host API: Nama domain yang sepenuhnya memenuhi syarat dari endpoint Workday REST API Anda (misalnya,
wd2-impl-services1.workday.com).Tenant: Elemen jalur terakhir dari endpoint Workday REST API Anda yang mengidentifikasi instance Workday Anda.
Access token: Token akses OAuth yang dibuat di bagian sebelumnya.
Opsi Lanjutan:
- Asset namespace: Namespace aset.
- Ingestion labels: Label yang akan diterapkan ke peristiwa dari feed ini.
Klik Next.
Tinjau konfigurasi feed baru Anda di layar Finalize, lalu klik Submit.
Pemecahan masalah
403 Dilarang di endpoint tertentu
Jika feed melaporkan error atau perintah curl verifikasi menampilkan 403 untuk endpoint tertentu, Integration System User tidak memiliki izin.
| Endpoint yang gagal | Perbaiki |
|---|---|
/workers/{id}/timeOffEntries |
Tambahkan akses GET untuk domain Worker Data: Time Off (Time Off Balances) dan Worker Data: Time Off (Time Off Balances Manager View). Tambahkan cakupan Time Off and Leave ke klien API. |
/workers/{id}/history |
Tambahkan akses GET untuk domain Worker Data: Historical Staffing Information. Pastikan cakupan Staffing ditetapkan ke klien API. |
/supervisoryOrganizations |
Tambahkan akses GET untuk domain Manage: Supervisory Organization atau View: Supervisory Organization. Tambahkan cakupan Organizations and Roles ke klien API. |
Setelah melakukan perubahan izin:
- Jalankan Activate Pending Security Policy Changes di Workday.
- Jika Anda menambahkan cakupan baru ke klien API, buat token refresh baru melalui Manage Refresh Tokens for Integrations , lalu buat token akses baru.
- Perbarui konfigurasi feed dengan token akses baru jika diubah.
Error autentikasi
- 401 Tidak Sah: Masa berlaku token akses telah berakhir. Buat token baru menggunakan token refresh dan perbarui feed.
- Klien tidak valid: Pastikan Client ID dan Client Secret sudah benar.
- Token refresh tidak valid: Token refresh mungkin telah dicabut. Buat token baru melalui Manage Refresh Tokens for Integrations.
Tabel pemetaan UDM
| Kolom Log | Pemetaan UDM | Logika |
|---|---|---|
@timestamp |
metadata.event_timestamp.seconds |
Diurai sebagai stempel waktu dalam detik sejak epoch |
businessTitle |
entity.entity.user.title |
Dipetakan secara langsung |
descriptor |
entity.entity.user.user_display_name |
Dipetakan secara langsung |
Employee_ID |
entity.entity.user.employee_id |
Dipetakan secara langsung |
Employee_ID |
entity.metadata.product_entity_id |
Dipetakan jika id tidak ada |
gopher-supervisor.descriptor |
entity.entity.user.managers.user_display_name |
Dipetakan secara langsung |
gopher-supervisor.id |
entity.entity.user.managers.product_object_id |
Dipetakan secara langsung |
gopher-supervisor.primaryWorkEmail |
entity.entity.user.managers.email_addresses |
Dipetakan secara langsung |
gopher-time-off.date |
entity.entity.user.time_off.interval.start_time |
Diurai sebagai tanggal |
gopher-time-off.descriptor |
entity.entity.user.time_off.description |
Dipetakan secara langsung |
Hire_Date |
entity.entity.user.hire_date |
Diurai sebagai tanggal |
id |
entity.metadata.product_entity_id |
Dipetakan secara langsung jika ada |
Job_Profile |
entity.entity.user.title |
Dipetakan jika businessTitle tidak ada |
Legal_Name_First_Name |
entity.entity.user.first_name |
Dipetakan secara langsung |
Legal_Name_Last_Name |
entity.entity.user.last_name |
Dipetakan secara langsung |
location.descriptor |
entity.entity.location.city |
Dipetakan secara langsung |
primarySupervisoryOrganization.descriptor |
entity.entity.user.department |
Dipetakan secara langsung |
primaryWorkEmail |
entity.entity.user.email_addresses |
Dipetakan secara langsung |
primaryWorkPhone |
entity.entity.user.phone_numbers |
Dipetakan secara langsung |
Termination_Date |
entity.entity.user.termination_date |
Diurai sebagai tanggal |
Work_Email |
entity.entity.user.email_addresses |
Dipetakan jika primaryWorkEmail tidak ada |
collection_time |
metadata.event_timestamp.collected_timestamp |
Dipetakan secara langsung |
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.