Mengumpulkan log Microsoft Network Policy Server (NPS)

Didukung di:

Dokumen ini menjelaskan cara menyerap log Microsoft Network Policy Server (NPS) ke Google Security Operations menggunakan Google Cloud Storage V2.

Microsoft Network Policy Server (NPS) adalah peran Windows Server yang menyediakan otentikasi, otorisasi, dan akuntansi RADIUS. NPS memungkinkan pengelolaan terpusat kebijakan akses jaringan untuk perangkat nirkabel, koneksi VPN, switch, dan akses jarak jauh. NPS tidak memiliki kemampuan atau API ekspor cloud native, sehingga log harus dikumpulkan menggunakan penerusan pihak ketiga.

Sebelum memulai

Pastikan Anda memiliki prasyarat berikut:

  • Instance Google SecOps
  • Project GCP dengan Cloud Storage API diaktifkan
  • Izin untuk membuat dan mengelola bucket GCS
  • Izin untuk mengelola kebijakan IAM di bucket GCS
  • Akses istimewa ke Windows Server yang menjalankan NPS
  • Akses administrator untuk menginstal NXLog di server NPS

Mengonfigurasi logging NPS

Mengaktifkan log akuntansi NPS

  1. Di Windows Server yang menjalankan NPS, buka Server Manager.
  2. Buka Tools > Network Policy Server.
  3. Di konsol NPS, luaskan Akuntansi di navigasi kiri.
  4. Klik kanan Akuntansi, lalu pilih Konfigurasi Akuntansi.
  5. Di wizard Accounting Configuration, klik Next.
  6. Pilih Log ke file teks di komputer lokal, lalu klik Berikutnya.
  7. Di halaman Configure Log File Properties, konfigurasikan hal berikut:
    • Direktori: Biarkan sebagai default (%systemroot%\System32\LogFiles) atau tentukan jalur kustom
    • Format: Pilih DTS Compliant (direkomendasikan oleh Microsoft untuk format XML terstruktur)
    • Buat file log baru: Pilih Harian atau Mingguan berdasarkan volume log Anda
  8. Klik Berikutnya.
  9. Tinjau ringkasan, lalu klik Selesai.

Mengaktifkan logging audit NPS

  1. Buka Command Prompt sebagai Administrator di server NPS.
  2. Jalankan perintah berikut untuk mengaktifkan logging audit NPS:

    auditpol /set /subcategory:"Network Policy Server" /success:enable /failure:enable
    
  3. Pastikan kebijakan audit diaktifkan:

    auditpol /get /subcategory:"Network Policy Server"
    

Menginstal dan mengonfigurasi NXLog di server NPS

Mendownload dan menginstal NXLog

  1. Di server NPS, download NXLog Enterprise Edition dari situs NXLog.
  2. Jalankan penginstal dan ikuti wizard penginstalan.
  3. Terima jalur penginstalan default (C:\Program Files\nxlog) atau tentukan jalur kustom.
  4. Selesaikan penginstalan.

Mengonfigurasi NXLog untuk mengumpulkan log NPS

  1. Di server NPS, buka direktori konfigurasi NXLog:
    • Jalur default: C:\Program Files\nxlog\conf
  2. Buka file nxlog.conf di editor teks (misalnya, Notepad) dengan hak istimewa Administrator.
  3. Ganti seluruh konten nxlog.conf dengan konfigurasi berikut:

    ## NXLog configuration for Microsoft NPS log collection
    ## Collects NPS logs and forwards to Google Cloud Storage
    
    define ROOT C:\Program Files\nxlog
    define LOGDIR C:\Windows\System32\LogFiles
    define GCS_BUCKET your-gcs-bucket-name
    define GCS_PREFIX nps-logs
    define GCS_CREDENTIALS C:\nxlog-credentials\gcs-service-account.json
    
    Moduledir %ROOT%\modules
    CacheDir %ROOT%\data
    Pidfile %ROOT%\data\nxlog.pid
    SpoolDir %ROOT%\data
    LogFile %ROOT%\data\nxlog.log
    LogLevel INFO
    
    <Extension nps>
        Module xm_nps
    </Extension>
    
    <Extension json>
        Module xm_json
    </Extension>
    
    <Input nps_logs>
        Module im_file
        File '%LOGDIR%\IN*.log'
        SavePos TRUE
        ReadFromLast TRUE
        Recursive FALSE
        InputType nps
        <Exec>
            # Parse NPS logs (DTS Compliant format)
            # Add hostname for tracking
            $Hostname = hostname();
    
            # Convert to JSON
            to_json();
        </Exec>
    </Input>
    
    <Output gcs>
        Module om_file
        File '%ROOT%\data\gcs-upload\nps-' + strftime(now(), '%Y%m%d-%H%M%S') + '.json'
        <Exec>
            # Rotate output file every hour
            if (file_size(file_name()) > 100000000) file_cycle();
        </Exec>
    </Output>
    
    <Route nps_to_gcs>
        Path nps_logs => gcs
    </Route>
    
  4. Dalam file konfigurasi, ganti placeholder berikut:

    • your-gcs-bucket-name: Nama bucket GCS Anda (dibuat di bagian berikutnya)
    • Pastikan jalur LOGDIR cocok dengan lokasi file log NPS Anda
  5. Simpan file.

