Mengumpulkan log Workday HCM

Didukung di:

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. Proses 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 Administrator Keamanan atau yang setara.

Mengonfigurasi autentikasi Workday API

Membuat Pengguna Sistem Integrasi (ISU)

  1. Login ke Workday dengan hak istimewa administratif.
  2. Di kotak penelusuran, ketik Create Integration System User, lalu pilih tugas.
  3. Masukkan Nama pengguna (misalnya, ISU_SecOps_HCM).
  4. Tetapkan Sandi.
  5. Setel Session Timeout Minutes ke 0 untuk mencegah ISU kehabisan waktu.
  6. Aktifkan Jangan Izinkan Sesi UI untuk meningkatkan keamanan dengan membatasi login UI.
  7. Buka tugas Pertahankan Aturan Sandi.
  8. Tambahkan pengguna sistem integrasi ke kolom Pengguna Sistem yang dikecualikan dari masa berlaku sandi.

Membuat grup keamanan integrasi

  1. Di kotak penelusuran, ketik Create Security Group, lalu pilih tugas.
  2. Cari kolom Type of Tenanted Security Group, lalu pilih Integration System Security Group (Unconstrained).
  3. Berikan Name untuk grup keamanan (misalnya, ISG_SecOps_HCM).
  4. Klik Oke.
  5. Klik Edit untuk grup keamanan yang baru dibuat.
  6. Tetapkan Pengguna Sistem Integrasi dari langkah sebelumnya ke grup keamanan.
  7. 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 kepada grup keamanan integrasi.

  1. Di kotak penelusuran, ketik Maintain Permissions for Security Group, lalu pilih tugas.
  2. Pilih grup keamanan yang Anda buat (misalnya, ISG_SecOps_HCM) dari daftar Source Security Group.
  3. Klik Oke.
  4. Buka Izin Kebijakan Keamanan Domain.
  5. Tambahkan akses GET untuk setiap domain berikut:

    Endpoint API Kebijakan Keamanan Domain yang Diperlukan
    /workers — Daftar pekerja, profil, dan staf saat ini Worker Data: Public Worker Reports, Worker Data: Current Staffing Information, Person Data: Work Contact Information
    /workers/{id}/timeOffEntries — Saldo waktu istirahat Worker Data: Time Off (Time Off Balances), Worker Data: Time Off (Time Off Balances Manager View)
    /workers/{id}/history — Histori penempatan pekerja Worker Data: Current Staffing Information
    /supervisoryOrganizations — Struktur organisasi Worker Data: Organization Information
  6. Klik Oke.

  7. Klik Done untuk menyimpan perubahan.

Mengaktifkan perubahan kebijakan keamanan

  1. Di kotak penelusuran, ketik Activate Pending Security Policy Changes, lalu pilih tugas.
  2. Masukkan alasan perubahan di kolom komentar (misalnya, Granting API access for Google SecOps HCM integration).
  3. Klik Oke.
  4. Pilih Konfirmasi, lalu klik Oke.

Mendaftarkan klien API untuk integrasi

  1. Di kotak penelusuran, ketik Register API Client for Integrations, lalu pilih.
  2. Klik Create.
  3. Berikan detail konfigurasi berikut:

    • Nama Klien: Masukkan nama (misalnya, Google SecOps HCM Client).
    • Pengguna Sistem: Pilih Pengguna Sistem Integrasi yang Anda buat (misalnya, ISU_SecOps_HCM).
    • Cakupan: Pilih cakupan berikut:

      Cakupan Diperlukan untuk
      Penempatan staf Endpoint /workers dan /workers/{id}/history
      Informasi Kontak Kolom email dan telepon kantor yang ditampilkan oleh /workers (digunakan untuk korelasi UDM)
      Cuti dan Istirahat /workers/{id}/timeOffEntries endpoint
      Organisasi dan Peran /supervisoryOrganizations endpoint
      Tenant Tidak Dapat Dikonfigurasi Klien API OAuth 2.0 apa pun (integrasi tingkat sistem dan rotasi token)
  4. Klik Simpan.

  5. Klik Oke.

  6. Segera salin dan simpan ID Klien dan Rahasia Klien.

Membuat token refresh OAuth 2.0

  1. Di kotak penelusuran, ketik Manage Refresh Tokens for Integrations, lalu pilih.
  2. Klik Generate New Refresh Token.
  3. Di kolom Workday Account, telusuri dan pilih Integration System User (misalnya, ISU_SecOps_HCM).
  4. Pilih klien API yang Anda buat, lalu klik OK.
  5. Salin dan simpan Refresh Token.

