Mengumpulkan log Secure Access Service Edge (SASE) Versa Networks

Didukung di:

Dokumen ini menjelaskan cara mengumpulkan log Secure Access Service Edge (SASE) Versa Networks. Parser mengekstrak pasangan nilai kunci setelah filter grok awal. Kemudian, nilai ini dipetakan ke Unified Data Model (UDM), yang menangani berbagai format log seperti peristiwa firewall, log aplikasi, dan log alarm, serta melakukan konversi dan pengayaan untuk kolom tertentu seperti protokol IP dan skor risiko.

Sebelum memulai

  • Pastikan Anda memiliki instance Google Security Operations.
  • Pastikan Anda menggunakan Windows 2016 atau yang lebih baru, atau host Linux dengan systemd.
  • Jika berjalan di belakang proxy, pastikan port firewall terbuka.
  • Pastikan Anda memiliki akses dengan hak istimewa ke Versa SASE.

Mendapatkan file autentikasi penyerapan Google SecOps

  1. Login ke konsol Google SecOps.
  2. Buka Setelan SIEM > Agen Pengumpulan.
  3. Download File Autentikasi Proses Transfer. Simpan file dengan aman di sistem tempat BindPlane akan diinstal.

Mendapatkan ID pelanggan Google SecOps

  1. Login ke konsol Google SecOps.
  2. Buka Setelan SIEM > Profil.
  3. Salin dan simpan ID Pelanggan dari bagian Detail Organisasi.

Menginstal Agen BindPlane

Penginstalan Windows

  1. Buka Command Prompt atau PowerShell sebagai administrator.
  2. Jalankan perintah berikut:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Penginstalan Linux

  1. Buka terminal dengan hak istimewa root atau sudo.
  2. Jalankan perintah berikut:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

Referensi Penginstalan Tambahan

Mengonfigurasi Agen BindPlane untuk menyerap Syslog dan mengirim ke Google SecOps

  1. Akses file konfigurasi:

    • Cari file config.yaml. Biasanya, file ini berada di direktori /etc/bindplane-agent/ di Linux atau di direktori penginstalan di Windows.
    • Buka file menggunakan editor teks (misalnya, nano, vi, atau Notepad).
  2. Edit file config.yaml sebagai berikut:

    receivers:
        tcplog:
            # Replace the port and IP address as required
            listen_address: "0.0.0.0:54525"
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the path to the credentials file you downloaded in Step 1
            creds: `/path/to/ingestion-authentication-file.json`
            # Replace with your actual customer ID from Step 2
            customer_id: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # Add optional ingestion labels for better organization
            ingestion_labels:
                log_type: SYSLOG
                namespace: versa_networks_sase
                raw_log_field: body
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - tcplog
                exporters:
                    - chronicle/chronicle_w_labels
    
    
  3. Ganti port dan alamat IP sesuai kebutuhan di infrastruktur Anda.

  4. Ganti <customer_id> dengan ID Pelanggan yang sebenarnya.

  5. Perbarui /path/to/ingestion-authentication-file.json ke jalur tempat file autentikasi disimpan di bagian Mendapatkan file autentikasi penyerapan Google SecOps.

Mulai ulang Agen BindPlane untuk menerapkan perubahan

  • Di Linux, untuk memulai ulang Agen BindPlane, jalankan perintah berikut:

    sudo systemctl restart bindplane-agent
    
  • Di Windows, untuk memulai ulang Agen BindPlane, Anda dapat menggunakan konsol Services atau memasukkan perintah berikut:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Mengonfigurasi SASE Versa Networks

Administrator harus mengonfigurasi kolektor jarak jauh di setiap node Versa Analytics untuk meneruskan log ke sistem pihak ketiga.

Untuk mengonfigurasi node analisis Versa, lakukan hal berikut:

  • Mengaktifkan penerusan log
  • Mengaktifkan logging ID sesi

