Pada Blog ini akan memberikan panduan lengkap dalam memanfaatkan Harbor dan Trivy sebagai solusi keamanan images container yang nantinya akan digunakan di dalam Kubernetes. Dengan Harbor, Anda bisa mengelola private registry yang terstruktur dan aman, sedangkan Trivy membantu mendeteksi kerentanan pada image container, menjaga standar keamanan aplikasi yang Anda gunakan.
Tutorial ini juga menjelaskan cara mengintegrasikan Slack sebagai platform notifikasi, sehingga setiap hasil scan Trivy dapat langsung diinformasikan ke tim secara real-time. Notifikasi ini memungkinkan tim untuk merespons dengan cepat, memastikan langkah mitigasi yang efektif terhadap potensi ancaman.
Latar Belakang
Di Era digitalisasi sekarang yang semakin pesat, banyak perusahaan yang memerlukan solusi yang efektif dan handal dalam mengelola aplikasi yang bersifat fleksibel, otomatis serta aman dari kejahatan digital. Serta dengan adanya Cloud Computing menjadikan banyak perusahaan membutuhkan tools yang dapat di jalankan pada environment tersebut. Kubernetes menjadi salah satu tools yang paling banyak diminati oleh beberapa perusahaan, karena kemampuannya dalam mengelola container dalam skala besar.
Karena Hal tersebut juga menyebabkan adanya kebutuhan untuk penyimpanan Image private atau biasa disebut sebagai Private Registry agar menjaga keamanan dari perusahaannya, dan juga karena banyak nya kasus terkait pencurian data, menjadikan kebutuhan akan Scanning Vulnerability atau kerentanan menjadi cukup penting. Apalagi di era Cloud dan Containerisasi, Trivy dan Harbor merupakan salah satu solusi terkait dua hal tersebut. Yang dimana harbor sebagai tempat registry dan Trivy untuk scanning otomatis yang di trigger oleh Harbor saat ada event tertentu seperti Ada images yang baru di Push ke Harbor Registry.
Serta dibutuhkan juga Tools untuk mengirim notifikasi secara cepat dan otomatis, sehingga dapat secara cepat juga untuk mengatasi Vulnerability atau kerentanan terhadap Images yang akan di simpan di Harbor, malasah tersebut juga bisa diatasi dengan menggunakan Slack.
Tools
- Kubernetes – v1.28.15
- Kubeadm
- Kubectl
- Kubelet
- Harbor – 2.10.0
- Trivy – 0.47.0
- Docker – 27.3.1
- OpenSSL – 3.0.2
- Slack
Topologi