Mendapatkan URL endpoint API

  1. Di kotak penelusuran, ketik View API Clients dan pilih.
  2. Di bagian Klien API untuk Integrasi, temukan klien yang Anda buat (misalnya, Google SecOps HCM Client).
  3. Salin dan simpan detail berikut:

    • Endpoint Token: URL untuk mendapatkan token akses (misalnya, https://wd2-impl-services1.workday.com/ccx/oauth2/YOUR_TENANT/token).
    • Endpoint REST API Workday: URL dasar untuk panggilan API (misalnya, https://wd2-impl-services1.workday.com/ccx/api/v1/YOUR_TENANT).

Membuat token akses OAuth

Gunakan curl atau klien HTTP serupa untuk mengirim permintaan POST ke Endpoint Token:

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"

Perintah 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 utama. 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 ada endpoint yang menampilkan 403, lihat bagian Pemecahan masalah di bawah.

Mengonfigurasi feed di Google SecOps untuk menyerap data HCM Workday

Menyiapkan feed

  1. Buka Setelan SIEM > Feed.
  2. Klik Tambahkan Feed Baru.
  3. Di halaman berikutnya, klik Konfigurasi satu feed.
  4. Di kolom Nama feed, masukkan nama untuk feed (misalnya, Workday HCM).
  5. Pilih Third Party API sebagai Source type.
  6. Pilih Workday sebagai Jenis log.
  7. Klik Berikutnya.

Mengonfigurasi parameter feed

Tentukan nilai untuk parameter input berikut:

  • Nama Host API: Nama domain yang sepenuhnya memenuhi syarat untuk endpoint API Workday REST Anda (misalnya, wd2-impl-services1.workday.com).

  • Tenant: Elemen jalur terakhir dari endpoint Workday REST API yang mengidentifikasi instance Workday Anda.

  • Token akses: Token akses OAuth yang dibuat di bagian sebelumnya.

Opsi Lanjutan:

  • Namespace aset: Namespace aset.
  • Label penyerapan: Label yang akan diterapkan ke peristiwa dari feed ini.
  1. Klik Berikutnya.
  2. Tinjau konfigurasi feed baru Anda di layar Selesaikan, lalu klik Kirim.

Pemecahan masalah

403 Forbidden di endpoint tertentu

Jika feed melaporkan error atau perintah curl verifikasi menampilkan 403 untuk endpoint tertentu, Pengguna Sistem Integrasi tidak memiliki izin.

Endpoint yang gagal Perbaiki
/workers/{id}/timeOffEntries Menambahkan 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 Organisasi dan Peran ke klien API.

Setelah melakukan perubahan izin:

  1. Jalankan Activate Pending Security Policy Changes di Workday.
  2. Jika Anda menambahkan cakupan baru ke klien API, buat token refresh baru melalui Kelola Token Refresh untuk Integrasi, lalu buat token akses baru.
  3. Perbarui konfigurasi feed dengan token akses baru jika berubah.

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 Rahasia Klien sudah benar.
  • Token refresh tidak valid: Token refresh mungkin telah dicabut. Buat yang baru melalui Kelola Token Refresh untuk Integrasi.

Tabel pemetaan UDM

Kolom log Pemetaan UDM Logika
entity_host_name entity.asset.hostname Dipetakan secara langsung
location.descriptor entity.location.city Dipetakan secara langsung
AU_EFFECTIVE_DATE entity.resource.attribute.labels.value Dipetakan secara langsung
COMPANY_EFFECTIVE_DATE entity.resource.attribute.labels.value Dipetakan secara langsung
ORIG_HIRE_DT entity.resource.attribute.labels.value Dipetakan secara langsung
STATUS_EFFECTIVE_DATE entity.resource.attribute.labels.value Dipetakan secara langsung
href entity.url Dipetakan secara langsung
CONT_START_DTE entity.user.attribute.labels.value Dipetakan secara langsung
EMPL_TYPE entity.user.attribute.labels.value Dipetakan secara langsung
EXEC_CD entity.user.attribute.labels.value Dipetakan secara langsung
EXEC_DESCR entity.user.attribute.labels.value Dipetakan secara langsung
HR_Status entity.user.attribute.labels.value Dipetakan secara langsung
Is_Active entity.user.attribute.labels.value Dipetakan secara langsung
Is_Manager entity.user.attribute.labels.value Dipetakan secara langsung
JOB_CODE entity.user.attribute.labels.value Dipetakan secara langsung
ORG_CD entity.user.attribute.labels.value Dipetakan secara langsung
ORG_Container entity.user.attribute.labels.value Dipetakan secara langsung
ORG_Container_Name entity.user.attribute.labels.value Dipetakan secara langsung
PER_Status entity.user.attribute.labels.value Dipetakan secara langsung
POSITION_NBR entity.user.attribute.labels.value Dipetakan secara langsung
PS_ELID entity.user.attribute.labels.value Dipetakan secara langsung
REG_TEMP entity.user.attribute.labels.value Dipetakan secara langsung
WB_LOGON_ID entity.user.attribute.labels.value Dipetakan secara langsung
ORG_DESCR entity.user.department Digabung
primarySupervisoryOrganization.descriptor entity.user.department Digabung
Email entity.user.email_addresses Digabung
Work_Email entity.user.email_addresses Digabung
primaryWorkEmail entity.user.email_addresses Digabung
EMPLID entity.user.employee_id Dipetakan secara langsung
Employee_ID entity.user.employee_id Dipetakan secara langsung
First_Name entity.user.first_name Dipetakan secara langsung
Legal_Name_First_Name entity.user.first_name Dipetakan secara langsung
HIRE_DATE entity.user.hire_date Diurai sebagai RFC 3339
Hire_Date entity.user.hire_date Diurai sebagai RFC 3339
Last_Name entity.user.last_name Dipetakan secara langsung
Legal_Name_Last_Name entity.user.last_name Dipetakan secara langsung
gopher-supervisor.primaryWorkEmail entity.user.managers.email_addresses Digabung
Reports_To_EMPLID entity.user.managers.employee_id Dipetakan secara langsung
gopher-supervisor.id entity.user.managers.product_object_id Diganti nama/dipetakan
Reports_To_Name entity.user.managers.user_display_name Dipetakan secara langsung
gopher-supervisor.descriptor entity.user.managers.user_display_name Diganti nama/dipetakan
primaryWorkPhone entity.user.phone_numbers Digabung
Termination_Date entity.user.termination_date Diurai sebagai RFC 3339
timeoff.descriptor entity.user.time_off.description Dipetakan secara langsung
timeoff.date entity.user.time_off.interval.start_time Diurai sebagai RFC 3339
HR_JOB_TITLE entity.user.title Dipetakan secara langsung
Job_Profile entity.user.title Dipetakan secara langsung
businessTitle entity.user.title Dipetakan secara langsung
Full_Name entity.user.user_display_name Dipetakan secara langsung
descriptor entity.user.user_display_name Dipetakan secara langsung
udm_metadata metadata Diganti nama/dipetakan
metadata_entity_type metadata.entity_type Dipetakan secara langsung
actual_completed_date_and_time metadata.event_timestamp Diurai sebagai MM/dd/yyyy HH:mm:ss a
body.time metadata.event_timestamp Diurai sebagai UNIX_MS
requestTime metadata.event_timestamp Diurai sebagai RFC 3339
timestamp metadata.event_timestamp Diurai sebagai RFC 3339
EMPLID metadata.product_entity_id Dipetakan secara langsung
Employee_ID metadata.product_entity_id Dipetakan secara langsung
id metadata.product_entity_id Dipetakan secara langsung
Source_Name metadata.product_name Dipetakan secara langsung
userAgent network.http.parsed_user_agent Diganti nama/dipetakan
userAgent network.http.user_agent Dipetakan secara langsung
sessionId network.session_id Dipetakan secara langsung
ipAddress principal.ip Digabung
taskId principal.process.pid Dipetakan secara langsung
activityAction_label principal.resource.attribute.labels Digabung
body.event.Submitted_By principal.user.userid Dipetakan secara langsung
body.event.Response_Message security_result.action_details Dipetakan secara langsung
body.event.Messages security_result.description Dipetakan secara langsung
actual_start_date_and_time_label security_result.detection_fields Digabung
background_process_is_running_label security_result.detection_fields Digabung
by_person_label security_result.detection_fields Digabung
created_from_trigger_label security_result.detection_fields Digabung
items_processed_label security_result.detection_fields Digabung
percent_complete_label security_result.detection_fields Digabung
processing_time_label security_result.detection_fields Digabung
scheduled_start_date_and_time_label security_result.detection_fields Digabung
sent_on_label security_result.detection_fields Digabung
total_duration_label security_result.detection_fields Digabung
body.event.Integration_Event_Status security_result.summary Dipetakan secara langsung
body.event.Integration_System target.application Dipetakan secara langsung
target_data.id target.resource.product_object_id Dipetakan secara langsung
deviceType target.resource.resource_subtype Dipetakan secara langsung
deviceType target.resource.type Dipetakan: (?i)(Desktop/Laptop/Mobile)DEVICE
user_display_name target.user.user_display_name Dipetakan secara langsung
systemAccount target.user.userid Dipetakan secara langsung
T/A entity.resource.attribute.labels.key Konstanta: COMPANY_EFFECTIVE_DATE
T/A entity.user.attribute.labels.key Konstanta: ORG_Container
T/A metadata.product_name Konstanta: HCM
T/A metadata.vendor_name Konstanta: Workday
T/A target.resource.type Konstanta: DEVICE

Log Perubahan

Melihat Log Perubahan untuk parser ini

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