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. 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)

  1. Login ke Workday dengan hak administratif.
  2. Di kotak penelusuran, ketik Create Integration System User , lalu pilih tugas.
  3. Masukkan Username (misalnya, ISU_SecOps_HCM).
  4. Tetapkan Password.
  5. Tetapkan Session Timeout Minutes ke 0 untuk mencegah ISU mengalami waktu tunggu habis.
  6. Aktifkan Do Not Allow UI Sessions untuk meningkatkan keamanan dengan membatasi login UI.
  7. Buka tugas Maintain Password Rules.
  8. Tambahkan pengguna sistem integrasi ke kolom System Users exempt from password expiration.

Membuat grup keamanan integrasi

  1. Di kotak penelusuran, ketik Create Security Group , lalu pilih tugas.
  2. Temukan 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 OK.
  5. Klik Edit untuk grup keamanan yang baru dibuat.
  6. Tetapkan Integration System User 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 ke 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 OK.
  4. Buka Domain Security Policy Permissions.
  5. Tambahkan akses GET untuk setiap domain berikut:

    Endpoint API Kebijakan Keamanan Domain yang Diperlukan
    /workers — Daftar dan profil pekerja Worker Data: Public Worker Reports
    /workers/{id}/timeOffEntries — Saldo cuti Worker Data: Time Off (Time Off Balances), Worker Data: Time Off (Time Off Balances Manager View)
    /workers/{id}/history — Riwayat kepegawaian pekerja Worker Data: Historical Staffing Information
    /supervisoryOrganizations — Struktur organisasi Manage: Supervisory Organization atau View: Supervisory Organization
  6. Klik OK.

  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 OK.
  4. Pilih Confirm, lalu klik OK.

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).
    • System User: Pilih Integration System User yang Anda buat (misalnya, ISU_SecOps_HCM).
    • Cakupan: Pilih cakupan berikut:

      Cakupan Diperlukan untuk
      Staffing Endpoint /workers dan /workers/{id}/history
      Time Off and Leave Endpoint /workers/{id}/timeOffEntries
      Organizations and Roles Endpoint /supervisoryOrganizations
  4. Klik Save.

  5. Klik OK.

  6. Salin dan simpan Client ID dan Client Secret segera.

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, cari 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 , lalu pilih.
  2. Di bagian API Clients for Integrations, temukan klien yang Anda buat (misalnya, Google SecOps HCM Client).
  3. 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).

Membuat token akses OAuth

  • Gunakan curl atau 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

  1. Buka SIEM Settings > Feeds.
  2. Klik Add New Feed.
  3. Di halaman berikutnya, klik Configure a single feed.
  4. Di kolom Feed name, masukkan nama untuk feed (misalnya, Workday HCM).
  5. Pilih Third Party API sebagai Source type.
  6. Pilih Workday sebagai Log type.
  7. Klik Next.

Mengonfigurasi parameter feed

  1. 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.
  2. Klik Next.

  3. 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:

  1. Jalankan Activate Pending Security Policy Changes di Workday.
  2. Jika Anda menambahkan cakupan baru ke klien API, buat token refresh baru melalui Manage Refresh Tokens for Integrations , lalu buat token akses baru.
  3. 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.