Harbor
Harbor adalah registry open source yang digunakan untuk menyimpan dan mengelola Images yang akan digunakan untuk membuat Container. Harbor sendiri cukup diminati karena mudahnya integrasi dengan tools scanning Vulnerability seperti Trivy atau Clair, yang memungkinkan untuk melakukan pengecekan kerentanan (Vulnerability) terhadap Images yang disimpan menjadi lebih mudah.
Trivy
Trivy adalah salah satu tools scanning yang berbasis open source yang digunakan untuk mendeteksi kerentanan yang berfokus pada images container. Trivy memindai mulai dari Library atau Apps Dependencies (seperti Composer, npm, yarn) sampai kedalam Operating System (OS) yang digunakan, apakah aman atau tidak.
Slack
Slack adalah tools komunikasi yang digunakan di tempat kerja, yang memungkinkan pengguna untuk mengirim pesan, file dan tools. Slack memiliki 2 metode, yaitu Direct Message (pesan langsung dari satu user ke user lain) dan Channel Group. Dan juga Slack dapat di integrasikan dengan aplikasi atau tools lain juga yang memungkinkan melakukan otomatisasi untuk notifikasi dari suatu aplikasi.
Langkah Implementasi
1. Install Docker Untuk Harbor Registry
Panduan Dibahwah ini mencakup langkah-langkah konfigurasi Docker di sistem yang akan dibutuhkan, sehingga Anda dapat dengan mudah memahami dan mengimplementasikannya. Untuk dependensi yang dibutuhkan.
docker-ce # Package utama Docker
docker-ce-cli # Package untuk CLI Docker
containerd.io # Package untuk Container RunTime Docker
docker-buildx-plugin # Package untuk Membuat Image Docker
docker-compose-plugin # Package untuk Docker Compose
Untuk lebih detail terkait pengertian dan langkah installasi, bisa kunjungi postingan saya yang berjudul Docker Container
2. Create SSL Certificate untuk Harbor
- Membuat file Config IP SAN, agar SSL Certificate dapat membaca akses jika melalui IP, dan di simpan di directory “/etc/ssl/”.
~$ echo "subjectAltName=IP:<IP Address Node>" > IP_SANS.txt
- Membuat Certificate dan Key untuk koneksi https pada Harbor, yang nantinya disimpan di directory “/etc/ssl/harbor/”.
~$ sudo openssl genrsa -out harbor.key 4096 ~$ sudo openssl req -sha512 -new \ -subj "/C=IN/ST=jateng/L=kendal/O=<Company Name>/OU=Personal/CN=<Domain>"\ -key harbor.key \ -out harbor.csr ~$ sudo openssl x509 -req -sha512 -days 3650 \ -key harbor.key -extfile /etc/ssl/IP_SANS.ext \ -in harbor.csr \ -out harbor.crt
3. Install Harbor
- Download Source Code untuk harbor, lalu unzip file source code harbor yang sudah di download.
~$ wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-offline-installer-v2.10.0.tgz ~$ tar -xvzf harbor-offline-installer-v2.10.0.tgz
- Lalu edit pada file ”harbor.yaml”. sesuaikan seperti di contoh berikut.
~$ cp harbor.yml.tmpl harbor.yml ~$ nano harbor.ymlhostname: <IP or Domain> http: port: 80 https: port: 443 certificate: /path/to/ca_harbor.crt private_key: /path/to/ca_habror.key harbor_admin_password: <password admin harbor>
- Lalu jalankan script “install.sh” dengan parameter “–with-trivy”untuk secara otomatis integrasi Harbor dengan Trivy. Lalu verifikasi container komponen dari harbor nya berjalan dengan baik tanpa error.
~$ sudo ~/harbor/install.sh --with-trivy ~$ docker ps -a
4. Konfigurasi Harbor untuk Trigger Scan Trivy saat ada Image yang baru di Push dan mengatur agar user dapat Pull Image dengan tingkat kerentanan yang rendah atau aman
- Login ke Harbor dengan user “admin”, lalu masuk ke project yang ingin di konfigurasi.

- Lalu pilih “Configuration”, kemudian centang pada bagian
- “Prevent vulnerable images from running.” Untuk mengatur agar user tidak dapat Pull Images dengan kerentanan yang tinggi. Contohnya di level “Critical” (yang berbahaya sekali) atau yang Levelnya diatasnya lagi.
- “Vulnerability Scanning”. Untuk mengatur agar saat ada Push images akan secara otomatis di scanning.

5. Install Kubernetes Cluster
Pada langkah Installasi Kubernetes Cluster, bisa mengikuti dari Postingan saya K8S Kubernetes. Sudah ada juga penjelasan terkait Kubernetes Cluster. Pastikan Anda membaca panduan tersebut agar mendapatkan pemahaman yang menyeluruh sebelum melanjutkan untuk langkah berikutnya.
6. Configuration SSL Certificate ke Cluster Kubernetes
Note: jalankan pada Node Master dan Worker
- Mengatur letak SSL Certificate untuk containerd pada semua Node yang ada di Cluster Kubenetes.
~$ sudo mkdir -p /etc/containerd/certs.d/ ~$ sudo mkdir -p /etc/containerd/certs.d/<IP or Domain_registry>/ # Example ~$ sudo mkdir -p /etc/containerd/certs.d/10.18.18.40:8443/
- Menambahkan / Copy SSL Certificate yang ada di Node Harbor atau yang digunakan oleh Harbor ke semua Node yang ada di Cluster Kubernetes.
~$ sudo nano /etc/containerd/certs.d/10.18.18.40:8443/са.crt -----BEGIN CERTIFICATE----- MIID6jCCAtKgAwIBAgIUJ@ipQt1@mbC+oFh7HqornSJ2UxAwDQYJKoZIhvcNAQEL ... eE6/aLPRXcF/72YD3eoER35h/@tnlPuuZTK7iCfYPOFTEsfa@cXGzRtXb2vV4A= -----END CERTIFICATE----- ~$ sudo nano /etc/containerd/certs.d/10.18.18.40:8443/ca.key -----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDHj+SCxIwcgBlM ... Vkauk44NJ+0iyBPIzizD6qmY -----END PRIVATE KEY-----
7. Konfigurasi kubernetes untuk Pull images ke Harbor
Note: jalankan pada Node Master
- Atur untuk Credentials Harbor registry dengan secret. Yang nantinya akan digunakan saat membuat Pod atau saat Pull Images ke Registry tertentu.
~$ kubectl create secret docker-registry <name Secret> \ --docker-server=<IP or Domain Registry> \ --docker-username=<User> \ --docker-password=<Password user> \ --docker-email=<email for user>
8. Konfigurasi Notifikasi Otomatis dari Hasil Scan Harbor ke Slack
- Login ke Website Slack, Buat akun baru jika belum ada.

