diff --git a/.gitignore b/.gitignore index 7246e4a..4e08bb2 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ ops/ support/ support-api/ LDAPWeb.code-workspace +mysupperapps_FE_PWA/ # Environment & secrets .env diff --git a/GeoNetAgent/ISO.md b/GeoNetAgent/ISO.md new file mode 100644 index 0000000..fd267a0 --- /dev/null +++ b/GeoNetAgent/ISO.md @@ -0,0 +1,115 @@ +# Standar Internasional — Acuan Masa Pakai & EOL Perangkat IT + +Dokumen ini merangkum standar internasional yang menjadi acuan dalam menentukan masa pakai (*useful life*), siklus hidup, dan *End-of-Life* (EOL) perangkat laptop, PC, dan workstation di lingkungan organisasi. + +--- + +## Ringkasan Standar + +| Standar | Nama Lengkap | Fungsi Utama | +| ------- | ------------ | ------------ | +| ISO 55001 | Asset Management — Management Systems | Asset Lifecycle | +| ISO/IEC 19770-1 | IT Asset Management | IT Asset Management | +| ISO/IEC 20000-1 | IT Service Management | IT Service Management | +| ISO/IEC 27001 | Information Security Management | Information Security | +| NIST SP 800-53 | Security & Privacy Controls for IS | Hardware Lifecycle & Security Controls | +| ISACA COBIT | Control Objectives for IT | Governance & Asset Lifecycle | + +--- + +## Detail Standar & Relevansinya untuk Perangkat Endpoint + +### 1. ISO 55001 — Manajemen Aset (Asset Lifecycle) + +**Relevansi:** Standar utama untuk pengelolaan siklus hidup aset fisik, termasuk perangkat IT. + +- Mewajibkan organisasi mendefinisikan **masa pakai aset** secara eksplisit berdasarkan risiko dan kebutuhan bisnis. +- Memerlukan perencanaan **penghapusan aset** (*asset disposal*) yang terstruktur ketika perangkat mencapai EOL. +- Acuan umum masa pakai perangkat berdasarkan praktik ISO 55001: + - **Laptop/PC pengguna umum:** 3–5 tahun + - **Workstation teknis/desain:** 4–6 tahun + - **Server/infrastruktur:** 5–7 tahun +- Mensyaratkan dokumentasi kondisi aset, jadwal penggantian, dan analisis biaya siklus hidup penuh (*lifecycle cost analysis*). + +--- + +### 2. ISO/IEC 19770-1 — IT Asset Management (ITAM) + +**Relevansi:** Standar spesifik untuk pengelolaan aset IT, mencakup hardware dan software. + +- Mendefinisikan proses **inventarisasi, pelacakan, dan penonaktifan** aset IT secara sistematis. +- Mensyaratkan pencatatan atribut EOL/EOS (*End-of-Support*) dari setiap perangkat, termasuk: + - Tanggal akhir dukungan hardware dari vendor (OEM EOL) + - Tanggal akhir dukungan OS dari Microsoft/Apple/Linux distro +- Mensyaratkan proses **decommissioning** yang mencakup penghapusan data aman (*secure data wipe*) sebelum perangkat dilepas. +- Tiga tingkat kematangan ITAM (Tier 1–3); untuk pengelolaan EOL yang efektif minimal Tier 2. + +--- + +### 3. ISO/IEC 20000-1 — IT Service Management (ITSM) + +**Relevansi:** Menghubungkan siklus hidup perangkat dengan manajemen layanan IT. + +- Proses **Configuration Management** (CMDB) mewajibkan pencatatan status aset termasuk status EOL/aktif/pensiun. +- Proses **Change Management** mensyaratkan perencanaan penggantian perangkat yang mendekati EOL agar tidak mengganggu layanan. +- Proses **Capacity & Availability Management** menggunakan data EOL untuk merencanakan kapasitas dan anggaran pengadaan. + +--- + +### 4. ISO/IEC 27001 — Information Security Management + +**Relevansi:** Keamanan informasi mewajibkan kontrol ketat pada perangkat yang mendekati atau melewati EOL. + +- Kontrol **A.8 — Asset Management**: semua aset informasi (termasuk endpoint) harus diinventarisasi dan diketahui status EOL-nya. +- Perangkat yang OS-nya sudah EOL (contoh: Windows 7, Windows 10 setelah Okt 2025) dianggap **risiko keamanan tinggi** karena tidak mendapat patch keamanan. +- Mensyaratkan prosedur penghapusan data aman saat perangkat diretire (*media sanitization*). +- Pengelolaan EOL yang buruk dapat menjadi temuan **nonkonformitas** saat audit ISO 27001. + +--- + +### 5. NIST SP 800-53 — Hardware Lifecycle & Security Controls + +**Relevansi:** Panduan kontrol keamanan hardware dari NIST (banyak diadopsi sebagai referensi di luar AS). + +- **SA-22 (Unsupported System Components):** Mewajibkan organisasi untuk tidak mengoperasikan komponen IT yang sudah tidak didukung vendor (EOL/EOS), atau mendokumentasikan mitigasi risiko yang memadai. +- **MA-6 (Timely Maintenance):** Mensyaratkan perawatan dan penggantian tepat waktu berdasarkan jadwal siklus hidup. +- **SI-2 (Flaw Remediation):** Perangkat EOL tidak dapat menerima patch, secara otomatis melanggar kontrol ini. + +--- + +### 6. ISACA COBIT — Governance & Asset Lifecycle + +**Relevansi:** Kerangka tata kelola IT yang menghubungkan pengelolaan aset dengan nilai bisnis. + +- **BAI09 (Manage Assets):** Proses khusus untuk inventarisasi, pemeliharaan, dan penonaktifan aset IT. +- **DSS01 (Manage Operations):** Mensyaratkan pemantauan kondisi hardware secara berkelanjutan. +- Pengelolaan EOL masuk dalam konteks **risk management** dan **value delivery** — perangkat yang melewati EOL meningkatkan risiko operasional dan biaya tidak terduga. + +--- + +## Acuan Masa Pakai Umum Perangkat Endpoint + +| Jenis Perangkat | Masa Pakai Ideal | Batas Maksimum | Catatan | +| --------------- | ---------------- | -------------- | ------- | +| Laptop (pengguna umum) | 3–4 tahun | 5 tahun | Berdasarkan siklus depresiasi fiskal & EOL OS | +| PC Desktop (pengguna umum) | 4–5 tahun | 6 tahun | Komponen lebih mudah diupgrade | +| Workstation (teknis/CAD/GIS) | 4–5 tahun | 6 tahun | Tergantung kebutuhan performa aplikasi | +| Laptop/PC manajemen | 3–5 tahun | 5 tahun | Prioritas keamanan data tinggi | + +> **Catatan:** Masa pakai dihitung sejak tanggal pembelian pertama, bukan sejak mulai digunakan. Perangkat yang OS-nya mencapai EOL **wajib diganti atau diupgrade OS** terlepas dari usia hardware. + +--- + +## Referensi EOL OS Umum + +| Sistem Operasi | Tanggal EOL | Keterangan | +| -------------- | ----------- | ---------- | +| Windows 10 (semua edisi) | 14 Oktober 2025 | Tidak ada Extended Security Update gratis untuk konsumen | +| Windows 11 22H2 | 8 Oktober 2024 | Sudah EOL, wajib upgrade ke 23H2/24H2 | +| Windows 11 23H2 | 11 November 2025 | — | +| Windows 11 24H2 | Oktober 2026 (est.) | Rilis terbaru (2024) | +| Ubuntu 20.04 LTS | April 2025 (standard) | ESM hingga April 2030 | +| Ubuntu 22.04 LTS | April 2027 (standard) | ESM hingga April 2032 | +| Ubuntu 24.04 LTS | April 2029 (standard) | ESM hingga April 2034 | + +> Sumber: Microsoft Lifecycle Policy, Ubuntu Release Schedule. Selalu verifikasi ke situs resmi vendor untuk tanggal terkini. diff --git a/GeoNetAgent/agent/VERSION b/GeoNetAgent/agent/VERSION index a5a2e50..4ca719c 100644 --- a/GeoNetAgent/agent/VERSION +++ b/GeoNetAgent/agent/VERSION @@ -1 +1 @@ -0.1.10-phase0 +0.1.12-phase0 diff --git a/GeoNetAgent/agent/gpo/GeoNetAgent-GPO-Shutdown.cmd b/GeoNetAgent/agent/gpo/GeoNetAgent-GPO-Shutdown.cmd new file mode 100644 index 0000000..d1554f0 --- /dev/null +++ b/GeoNetAgent/agent/gpo/GeoNetAgent-GPO-Shutdown.cmd @@ -0,0 +1,6 @@ +@echo off +REM GeoNetAgent — GPO Computer Shutdown Script (wrapper) +REM Deploy folder ini ke SYSVOL / NETLOGON, lalu tautkan .cmd ini di GPO Shutdown. + +powershell.exe -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File "%~dp0GeoNetAgent-GPO-Shutdown.ps1" +exit /b 0 diff --git a/GeoNetAgent/agent/gpo/GeoNetAgent-GPO-Shutdown.ps1 b/GeoNetAgent/agent/gpo/GeoNetAgent-GPO-Shutdown.ps1 new file mode 100644 index 0000000..3181ac4 --- /dev/null +++ b/GeoNetAgent/agent/gpo/GeoNetAgent-GPO-Shutdown.ps1 @@ -0,0 +1,59 @@ +#Requires -Version 5.1 +<# +.SYNOPSIS + GPO Shutdown Script — kirim laporan GeoNetAgent sebelum Windows shutdown/restart. + +.DESCRIPTION + Dipanggil dari Group Policy (Computer Configuration → Shutdown Scripts). + Menjalankan UserAgent.ps1 -SkipAutoUpdate agar laporan terkirim sebelum PC mati. + Auto-update dilewati karena waktu shutdown terbatas. + +.NOTES + Log: %ProgramData%\GeoNetAgent\logs\gpo-shutdown.log + Exit selalu 0 agar GPO tidak error. + Batas waktu eksekusi GPO Shutdown Script default: 600 detik (bisa diatur via GPO). + Rekomendasikan set "Maximum wait time for Group Policy scripts" ke 60 detik. +#> +[CmdletBinding()] +param() + +$ErrorActionPreference = 'Continue' + +$InstallRoot = Join-Path $env:ProgramData 'GeoNetAgent' +$LogDir = Join-Path $InstallRoot 'logs' +$LogFile = Join-Path $LogDir 'gpo-shutdown.log' +$UserAgent = Join-Path $InstallRoot 'UserAgent.ps1' + +function Write-GeoNetShutdownLog { + param([string]$Message) + $line = '{0} {1}' -f (Get-Date -Format 'yyyy-MM-dd HH:mm:ss'), $Message + try { + if (-not (Test-Path $LogDir)) { + New-Item -ItemType Directory -Path $LogDir -Force | Out-Null + } + Add-Content -Path $LogFile -Value $line -Encoding UTF8 + } + catch { } +} + +Write-GeoNetShutdownLog '=== GPO shutdown begin ===' + +try { + if (-not (Test-Path $UserAgent)) { + Write-GeoNetShutdownLog "UserAgent.ps1 tidak ditemukan di $InstallRoot — skip" + exit 0 + } + + Write-GeoNetShutdownLog 'Mengirim laporan sebelum shutdown...' + & powershell.exe -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden ` + -File $UserAgent -SkipAutoUpdate + + $code = $LASTEXITCODE + Write-GeoNetShutdownLog "UserAgent selesai (exit $code)" +} +catch { + Write-GeoNetShutdownLog "ERROR: $($_.Exception.Message)" +} + +Write-GeoNetShutdownLog '=== GPO shutdown end ===' +exit 0 diff --git a/GeoNetAgent/agent/gpo/GeoNetAgent-GPO-Startup.ps1 b/GeoNetAgent/agent/gpo/GeoNetAgent-GPO-Startup.ps1 index aefa6b3..4703e76 100644 --- a/GeoNetAgent/agent/gpo/GeoNetAgent-GPO-Startup.ps1 +++ b/GeoNetAgent/agent/gpo/GeoNetAgent-GPO-Startup.ps1 @@ -108,7 +108,7 @@ function Invoke-GeoNetGpoWebInstall { } function Test-GeoNetScheduledTasks { - $names = @('GeoNetAgent-Report', 'GeoNetAgent-Report-Startup') + $names = @('GeoNetAgent-Report', 'GeoNetAgent-Report-Startup', 'GeoNetAgent-Report-Shutdown') foreach ($name in $names) { $null = & schtasks.exe /Query /TN $name /FO LIST 2>$null if ($LASTEXITCODE -ne 0) { return $false } diff --git a/GeoNetAgent/agent/gpo/README.md b/GeoNetAgent/agent/gpo/README.md index 12649f9..68f4f65 100644 --- a/GeoNetAgent/agent/gpo/README.md +++ b/GeoNetAgent/agent/gpo/README.md @@ -6,8 +6,10 @@ Skrip startup untuk **Computer Configuration** Active Directory. Jalan sebagai * | File | Fungsi | |------|--------| -| `GeoNetAgent-GPO-Startup.cmd` | Entry point untuk GPO (tambahkan file ini di policy) | -| `GeoNetAgent-GPO-Startup.ps1` | Logika install / update / perbaiki task | +| `GeoNetAgent-GPO-Startup.cmd` | Entry point GPO Startup (tambahkan di Startup Scripts) | +| `GeoNetAgent-GPO-Startup.ps1` | Logika install / update / perbaiki task saat boot | +| `GeoNetAgent-GPO-Shutdown.cmd` | Entry point GPO Shutdown (tambahkan di Shutdown Scripts) | +| `GeoNetAgent-GPO-Shutdown.ps1` | Kirim laporan sebelum PC mati / restart | | `README.md` | Panduan ini | ## Prasyarat server @@ -43,7 +45,15 @@ Pastikan **Computer Account** domain bisa **Read** folder tersebut. \\gisportal.id\SYSVOL\gisportal.id\scripts\GeoNetAgent\GeoNetAgent-GPO-Startup.cmd ``` -5. **OK** → tutup editor GPO +5. Tab **Shutdown** → **Add** → pilih: + + ``` + \\gisportal.id\SYSVOL\gisportal.id\scripts\GeoNetAgent\GeoNetAgent-GPO-Shutdown.cmd + ``` + +6. **OK** → tutup editor GPO + +> **Tip:** Set `Computer Configuration → Policies → Windows Settings → Scripts → Maximum wait time for Group Policy scripts` ke **60 detik** agar shutdown tidak terlalu lama menunggu agent. ## Langkah 3 — Link ke OU @@ -66,14 +76,18 @@ Setelah boot, cek: Get-Content "$env:ProgramData\GeoNetAgent\VERSION" Get-Content "$env:ProgramData\GeoNetAgent\logs\gpo-startup.log" -Tail 20 schtasks /Query /TN GeoNetAgent-Report /V /FO LIST +schtasks /Query /TN GeoNetAgent-Report-Startup /V /FO LIST +schtasks /Query /TN GeoNetAgent-Report-Shutdown /V /FO LIST Test-Path "$env:ProgramData\GeoNetAgent\UserAgent.ps1" ``` Harapan: -- `VERSION` = versi terbaru di server (mis. `0.1.8-phase0`) +- `VERSION` = versi terbaru di server (mis. `0.1.11-phase0`) - Log berisi `Selesai OK` - Task `GeoNetAgent-Report` — HOURLY, interval **3** jam, run as **SYSTEM** +- Task `GeoNetAgent-Report-Startup` — At Startup, run as **SYSTEM** +- Task `GeoNetAgent-Report-Shutdown` — Event trigger EventID 1074 (shutdown/restart), run as **SYSTEM** ## Perilaku skrip @@ -82,25 +96,44 @@ Harapan: | Agent belum ada | Install penuh dari web (silent, `-SkipInitialRun`) | | Agent lama tanpa modul auto-update | Reinstall | | Agent ada | Cek `manifest.json` vs `VERSION`, update jika beda | -| Scheduled Task hilang | Daftar ulang (startup + 3 jam) | +| Scheduled Task hilang | Daftar ulang (startup + 3 jam + shutdown event) | | Jaringan belum siap saat boot | Tunggu hingga 120 detik | | Error | Catat di log, **exit 0** (boot tidak terganggu) | -Laporan inventaris dikirim oleh Scheduled Task (`UserAgent.ps1`), bukan langsung dari skrip GPO. +### Kapan laporan dikirim + +| Trigger | Keterangan | +|---------|------------| +| **Boot / Startup** | GPO Startup + Task `GeoNetAgent-Report-Startup` (ONSTART) | +| **Setiap 3 jam** | Task `GeoNetAgent-Report` (HOURLY) | +| **Shutdown / Restart** | GPO Shutdown + Task `GeoNetAgent-Report-Shutdown` (Event 1074) | + +Task shutdown menggunakan `-SkipAutoUpdate` agar tidak delay proses mati PC. ## Log ``` -%ProgramData%\GeoNetAgent\logs\gpo-startup.log +%ProgramData%\GeoNetAgent\logs\gpo-startup.log ← startup +%ProgramData%\GeoNetAgent\logs\gpo-shutdown.log ← shutdown +``` + +Contoh startup: + +``` +2026-06-29 08:15:02 === GPO startup begin === +2026-06-29 08:15:08 Agent ada — cek update +2026-06-29 08:15:12 Updated: 0.1.10-phase0 -> 0.1.11-phase0 +2026-06-29 08:15:13 Selesai OK. VERSION=0.1.11-phase0 +2026-06-29 08:15:13 === GPO startup end === ``` -Contoh: +Contoh shutdown: ``` -2026-06-18 08:15:02 === GPO startup begin === -2026-06-18 08:15:08 Agent belum terpasang — install baru -2026-06-18 08:15:45 Selesai OK. VERSION=0.1.8-phase0 -2026-06-18 08:15:45 === GPO startup end === +2026-06-29 17:30:01 === GPO shutdown begin === +2026-06-29 17:30:01 Mengirim laporan sebelum shutdown... +2026-06-29 17:30:08 UserAgent selesai (exit 0) +2026-06-29 17:30:08 === GPO shutdown end === ``` ## Firewall / proxy @@ -127,6 +160,7 @@ powershell.exe -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File "%~d ```cmd schtasks /Delete /TN GeoNetAgent-Report /F schtasks /Delete /TN GeoNetAgent-Report-Startup /F + schtasks /Delete /TN GeoNetAgent-Report-Shutdown /F ``` 3. Hapus folder: `%ProgramData%\GeoNetAgent` diff --git a/GeoNetAgent/agent/install/index.html b/GeoNetAgent/agent/install/index.html index 2dfddd6..13c8168 100644 --- a/GeoNetAgent/agent/install/index.html +++ b/GeoNetAgent/agent/install/index.html @@ -15,10 +15,20 @@ ol.steps { padding-left: 1.25rem; } ol.steps li { margin: .5rem 0; } .label { display: inline-block; min-width: 4.5rem; font-weight: 600; color: #52525b; } + .version-bar { display: flex; align-items: center; gap: .75rem; flex-wrap: wrap; margin: .75rem 0 1.25rem; } + .badge { display: inline-flex; align-items: center; gap: .4rem; background: #18181b; color: #fff; border-radius: 6px; padding: .3rem .75rem; font-size: .85rem; font-weight: 600; letter-spacing: .01em; } + .badge-label { opacity: .65; font-weight: 400; } + .badge-ver { color: #4ade80; } + .badge-date { color: #93c5fd; } + .badge-loading { opacity: .5; }
Installer untuk laptop/PC Windows. Path install: %ProgramData%\GeoNetAgent
Scheduled Task OK: GeoNetAgent-Report, GeoNetAgent-Report-Startup
+ Scheduled Task OK: GeoNetAgent-Report, GeoNetAgent-Report-Startup, GeoNetAgent-Report-Shutdown
%ProgramData%\GeoNetAgentGeoNetAgent-Report-Startup — jalan saat boot (SYSTEM)GeoNetAgent-Report — tiap 3 jam (SYSTEM); cek update otomatis sebelum kirim laporanGeoNetAgent-Report-Shutdown — jalan saat shutdown/restart Windows (Event 1074)cd $env:TEMP.\GeoNetAgent-Install.ps1 -SkipInitialRun