Firewall & Keamanan
Tidak ada port yang dibuka untuk Zenavo
Zenavo tidak pernah terhubung ke server Anda setelah penyiapan. Agen Zenavo, yang dipasang saat penyiapan, berjalan di server dan terhubung ke luar ke control plane lewat HTTPS (port 443), dan Zenavo mengirim deployment, log, dan terminal melalui koneksi itu. Jadi:
- API Kubernetes (6443): tutup dari internet. Hanya agen, di dalam server, yang memakainya.
- SSH (22): hanya diperlukan selama penyiapan, dari control plane Zenavo. Setelahnya, izinkan hanya dari tempat Anda mengelola server, atau tutup.
Biarkan 80, 443, dan (jika Anda memublikasikan port) 30000–32767 terbuka untuk semua. Tab Firewall server memeriksanya dari control plane. Server harus bisa menjangkau alamat konsol lewat HTTPS.
Apa yang boleh dilakukan agen
Agen memakai service account Kubernetes sendiri, yang dibatasi pada kebutuhan Zenavo:
- Agen hanya mengelola namespace proyek (
zv-…). Setiap namespace menerapkan level baseline Pod Security Kubernetes, sehingga tidak ada beban kerja yang bisa berjalan privileged, memakai jaringan host, atau memasang direktori host. - Agen tidak bisa membaca secret atau menjalankan perintah di luar namespace proyek, mengubah izinnya sendiri, atau menyentuh komponen sistem K3s (agen bisa membaca statusnya).
- Admission policy Kubernetes menerapkan batasan ini; agen tidak bisa menghapusnya.
Kontainer agen berjalan sebagai pengguna non-root dengan filesystem read-only. Agen memasang satu direktori host secara read-only, untuk melaporkan penggunaan disk /var/lib/rancher/k3s.
Apa yang disimpan Zenavo
- Hash token agen. Token itu sendiri hanya ada di server Anda.
- Kredensial pull registry image yang hanya bisa membaca image tim Anda.
Zenavo tidak menyimpan kunci SSH, kata sandi, atau kredensial cluster untuk server yang sudah berjalan. Kata sandi atau kunci SSH yang Anda masukkan dipakai oleh job penyiapan dan dihapus begitu penyiapan berhasil. Jika penyiapan gagal, kredensial disimpan terenkripsi selama sehari agar Anda bisa mencoba lagi tanpa memasukkannya ulang, lalu dihapus. Penyiapan tidak menambahkan apa pun ke ~/.ssh/authorized_keys.
Saat Anda menghapus server, Zenavo menghapus token agennya, sehingga agen tidak bisa terhubung lagi. K3s, agen, dan data Anda tetap ada di mesin: jalankan /usr/local/bin/k3s-uninstall.sh di sana jika tidak lagi diperlukan.
Server yang ditambahkan sebelum ada agen
Server yang ditambahkan sebelum agen ada dijangkau lewat SSH dengan kunci yang dipasang Zenavo, dan lewat API Kubernetes dengan kredensial admin K3s. Zenavo memindahkannya ke agen secara otomatis: memasang agen, menghapus kunci Zenavo dari ~/.ssh/authorized_keys, dan menghapus kunci serta kredensial yang tersimpan. Settings → Connection menampilkan statusnya dan memungkinkan Anda memulai perpindahan saat itu juga. Jika Anda dulu menempelkan kunci privat Anda sendiri, hapus sendiri dari server bila tidak lagi dipakai. Setelahnya, Anda juga bisa merotasi sertifikat K3s dengan k3s certificate rotate (ini me-restart K3s), agar kredensial admin yang pernah dipegang Zenavo tidak berlaku lagi.
Build tidak pernah berjalan di server Anda
Build Git berjalan di mesin build Zenavo, yang tidak punya akses ke control plane, pelanggan lain, atau kredensial cloud. Server Anda hanya menarik image yang sudah jadi, dipatok ke digest-nya.