- Lalu isi nama untuk Company atau Team yang sesuai, contoh “Harbor Vuln Scan”.

- Nama untuk user sendiri, contoh “Najwan”.

- Dibagian ini pilih yang “skip this step” jika tidak ingin invite user lain ke Slack.

- Lalu isi nama untuk Channel nya, contoh “Harbor Vuln”.

- Lalu pilih yang “Start with the limit free version” kalau ingin menggunakan yang gratis.

- Lalu klik pada titik tiga di kanan atas, lalu klik yang “Edit Settings”.

- Lalu pilih yang “Integrations”, lalu klik “Add an App”.

- Lalu klik “Manage Apps…” di bagian kiri atas.

- Lalu pilih “Build” di kanan atas.

- Lalu klik “Create an App”.

- Lalu pilih yang “From scratch” untuk lebih mudah, karena tidak perlu membuat template. Kalau “From a manifest” kita perlu membuat template dengan format “json” atau “YAML”.

- Lalu isi untuk nama App nya dan pilih Workspace yang sesuai. Lalu klik “Create App”.

- Lalu setalah selesai membuat app, kita perlu membuat untuk endpoint webhook agar Harbor dapat mengirim ke Slack, dengan pilih “Incoming WebHooks”, lalu aktifkan “Activate Incoming WebHooks”.

- Lalu scroll kebawah, lalu klik “Add New WebHook to Workspace”.

- Lalu pilih tempat untuk mengirim pesan dari WebHook nya, bisa ke Channel dari Slack, atau Direct Message ke user tertentu. Contoh misalkan ke channel “harbor-vuln”.

- Lalu copy link yang sudah di berikan.

- Lalu login ke Harbor dengan user “admin” dengan password yang sesuai. Pilih project yang ingin di konfigurasi. Contoh “testing”.

- Lalu pilih “Webhooks”, lalu klik “+ New WebHook”.

- Lalu isikan data berikut :
- Nama WebHook.
- Deskripsi apabila ada.
- Pada bagian “Notify Type” pilih yang “Slack”.
- Pada bagian “Event Type” untuk memilih saat apa Harbor mengirim notif ke Slack (Trigger), centang pada bagian:
- Scanning failed.
- Scanning stopped.
- Scanning finished.
- Isikan Endpoint URL sesuai dari slack pada step sebelumnya.

9. Konfigurasi SSH ke semua Node
- Login ke Slack, lalu pergi ke pengaturan App, atau lewat link ini. Lalu pilih App yang sesuai, contohnya “python-harbor”.

- lalu pilih yang “OAuth & Permissions”.

- Lalu Scroll kebawah sampai ke bagian “Scopes”, lalu pilih “Add an QAuth Scope”, lalu pilih yang “chat:write” untuk mengatur role agar dapat menulis pesan atau chat.

- Lalu Scroll ke atas sampai di bagian “OAuth Tokens”, lalu “Install to Harbor Vuln Scan”.

- Lalu pada bagian ini klik “Allow”.

- Lalu Copy “Bot User OAuth Token”.

-
Ambil Sample aplikasi sederhana untuk filter data hasil Scanning Trivy dari Harbor dan nanti akan dikirim ke Slack di github ini. Lalu sesuaikan untuk data berikut ini.
token_slack = "TOKEN_OAUTH" channel_id = "CHANNEL_ID_SLACK" name_bot = "NAME_BOT"
- Install Library yang dibutuhkan Python.
~$ sudo pip3 install -r requirement.txt ~$ sudo cp main.py /usr/local/bin/
- Copy file service ke “/etc/system/system/”.
~$ sudo cp python-slack.service /etc/systemd/system/
- Copy file “main.py” ke “/usr/local/bin/”, menyesuaikan dari konfigurasi yang ada di file service nya.
~$ sudo cp main.py /usr/local/bin/
- Reload system daemon untuk update service. Lalu start dan lihat status service yang sudah di Copy tadi.
~$ sudo systemctl daemon-reload ~$ sudo systemctl start python-slack.service ~$ sudo systemctl status python-slack.service
Hasil Akhir Project
Notifikasi Tanpa menggunakan Program Pyhon

Notifikasi Menggunakan Program Python

Tidak Bisa Pull Images jika level Vulnerability Critical atau yang lebih tingggi
