
Saat Apache Hop 2.19 dirilis, rilisnya sendiri sudah jadi kabar besar, 337 issue ditutup, ada plugin Marketplace, dan engine Spark native. Tapi kami sempat menandai hal lain sebagai cerita yang lebih besar untuk deployment tim: lapisan keamanan lengkap sedang disiapkan untuk Hop Web, versi browser dari Hop GUI.
Lapisan keamanan itu kini sudah ada. Fitur ini tersedia sekarang di build terbaru Hop Web, dan akan dirilis resmi sebagai bagian dari Hop 2.20. Singkatnya: Hop Web berubah dari yang tadinya tidak punya login sama sekali menjadi punya empat mode autentikasi, role-based access control, dan tab Security khusus di perspective Configuration tempat admin mengelola semuanya tanpa perlu menyentuh file konfigurasi.
Kenapa ini penting
Hop Web memberi tim Anda Hop GUI lengkap di browser. Selama ini Hop Web hadir dalam kondisi terbuka total, siapa pun yang bisa menjangkau server bisa membuka semua project, mengedit semua pipeline, dan menginstall plugin. Kalau ingin ada login, Anda harus mengonfigurasi server Tomcat di bawahnya secara manual, dan bahkan itu pun Hop tidak punya konsep role di dalam UI-nya.
Lapisan baru ini menyelesaikan kedua masalah tersebut, dengan dua bagian:
- Autentikasi mengatur siapa yang boleh masuk, dengan empat mode pilihan.
- Otorisasi mengatur apa yang boleh dilakukan tiap orang setelah masuk, melalui role yang Hop terapkan di seluruh UI, mulai dari menu, toolbar, dialog, keyboard shortcut, sampai apa yang bisa di-drag di canvas.
Empat mode autentikasi
Anda memilih salah satunya di tab Security (panduannya di bawah). Authentication mode yang tersedia:
- NONE adalah akses terbuka, default selama ini. Tidak ada halaman login, tidak ada pembatasan, persis perilaku Hop Web dulu. Cocok untuk container pribadi di laptop, tidak cocok untuk apa pun yang dipakai bersama.
- BASIC adalah login yang dikelola Hop sendiri. Hop Web menampilkan halaman sign-in dan memeriksa username serta password ke daftar user miliknya. Anda membuat dan mengelola user dari UI. Ini pilihan yang tepat untuk tim kecil yang belum punya identity provider sendiri.
- EXTERNAL menyerahkan autentikasi ke sesuatu yang sudah Anda jalankan. Servlet container atau reverse proxy di depan Hop Web yang menangani login, dan Hop memercayai user yang diterimanya. Ini pilihan alami kalau organisasi Anda sudah mengautentikasi orang melalui LDAP atau gateway yang sudah ada.
- OAUTH2 adalah single sign-on. User klik satu tombol, dikirim ke identity provider, dan kembali dalam keadaan sudah login. Bekerja dengan Keycloak, Microsoft Entra ID, Google, Okta, atau penyedia mana pun yang berbicara dalam OpenID Connect.
Empat role, diterapkan di mana-mana
Setelah seseorang login, Hop memetakan mereka ke satu atau lebih dari empat role bawaan:
| Role Hop | Apa yang bisa dilakukan orang tersebut |
|---|---|
| Admin | Semuanya, termasuk mengelola pengaturan keamanan dan menginstall plugin dari marketplace |
| User (developer) | Membuat, mengedit, menyimpan, menghapus, dan menjalankan pipeline serta workflow, dan mengelola metadata. Tidak bisa mengatur keamanan, tidak bisa install plugin |
| Operator | Hanya melihat dan menjalankan. Tidak bisa menyimpan, mengedit, atau menghapus apa pun |
| Read-only | Hanya melihat. Bahkan tidak bisa mengeksekusi |
Penerapannya menyeluruh. Menu, tombol toolbar, aksi klik kanan, dan keyboard shortcut semuanya dibatasi, jadi user Read-only memang tidak akan melihat tombol Save atau Run. Kalau seseorang memicu aksi yang tidak berhak dia lakukan, dia akan mendapat dialog Access denied. Yang lebih baik lagi, dialog terbuka dalam mode read-only bagi user tanpa hak edit: field tidak bisa diubah dan tombol OK dimatikan, cara yang bagus untuk membiarkan staf junior melihat isi konfigurasi sebuah transform tanpa risiko perubahan yang tidak disengaja. Canvas pipeline dan workflow juga memblokir drag, delete, dan reconnect bagi mereka.
Dua sentuhan kecil yang menunjukkan ketelitian desainnya:

- Toolbar menampilkan siapa yang sedang login, di samping tombol Log off.
- Admin mendapat dropdown session privilege untuk menurunkan haknya sementara ke Operator atau Read-only tanpa perlu logout, berguna untuk mengecek apa yang sebenarnya dilihat rekan kerja. Anda hanya bisa turun, tidak bisa naik, jadi tidak ada jalan untuk menaikkan hak sendiri.
Tab Security yang baru, field per field

Ini inti update untuk pengguna UI. Buka perspective Configuration di Hop Web, Anda akan menemukan tab Security. Tab ini hanya muncul untuk admin, dan hanya di Hop Web, tidak pernah di GUI desktop.
Di bagian atas ada status line yang memberi tahu posisi Anda: “Session is unrestricted (no AuthN)” saat autentikasi mati, atau “Signed in as ‘nama’ with roles […]”. Di bawahnya ada empat sampai lima sub-tab, plus tombol Save dan Reload. Save menulis pengaturan Anda, Reload membuang perubahan dan membaca ulang dari disk. Berikut isi tiap sub-tab.
General