Buat bucket Google Cloud Storage

  1. Buka Konsol Google Cloud.
  2. Pilih project Anda atau buat project baru.
  3. Di menu navigasi, buka Cloud Storage > Buckets.
  4. Klik Create bucket.
  5. Berikan detail konfigurasi berikut:

    Setelan Nilai
    Beri nama bucket Anda Masukkan nama yang unik secara global (misalnya, nps-logs-chronicle)
    Location type Pilih berdasarkan kebutuhan Anda (Region, Dual-region, Multi-region)
    Location Pilih lokasi (misalnya, us-central1)
    Kelas penyimpanan Standar (direkomendasikan untuk log yang sering diakses)
    Kontrol akses Seragam (direkomendasikan)
    Alat perlindungan Opsional: Aktifkan pembuatan versi objek atau kebijakan retensi
  6. Klik Create.

Buat akun layanan GCS untuk NXLog

Membuat akun layanan

  1. Di Konsol GCP, buka IAM & Admin > Service Accounts.
  2. Klik Create Service Account.
  3. Berikan detail konfigurasi berikut:
    • Nama akun layanan: Masukkan nxlog-nps-uploader (misalnya)
    • Deskripsi akun layanan: Masukkan Service account for NXLog to upload NPS logs to GCS
  4. Klik Create and Continue.
  5. Di bagian Grant this service account access to project, tambahkan peran berikut:
    1. Klik Pilih peran.
    2. Telusuri dan pilih Storage Object Creator.
  6. Klik Lanjutkan.
  7. Klik Done.

Mendownload kunci akun layanan

  1. Di halaman Service Accounts, klik akun layanan yang baru saja Anda buat (nxlog-nps-uploader).
  2. Buka tab Kunci.
  3. Klik Add Key > Create new key.
  4. Pilih JSON sebagai jenis kunci.
  5. Klik Create.
  6. File kunci JSON akan didownload ke komputer Anda.
  7. Salin file kunci JSON ke server NPS di lokasi berikut:
    • C:\nxlog-credentials\gcs-service-account.json
  8. Buat direktori C:\nxlog-credentials jika belum ada.

Mengonfigurasi upload GCS otomatis