Mengaktifkan penerusan log

  1. Login ke server analisis Versa.
  2. Buka CLI dengan menjalankan perintah cli.
  3. Beralih ke Mode konfigurasi dengan menjalankan perintah configure, lalu masukkan load merge terminal.
  4. Salin dan tempel perintah berikut untuk menyiapkan penerusan log:

    • Ganti <collector_ip> dan <collector_port> dengan alamat IP dan port kolektor syslog Anda (Bindplane).
    set system analytics log-collector-exporter destination-address <collector_ip>
    set system analytics log-collector-exporter destination-port <collector_port>
    set system analytics log-collector-exporter transport tcp
    set system analytics log-collector-exporter log-types firewall-log
    set system analytics log-collector-exporter log-types threat-log
    commit
    
  5. Simpan konfigurasi:

    save
    

Mengaktifkan logging ID sesi

Untuk mencatat informasi terkait IP, aktifkan logging ID sesi.

  1. Login ke Versa Director.
  2. Beralihlah ke Tampilan Sutradara.
  3. Buka Konfigurasi > Perangkat > Tenant > Perangkat untuk mengakses Tampilan Appliance.
  4. Pilih Konfigurasi > Lainnya > Sistem > Konfigurasi > Konfigurasi.
  5. Di panel Parameters, klik Edit.
  6. Di jendela Edit parameters, pilih LEF.
  7. Di bagian Firewall, centang kotak Include session ID logging.

  8. Klik Oke.

Tabel Pemetaan UDM