Tempat Anda melakukan enable authentication.
| Field | Fungsinya |
|---|---|
| Authentication mode | Dropdown dengan empat mode: NONE, EXTERNAL, BASIC, OAUTH2 |
| Login welcome message | Teks kustom yang tampil di bawah judul “Apache Hop Web” pada halaman sign-in (hanya BASIC dan OAUTH2). Kosongkan untuk pesan default: “Sign in to design and run data pipelines and workflows.” |
Basic

Layar manajemen user, dipakai saat mode BASIC. Satu tabel Users dengan satu baris per orang:
| Field | Fungsinya |
|---|---|
| Username | Nama login |
| Role | Dropdown: admin, user, operator, atau readonly. Role kosong menjadi user |
| Enabled | Saklar Y/N. Akun yang dinonaktifkan selalu gagal login, berguna untuk menangguhkan seseorang tanpa menghapus barisnya |
| New password | Ketik untuk mengatur atau mengganti password. Biarkan kosong untuk mempertahankan yang lama. Password disimpan sebagai one-way hash, bukan teks polos |
Menambahkan rekan satu tim cuma butuh satu baris: username, role, password, Save. Anda memerlukan setidaknya satu user agar mode BASIC bisa jalan.
Satu masalah telur dan ayam yang perlu diketahui: saat autentikasi baru dinyalakan, daftar user masih kosong dan belum ada yang bisa login ke UI yang mengelola user. Anda bootstrap admin pertama dengan environment variable sebelum container dinyalakan, HOP_WEB_ADMIN_USER dan HOP_WEB_ADMIN_PASSWORD. Untuk demo lokal cepat ada juga HOP_WEB_SEED_DEMO_USERS=true, yang membuat empat akun contoh, admin, developer, operator, dan viewer, masing-masing dengan username-nya sendiri sebagai password.
External

Satu tabel mapping, Role mappings (container / IdP → Hop), dengan dua kolom:
| Field | Fungsinya |
|---|---|
| Container / IdP role | Nama role atau group sebagaimana diterima dari container, reverse proxy, LDAP, atau identity provider Anda. Bebas diisi, tulis apa yang dikirim dari sisi Anda |
| Hop role | Dropdown: admin, user, operator, readonly. Terjemahan nama tersebut di dalam Hop |
Misalnya, kalau LDAP Anda mengirim group data-engineers, tambahkan baris yang memetakannya ke user, dan semua orang di group itu menjadi developer di Hop Web. Baris kosong diabaikan, dan kalau tabelnya kosong Hop memakai pencocokan nama bawaan yang masuk akal. Tab ini penting untuk mode EXTERNAL dan untuk SSO, karena keduanya butuh tempat untuk menerjemahkan “nama group dari luar” menjadi “role Hop”.
OAuth

Pengaturan single sign-on, dipakai saat mode OAUTH2.
| Field | Fungsinya |
|---|---|
| Issuer URL | Alamat identity provider Anda, misalnya https://keycloak.example/realms/hop. Hop mengambil sisanya secara otomatis dari sini |
| Client ID | Client yang Anda daftarkan di identity provider |
| Client secret | Secret client, tampilannya disamarkan. Client publik yang memakai PKCE boleh mengosongkannya |
| Redirect URI | Ke mana provider mengembalikan user. Kosongkan dan Hop menyusunnya otomatis, Anda tinggal mendaftarkan alamat itu ke provider |
| Scopes | Apa yang Hop boleh tahu tentang user. Default-nya, openid profile email, cocok untuk mayoritas provider |
| Role / groups claim | Field mana di token login yang berisi daftar group milik user, inilah yang mengisi tabel mapping di tab External. Default groups |
| Username claim | Field mana yang menyimpan username. Default preferred_username, untuk Google pakai email |
| Use PKCE (S256) | Lapisan keamanan tambahan pada proses login, aktif secara default. Biarkan menyala |
Projects

Kontrol dengan finest grain, menentukan siapa yang boleh membuka project yang mana saja:
| Field | Fungsinya |
|---|---|
| Enable project access control | Saklar utama. Mati secara default, semua orang melihat semua project. Session desktop tidak pernah difilter |
| When no rule matches, allow all projects | Dicentang (default), siapa pun yang tidak tercakup rule melihat semuanya. Dihilangkan centangnya, hanya admin yang tetap punya akses penuh dan yang lain hanya melihat yang diberikan rule |
| Rules → Type | Rule mencocokkan pada apa: user (username), role (role Hop), atau group (group dari container, LDAP, atau identity provider Anda) |
| Rules → Subject | Nama username, role, atau group sebenarnya |
| Rules → All projects | Y berarti orang atau group ini boleh membuka semua project terdaftar |
| Rules → Projects | Daftar nama project dipisahkan koma, dipakai saat All projects bernilai N |
Satu catatan soal Save: setelah menyimpan, orang yang sudah login akan mempertahankan role lamanya sampai mereka login ulang. Dan kalau Anda memakai login BASIC milik Hop, jangan sekalian menyalakan login di level Tomcat, pilih satu jalur saja.
Penutup
Hop Web berubah dari titik terlemah dalam adopsi Hop di enterprise menjadi platform yang benar-benar bisa Anda jalankan untuk tim yang campur. Empat mode login mencakup semuanya dari demo di laptop sampai SSO berbasis Keycloak, empat role diterapkan sampai ke dialog individual dan operasi canvas, dan tab Security yang baru berarti admin mengelola semuanya dari UI yang sama tempat tim mereka merancang pipeline.
Kalau Anda ingin merasakannya sebelum rilis resmi 2.20, jalankan perintah Docker satu baris di atas dan luangkan sepuluh menit login sebagai tiap user demo. Bedanya langsung terlihat. Dokumentasi lengkapnya ada di manual Hop Web.