Buat skrip upload PowerShell

  1. Di server NPS, buat direktori baru:
    • C:\nxlog-scripts
  2. Buat file baru bernama upload-to-gcs.ps1 di direktori.
  3. Buka file di editor teks dan tempel skrip PowerShell berikut:

    # PowerShell script to upload NXLog output files to Google Cloud Storage
    # Uses gsutil command-line tool
    
    $ErrorActionPreference = "Stop"
    
    # Configuration
    $LocalLogDir = "C:\Program Files\nxlog\data\gcs-upload"
    $GcsBucket = "gs://nps-logs-chronicle/nps-logs/"
    $ArchiveDir = "C:\Program Files\nxlog\data\archive"
    $LogFile = "C:\nxlog-scripts\upload.log"
    
    # Function to write log messages
    function Write-Log {
        param([string]$Message)
        $Timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
        "$Timestamp - $Message" | Out-File -FilePath $LogFile -Append
    }
    
    Write-Log "Starting GCS upload process"
    
    # Check if gsutil is available
    try {
        $null = gsutil version
    } catch {
        Write-Log "ERROR: gsutil not found. Please install Google Cloud SDK."
        exit 1
    }
    
    # Activate service account
    $ServiceAccountKey = "C:\nxlog-credentials\gcs-service-account.json"
    if (-not (Test-Path $ServiceAccountKey)) {
        Write-Log "ERROR: Service account key not found at $ServiceAccountKey"
        exit 1
    }
    
    try {
        gcloud auth activate-service-account --key-file=$ServiceAccountKey 2>&1 | Out-Null
        Write-Log "Service account activated successfully"
    } catch {
        Write-Log "ERROR: Failed to activate service account: $_"
        exit 1
    }
    
    # Create archive directory if it doesn't exist
    if (-not (Test-Path $ArchiveDir)) {
        New-Item -ItemType Directory -Path $ArchiveDir | Out-Null
        Write-Log "Created archive directory: $ArchiveDir"
    }
    
    # Get all JSON files in the local log directory
    $Files = Get-ChildItem -Path $LocalLogDir -Filter "*.json" -File
    
    if ($Files.Count -eq 0) {
        Write-Log "No files to upload"
        exit 0
    }
    
    Write-Log "Found $($Files.Count) file(s) to upload"
    
    # Upload each file to GCS
    $SuccessCount = 0
    $FailCount = 0
    
    foreach ($File in $Files) {
        try {
            # Upload to GCS
            gsutil cp $File.FullName $GcsBucket 2>&1 | Out-Null
    
            # Move to archive on success
            Move-Item -Path $File.FullName -Destination $ArchiveDir -Force
    
            Write-Log "Uploaded and archived: $($File.Name)"
            $SuccessCount++
        } catch {
            Write-Log "ERROR uploading $($File.Name): $_"
            $FailCount++
        }
    }
    
    Write-Log "Upload complete. Success: $SuccessCount, Failed: $FailCount"
    
  4. Dalam skrip, ganti nilai berikut:

    • $GcsBucket: URI bucket GCS Anda (misalnya, gs://nps-logs-chronicle/nps-logs/)
  5. Simpan file.

Instal Google Cloud SDK

  1. Di server NPS, download penginstal Google Cloud SDK dari Google Cloud SDK.
  2. Jalankan penginstal dan ikuti wizard penginstalan.
  3. Selama penginstalan, pilih Instal Python yang dipaketkan jika Python belum diinstal.
  4. Selesaikan penginstalan.
  5. Buka Command Prompt baru dan verifikasi penginstalan:

    gsutil version
    

Membuat tugas terjadwal untuk upload otomatis

  1. Di server NPS, buka Task Scheduler.
  2. Di panel kanan, klik Buat Tugas.
  3. Di tab Umum, konfigurasikan hal berikut:
    • Nama: Masukkan NXLog GCS Upload
    • Deskripsi: Masukkan Upload NPS logs to Google Cloud Storage
    • Security options: Pilih Run whether user is logged on or not
    • Opsi keamanan: Centang Jalankan dengan hak istimewa tertinggi
    • Konfigurasi untuk: Pilih Windows Server 2016 atau versi server Anda
  4. Di tab Triggers:
    1. Klik New.
    2. Begin the task: Pilih On a schedule.
    3. Setelan: Pilih Harian.
    4. Berulang setiap: Masukkan 1 hari.
    5. Ulangi tugas setiap: Pilih 15 menit.
    6. untuk durasi: Pilih Tanpa batas waktu.
    7. Klik Oke.
  5. Di tab Tindakan:
    1. Klik New.
    2. Tindakan: Pilih Mulai program.
    3. Program/skrip: Masukkan powershell.exe.
    4. Tambahkan argumen: Masukkan -ExecutionPolicy Bypass -File "C:\nxlog-scripts\upload-to-gcs.ps1".
    5. Klik Oke.
  6. Di tab Kondisi:
    • Hapus centang Mulai tugas hanya jika komputer terhubung ke daya AC.
  7. Di tab Setelan:
    • Centang Jalankan tugas sesegera mungkin setelah waktu mulai terjadwal terlewat.
    • Periksa Jika tugas gagal, mulai ulang setiap: Masukkan 5 minutes.
  8. Klik Oke.
  9. Masukkan kredensial untuk akun yang akan menjalankan tugas (harus memiliki hak istimewa Administrator).
  10. Klik Oke.

Menguji proses upload

  1. Di server NPS, buka Task Scheduler.
  2. Di panel kiri, luaskan Task Scheduler Library.
  3. Klik kanan tugas NXLog GCS Upload, lalu pilih Run.
  4. Tunggu beberapa detik hingga tugas selesai.
  5. Buka file log di C:\nxlog-scripts\upload.log untuk memverifikasi bahwa upload berhasil.
  6. Buka GCP Console > Cloud Storage > Buckets.
  7. Klik nama bucket Anda (nps-logs-chronicle).
  8. Buka folder nps-logs/.
  9. Verifikasi bahwa file JSON dengan log NPS ada.

Mulai layanan NXLog

  1. Di server NPS, buka Services (jalankan services.msc).
  2. Temukan layanan nxlog dalam daftar.
  3. Klik kanan layanan nxlog, lalu pilih Start.
  4. Pastikan status layanan adalah Running.
  5. Untuk memverifikasi bahwa NXLog mengumpulkan log, periksa file log NXLog:
    • C:\Program Files\nxlog\data\nxlog.log
  6. Cari pesan yang menunjukkan pengumpulan log berhasil:

    INFO im_file: monitoring file 'C:\Windows\System32\LogFiles\IN250315.log'
    

Mengambil akun layanan Google SecOps

Google SecOps menggunakan akun layanan unik untuk membaca data dari bucket GCS Anda. Anda harus memberi akun layanan ini akses ke bucket Anda.

Dapatkan email akun layanan

  1. Buka Setelan SIEM > Feed.
  2. Klik Tambahkan Feed Baru.
  3. Klik Konfigurasi satu feed.
  4. Di kolom Nama feed, masukkan nama untuk feed (misalnya, Microsoft NPS Logs).
  5. Pilih Google Cloud Storage V2 sebagai Source type.
  6. Pilih MICROSOFT_NPS sebagai Jenis log.
  7. Klik Get Service Account. Email akun layanan yang unik akan ditampilkan, misalnya:

    ```none
    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    ```
    
  8. Salin alamat email ini untuk digunakan di langkah berikutnya.

  9. Klik Berikutnya.

  10. Tentukan nilai untuk parameter input berikut:

    • URL bucket penyimpanan: Masukkan URI bucket GCS dengan jalur awalan:

      gs://nps-logs-chronicle/nps-logs/
      
      • Ganti:
        • nps-logs-chronicle: Nama bucket GCS Anda.
        • nps-logs/: Jalur folder/awalan tempat log disimpan.
    • Opsi penghapusan sumber: Pilih opsi penghapusan sesuai preferensi Anda:
      • Jangan pernah: Tidak pernah menghapus file apa pun setelah transfer (direkomendasikan untuk pengujian).
      • Hapus file yang ditransfer: Menghapus file setelah transfer berhasil.
      • Hapus file yang ditransfer dan direktori kosong: Menghapus file dan direktori kosong setelah transfer berhasil.
    • Usia File Maksimum: Menyertakan file yang diubah dalam beberapa hari terakhir (default adalah 180 hari)
    • Namespace aset: Namespace aset
    • Label penyerapan: Label yang akan diterapkan ke peristiwa dari feed ini
  11. Klik Berikutnya.

  12. Tinjau konfigurasi feed baru Anda di layar Selesaikan, lalu klik Kirim.

Memberikan izin IAM ke akun layanan Google SecOps

  • Akun layanan Google SecOps memerlukan peran Storage Object Viewer di bucket GCS Anda.
  1. Buka Cloud Storage > Buckets.
  2. Klik nama bucket Anda (nps-logs-chronicle).
  3. Buka tab Izin.
  4. Klik Grant access.
  5. Berikan detail konfigurasi berikut:
    • Add principals: Tempel email akun layanan Google SecOps
    • Tetapkan peran: Pilih Storage Object Viewer
  6. Klik Simpan.

Tabel pemetaan UDM

Kolom Log Pemetaan UDM Logika
Versi additional.fields Digabungkan dengan objek yang sesuai jika tidak kosong
Saluran additional.fields
Kata kunci additional.fields
Opcode additional.fields
Tugas additional.fields
ThreadID additional.fields
EventData.%1 additional.fields
EventData.%2 additional.fields
Saluran channel.value.string_value Nilai disalin secara langsung
EventData.%1 event_data_p1.value.string_value Nilai disalin secara langsung
EventData.%2 event_data_p2.value.string_value Nilai disalin secara langsung
Kata kunci keywords.value.string_value Nilai disalin secara langsung
TimeCreated metadata.event_timestamp Dikonversi dari UNIX_MS ke stempel waktu
EventId metadata.event_type Ditetapkan ke STATUS_UNCATEGORIZED jika EventId == '4400', STATUS_UPDATE jika EventId == '13', atau GENERIC_EVENT
EventId metadata.product_event_type Nilai disalin secara langsung
Opcode opcode.value.string_value Nilai disalin secara langsung
Komputer principal.asset.hostname Nilai disalin dari principal.hostname
Komputer principal.hostname Nilai disalin secara langsung
ProcessID principal.process.pid Nilai disalin jika tidak kosong
ID Pengguna principal.user.windows_sid Diekstrak menggunakan ekspresi reguler untuk mendapatkan SID Windows
EventId security_result.rule_name Ditetapkan ke "EventID: " + EventId
Tingkat security_result.severity Diubah: INFO/Informasional/Informasi/Normal/PEMBERITAHUAN menjadi INFORMASI, ERROR/Error menjadi ERROR, WARNING/Peringatan menjadi INFORMASI, DEBUG menjadi INFORMASI, Critical menjadi KRITIS
Tugas task.value.string_value Nilai disalin secara langsung
ThreadID thread_id.value.string_value Nilai disalin secara langsung
Versi version.value.string_value Nilai disalin secara langsung
metadata.vendor_name metadata.vendor_name Setel ke "Microsoft"
ProviderName metadata.product_name Nilai disalin secara langsung

Log Perubahan

Melihat Log Perubahan untuk parser ini

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