Kolom Log Pemetaan UDM Logika
accCkt additional.fields[].key: "accCkt"
additional.fields[].value.string_value: accCkt
Nilai diambil langsung dari kolom accCkt.
accCktId additional.fields[].key: "accCktId"
additional.fields[].value.string_value: accCktId
Nilai diambil langsung dari kolom accCktId.
accCktName additional.fields[].key: "accCktName"
additional.fields[].value.string_value: accCktName
Nilai diambil langsung dari kolom accCktName.
accessType additional.fields[].key: "accessType"
additional.fields[].value.string_value: accessType
Nilai diambil langsung dari kolom accessType.
action security_result.action: action Jika action, type, idpAction, avAction, atau urlAction adalah "izinkan", maka ALLOW. Jika action, type, idpAction, avAction, atau urlAction adalah "tolak", "hapus", "blokir", "tolak", maka BLOCK. Jika idpAction adalah hal lain selain UNKNOWN_ACTION.
alarmCause security_result.detection_fields[].key: "alarmCause"
security_result.detection_fields[].value: alarmCause
Nilai diambil langsung dari kolom alarmCause.
alarmClass security_result.detection_fields[].key: "alarmClass"
security_result.detection_fields[].value: alarmClass
Nilai diambil langsung dari kolom alarmClass.
alarmClearable security_result.detection_fields[].key: "alarmClearable"
security_result.detection_fields[].value: alarmClearable
Nilai diambil langsung dari kolom alarmClearable.
alarmEventType metadata.product_event_type: alarmEventType Nilai diambil langsung dari kolom alarmEventType.
alarmKey security_result.detection_fields[].key: "alarmKey"
security_result.detection_fields[].value: alarmKey
Nilai diambil langsung dari kolom alarmKey.
alarmKind security_result.detection_fields[].key: "alarmKind"
security_result.detection_fields[].value: alarmKind
Nilai diambil langsung dari kolom alarmKind.
alarmOwner security_result.detection_fields[].key: "alarmOwner"
security_result.detection_fields[].value: alarmOwner
Nilai diambil langsung dari kolom alarmOwner.
alarmSeqNo security_result.detection_fields[].key: "alarmSeqNo"
security_result.detection_fields[].value: alarmSeqNo
Nilai diambil langsung dari kolom alarmSeqNo.
alarmSeverity security_result.severity_details: alarmSeverity Nilai diambil langsung dari kolom alarmSeverity.
alarmText security_result.summary: alarmText Nilai diambil langsung dari kolom alarmText, dengan tanda kutip ganda dihapus.
alarmType security_result.description: alarmType Nilai diambil langsung dari kolom alarmType.
appFamily metadata.product_event_type: appFamily
security_result.detection_fields[].key: "appFamily"
security_result.detection_fields[].value: appFamily
Nilai diambil langsung dari kolom appFamily.
appId security_result.detection_fields[].key: "Application ID"
security_result.detection_fields[].value: appId
Nilai diambil langsung dari kolom appId.
appIdStr security_result.detection_fields[].key: "appIdStr"
security_result.detection_fields[].value: appIdStr
Nilai diambil langsung dari kolom appIdStr.
applianceName principal.hostname: applianceName Nilai diambil langsung dari kolom applianceName, siteName, atau site.
appProductivity security_result.detection_fields[].key: "appProductivity"
security_result.detection_fields[].value: appProductivity
Nilai diambil langsung dari kolom appProductivity.
appRisk security_result.severity_details: appRisk Nilai diambil langsung dari kolom appRisk.
appSubFamily security_result.detection_fields[].key: "appSubFamily"
security_result.detection_fields[].value: appSubFamily
Nilai diambil langsung dari kolom appSubFamily.
avAccuracy additional.fields[].key: "avAccuracy"
additional.fields[].value.string_value: avAccuracy
Nilai diambil langsung dari kolom avAccuracy.
avAction security_result.action: avAction Lihat action untuk mengetahui logikanya.
avMalwareName security_result.threat_name: avMalwareName Nilai diambil langsung dari kolom avMalwareName.
avMalwareType security_result.category_details: avMalwareType Nilai diambil langsung dari kolom avMalwareType.
classMsg security_result.description: classMsg Nilai diambil langsung dari kolom classMsg, dengan tanda kutip ganda dihapus.
clientIPv4Address target.ip: clientIPv4Address Nilai diambil langsung dari kolom clientIPv4Address.
destIp target.ip: destIp
destinationIPv4Address: destIp
Nilai diambil langsung dari kolom destIp.
destinationIPv4Address target.ip: destinationIPv4Address Nilai diambil langsung dari destinationIPv4Address atau berasal dari kolom networkPrefix.
destinationIPv6Address target.ip: destinationIPv6Address Nilai diambil langsung dari kolom destinationIPv6Address.
destinationPort target.port: destinationPort Nilai diambil langsung dari kolom destinationPort dan dikonversi menjadi bilangan bulat.
destinationTransportPort target.port: destinationTransportPort Nilai diambil langsung dari kolom destinationTransportPort dan dikonversi menjadi bilangan bulat.
deviceKey about.resource.attribute.labels[].key: "deviceKey"
about.resource.attribute.labels[].value: deviceKey
Nilai diambil langsung dari kolom deviceKey jika bukan "Tidak diketahui".
deviceName about.resource.attribute.labels[].key: "deviceName"
about.resource.attribute.labels[].value: deviceName
Nilai diambil langsung dari kolom deviceName jika bukan "Tidak diketahui".
duration network.session_duration.seconds: duration Nilai diambil langsung dari kolom duration dan dikonversi menjadi bilangan bulat.
egressInterfaceName additional.fields[].key: "egressInterfaceName"
additional.fields[].value.string_value: egressInterfaceName
Nilai diambil langsung dari kolom egressInterfaceName.
event.type metadata.event_type: event.type Jika applianceName (atau sourceIPv4Address atau user atau sourceIPv6Address) dan destinationIPv4Address (atau remoteSite atau destinationIPv6Address atau clientIPv4Address atau hostname) ada, maka NETWORK_CONNECTION. Atau, STATUS_UPDATE. Jika applianceName kosong, maka GENERIC_EVENT.
eventType principal.resource.attribute.labels[].key: "eventType"
principal.resource.attribute.labels[].value: eventType
Nilai diambil langsung dari kolom eventType.
family security_result.detection_fields[].key: "family"
security_result.detection_fields[].value: family
Nilai diambil langsung dari kolom family.
fc security_result.detection_fields[].key: "ForwardingClass"
security_result.detection_fields[].value: fc
Nilai diambil langsung dari kolom fc.
fileTransDir additional.fields[].key: "fileTransDir"
additional.fields[].value.string_value: fileTransDir
Nilai diambil langsung dari kolom fileTransDir.
filename target.file.names: filename Nilai diambil langsung dari kolom filename.
flowCookie metadata.collected_timestamp: flowCookie Nilai diambil langsung dari kolom flowCookie dan dikonversi menjadi stempel waktu menggunakan format UNIX.
flowId principal.resource.product_object_id: flowId Nilai diambil langsung dari kolom flowId.
forwardForwardingClass security_result.detection_fields[].key: "forwardForwardingClass"
security_result.detection_fields[].value: forwardForwardingClass
Nilai diambil langsung dari kolom forwardForwardingClass.
fromCountry principal.location.country_or_region: fromCountry
target.location.country_or_region: fromCountry
Nilai diambil langsung dari kolom fromCountry.
fromUser principal.user.userid: fromUser Nilai diambil langsung dari kolom fromUser jika tidak kosong, "unknown", atau "Unknown".
fromZone additional.fields[].key: "fromZone"
additional.fields[].value.string_value: fromZone
Nilai diambil langsung dari kolom fromZone.
generateTime metadata.collected_timestamp: generateTime Nilai diambil langsung dari kolom generateTime dan dikonversi menjadi stempel waktu menggunakan format UNIX.
hostname target.hostname: hostname Nilai diambil langsung dari kolom hostname.
httpUrl target.url: httpUrl Nilai diambil langsung dari kolom httpUrl.
icmpTypeIPv4 additional.fields[].key: "icmpTypeIPv4"
additional.fields[].value.string_value: icmpTypeIPv4
Nilai diambil langsung dari kolom icmpTypeIPv4.
idpAction security_result.action: idpAction Lihat action untuk mengetahui logikanya.
ingressInterfaceName additional.fields[].key: "ingressInterfaceName"
additional.fields[].value.string_value: ingressInterfaceName
Nilai diambil langsung dari kolom ingressInterfaceName.
ipsApplication additional.fields[].key: "ipsApplication"
additional.fields[].value.string_value: ipsApplication
Nilai diambil langsung dari kolom ipsApplication.
ipsDirection security_result.detection_fields[].key: "ipsDirection"
security_result.detection_fields[].value: ipsDirection
Nilai diambil langsung dari kolom ipsDirection.
ipsProfile security_result.detection_fields[].key: "ipsProfile"
security_result.detection_fields[].value: ipsProfile
Nilai diambil langsung dari kolom ipsProfile.
ipsProfileRule security_result.rule_name: ipsProfileRule Nilai diambil langsung dari kolom ipsProfileRule.
ipsProtocol network.ip_protocol: ipsProtocol Nilai diambil langsung dari kolom ipsProtocol.
log_type metadata.description: log_type
metadata.log_type: log_type
Nilai diambil langsung dari kolom log_type.
mstatsTimeBlock metadata.collected_timestamp: mstatsTimeBlock Nilai diambil langsung dari kolom mstatsTimeBlock dan dikonversi menjadi stempel waktu menggunakan format UNIX.
mstatsTotRecvdOctets network.received_bytes: mstatsTotRecvdOctets Nilai diambil langsung dari kolom mstatsTotRecvdOctets dan dikonversi menjadi bilangan bulat tanpa tanda tangan.
mstatsTotSentOctets network.sent_bytes: mstatsTotSentOctets Nilai diambil langsung dari kolom mstatsTotSentOctets dan dikonversi menjadi bilangan bulat tanpa tanda tangan.
mstatsTotSessCount additional.fields[].key: "mstatsTotSessCount"
additional.fields[].value.string_value: mstatsTotSessCount
Nilai diambil langsung dari kolom mstatsTotSessCount.
mstatsTotSessDuration network.session_duration.seconds: mstatsTotSessDuration Nilai diambil langsung dari kolom mstatsTotSessDuration dan dikonversi menjadi bilangan bulat.
mstatsType security_result.category_details: mstatsType Nilai diambil langsung dari kolom mstatsType.
networkPrefix target.ip: networkPrefix
target.port: networkPrefix
Alamat IP yang diekstrak dari kolom networkPrefix. Port diekstrak dari kolom networkPrefix dan dikonversi menjadi bilangan bulat.
protocolIdentifier network.ip_protocol: protocolIdentifier Nilai diambil langsung dari kolom protocolIdentifier, dikonversi menjadi bilangan bulat, dan dipetakan ke nama protokol IP menggunakan pencarian.
recvdOctets network.received_bytes: recvdOctets Nilai diambil langsung dari kolom recvdOctets dan dikonversi menjadi bilangan bulat tanpa tanda tangan.
recvdPackets network.received_packets: recvdPackets Nilai diambil langsung dari kolom recvdPackets dan dikonversi menjadi bilangan bulat.
remoteSite target.hostname: remoteSite Nilai diambil langsung dari kolom remoteSite.
reverseForwardingClass security_result.detection_fields[].key: "reverseForwardingClass"
security_result.detection_fields[].value: reverseForwardingClass
Nilai diambil langsung dari kolom reverseForwardingClass.
risk security_result.risk_score: risk Nilai diambil langsung dari kolom risk dan dikonversi menjadi float.
rule security_result.rule_name: rule Nilai diambil langsung dari kolom rule.
sentOctets network.sent_bytes: sentOctets Nilai diambil langsung dari kolom sentOctets dan dikonversi menjadi bilangan bulat tanpa tanda tangan.
sentPackets network.sent_packets: sentPackets Nilai diambil langsung dari kolom sentPackets dan dikonversi menjadi bilangan bulat.
serialNum security_result.detection_fields[].key: "serialNum"
security_result.detection_fields[].value: serialNum
Nilai diambil langsung dari kolom serialNum.
signatureId security_result.detection_fields[].key: "signatureID"
security_result.detection_fields[].value: signatureId
Nilai diambil langsung dari kolom signatureId.
signatureMsg security_result.detection_fields[].key: "signatureMsg"
security_result.detection_fields[].value: signatureMsg
Nilai diambil langsung dari kolom signatureMsg.
signaturePriority security_result.severity: signaturePriority Jika signaturePriority "rendah" (tidak peka huruf besar/kecil), maka LOW. Jika signaturePriority adalah "medium" (tidak peka huruf besar/kecil), maka MEDIUM. Jika signaturePriority adalah "high" (tidak peka huruf besar/kecil), maka HIGH.
site principal.hostname: site
applianceName: site
Nilai diambil langsung dari kolom site.
siteId additional.fields[].key: "siteId"
additional.fields[].value.string_value: siteId
Nilai diambil langsung dari kolom siteId.
siteName principal.hostname: siteName
applianceName: siteName
Nilai diambil langsung dari kolom siteName.
sourceIPv4Address principal.ip: sourceIPv4Address Nilai diambil langsung dari kolom sourceIPv4Address.
sourceIPv6Address principal.ip: sourceIPv6Address Nilai diambil langsung dari kolom sourceIPv6Address.
sourcePort principal.port: sourcePort Nilai diambil langsung dari kolom sourcePort dan dikonversi menjadi bilangan bulat.
sourceTransportPort principal.port: sourceTransportPort Nilai diambil langsung dari kolom sourceTransportPort dan dikonversi menjadi bilangan bulat.
subFamily security_result.detection_fields[].key: "subFamily"
security_result.detection_fields[].value: subFamily
Nilai diambil langsung dari kolom subFamily.
tcpConnAborted additional.fields[].key: "tcpConnAborted"
additional.fields[].value.string_value: tcpConnAborted
Nilai diambil langsung dari kolom tcpConnAborted jika tidak kosong atau "0".
tcpConnRefused additional.fields[].key: "tcpConnRefused"
additional.fields[].value.string_value: tcpConnRefused
Nilai diambil langsung dari kolom tcpConnRefused jika tidak kosong atau "0".
tcpPktsFwd network.sent_packets: tcpPktsFwd Nilai diambil langsung dari kolom tcpPktsFwd dan dikonversi menjadi bilangan bulat.
tcpPktsRev network.received_packets: tcpPktsRev Nilai diambil langsung dari kolom tcpPktsRev dan dikonversi menjadi bilangan bulat.
tcpReXmitFwd additional.fields[].key: "tcpReXmitFwd"
additional.fields[].value.string_value: tcpReXmitFwd
Nilai diambil langsung dari kolom tcpReXmitFwd jika tidak kosong atau "0".
tcpReXmitRev additional.fields[].key: "tcpReXmitRev"
additional.fields[].value.string_value: tcpReXmitRev
Nilai diambil langsung dari kolom tcpReXmitRev jika tidak kosong atau "0".
tcpSAA additional.fields[].key: "tcpSAA"
additional.fields[].value.string_value: tcpSAA
Nilai diambil langsung dari kolom tcpSAA jika tidak kosong atau "0".
tcpSSA additional.fields[].key: "tcpSSA"
additional.fields[].value.string_value: tcpSSA
Nilai diambil langsung dari kolom tcpSSA jika tidak kosong atau "0".
tcpSessCnt additional.fields[].key: "tcpSessCnt"
additional.fields[].value.string_value: tcpSessCnt
Nilai diambil langsung dari kolom tcpSessCnt.
tcpSessDur network.session_duration.seconds: tcpSessDur Nilai diambil langsung dari kolom tcpSessDur dan dikonversi menjadi bilangan bulat.
tcpSynAckReXmit additional.fields[].key: "tcpSynAckReXmit"
additional.fields[].value.string_value: tcpSynAckReXmit
Nilai diambil langsung dari kolom tcpSynAckReXmit jika tidak kosong atau "0".
tcpSynReXmit additional.fields[].key: "tcpSynReXmit"
additional.fields[].value.string_value: tcpSynReXmit
Nilai diambil langsung dari kolom tcpSynReXmit jika tidak kosong atau "0".
tcpTWHS additional.fields[].key: "tcpTWHS"
additional.fields[].value.string_value: tcpTWHS
Nilai diambil langsung dari kolom tcpTWHS jika tidak kosong atau "0".
tenantId principal.resource.attribute.labels[].key: "tenantId"
principal.resource.attribute.labels[].value: tenantId
Nilai diambil langsung dari kolom tenantId.
tenantName observer.hostname: tenantName Nilai diambil langsung dari kolom tenantName.
threatType security_result.detection_fields[].key: "threatType"
security_result.detection_fields[].value: threatType
Nilai diambil langsung dari kolom threatType.
toCountry target.location.country_or_region: toCountry Nilai diambil langsung dari kolom toCountry.
toZone additional.fields[].key: "toZone"
additional.fields[].value.string_value: toZone
Nilai diambil langsung dari kolom toZone.
traffType additional.fields[].key: "traffType"
additional.fields[].value.string_value: traffType
Nilai diambil langsung dari kolom traffType.
ts metadata.event_timestamp: ts Nilai diambil langsung dari kolom ts dan dikonversi menjadi stempel waktu.
type security_result.action: type Lihat action untuk mengetahui logikanya.
urlAction security_result.action: urlAction Lihat action untuk mengetahui logikanya.
urlActionMessage security_result.summary: urlActionMessage Nilai diambil langsung dari kolom urlActionMessage.
urlCategory principal.resource.attribute.labels[].key: "urlCategory"
principal.resource.attribute.labels[].value: urlCategory
Nilai diambil langsung dari kolom urlCategory.
urlProfile additional.fields[].key: "urlProfile"
additional.fields[].value.string_value: urlProfile
Nilai diambil langsung dari kolom urlProfile.
urlReputation security_result.severity_details: urlReputation Nilai diambil langsung dari kolom urlReputation.
user principal.ip: user Nilai diambil langsung dari kolom user.
vsnId principal.resource.attribute.labels[].key: "vsnId"
principal.resource.attribute.labels[].value: vsnId
Nilai diambil langsung dari kolom vsnId. Nilai hardcode. Nilai hardcode.

Perubahan

2024-06-03

  • Memetakan "idpAction" ke "security_result.action".
  • Memetakan "threatType" ke "security_result.detection_fields".
  • Memetakan "ipsDirection" ke "security_result.detection_fields".
  • Memetakan "ipsProfile" ke "security_result.detection_fields".
  • Memetakan "signaturePriority" ke "security_result.severity".
  • Memetakan "signatureMsg" ke "security_result.detection_fields".
  • Memetakan "signatureId" ke "security_result.detection_fields".
  • Memetakan "ipsApplication" ke "security_result.detection_fields".
  • Memetakan "classMsg" ke "security_result.description".
  • Memetakan "ipsProfileRule" ke "security_result.rule_name".
  • Memetakan "ipsProtocol" ke "network.ip_protocol".

2023-07-03

  • Menambahkan dukungan untuk "entitlementlog", "monstatslog", dan "tcpappmonlog".

2022-11-04

  • Parser yang baru dibuat.