Mengapa kita perlu enkripsi?
Enkripsi dibutuhkan agar komunikasi antara prometheus server dan node exporter terenkripsi, karena default protokol yang digunakan HTTP maka data yang diambil ke prometheus server akan berbentuk plaintext sehingga tidak aman maka kita perlu enkripsi dengan TLS
Mengapa kita perlu autentikasi?
Autentikasi diperlukan untuk keamanan, secara default metrics yang di ekspose oleh node_exporter bisa diakses oleh semua orang sehingga tidak aman, siapapun bisa mengambil metrics dari server kita. Sebelum autentikasi kita bisa mengamankannya dengan firewall, caranya dengan membuat rule metrics server hanya boleh di akses oleh prometheus server kita. Untuk autentikasi nantinya kita gunakan auth basic
Setup SSL/TLS
Lakukan di server node_exporter, buat sertifikat ssl dengan openssl(self-signed) atau jika server kita publik bisa menggunakan let’s encrypt
Buat Certificate Authority sendiri
cd /etc/ssl
openssl req -new -x509 -nodes -days 365 -out cacert.pem -keyout cakey.pem -extensions v3_ca -subj “/C=ID/ST=Madiun/L=East Java /O=ARYA /OU=IT/CN=ARYA CA
Buat Certificate Signing Request
openssl req -new -nodes -out certs/nodes.csr -keyout private/nodes.key -subj “/C=ID/ST=Madiun/L=East Java/O=ARYA/OU=IT/CN=IP/Domain”
Membuat SAN (Subjectl Alternative Names)
Buat file san.cnf
vim san.cnf
.....
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = nodes
IP.1 = 10.23.2.110
.....
Tanda Tangan sertifikat
openssl x509 -req -in certs/nodes.csr -out certs/nodes.crt -CA cacert.pem -CAkey cakey.pem -days 3650 -extfile san.cnf -CAcreateserial
Sertifikat berhasil dibuat!
Selanjutnya kita pasang di node_exporter
Bagaimana caranya? pertama kita buat dulu folder konfigurasi node_exporter
mkdir /etc/node_exporter
Salin sertifikat yang tadi dibuat ke direktori /etc/node_exporter
cp /etc/ssl/certs/nodes.crt /etc/node_exporter
cp /etc/ssl/private/nodes.key /etc/node_exporter
Lalu buat file config.yml yang berisi konfigurasi SSL untuk node_exporter
vim /etc/node_exporter/config.yml
.....
tls_server_config:
cert_file: nodes.crt
key_file: nodes.key
.....
Ubah kepemilikan folder /etc/node_exporter menjadi user node_exporter
chown -R node_exporter:node_exporter /etc/node_exporter
Selanjutnya ubah ExecStart pada service systemd node_exporter
vim /etc/systemd/system/node_exporter.service
.....
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter --web.config.file=/etc/exporter/config.yml
[Install]
WantedBy=multi-user.target
.....
Arahkan –web.config.file ke file config.yml yang tadi dibuat
Lakukan daemon-reload
systemctl daemon-reload
Restart service node_exporter
systemctl restart node_exporter
Cek service node_exporter pastikan sudah running (tidak ada error,dll)
Lanjut setelah itu kita ubah konfigurasi di prometheus servernya, di bagian jobs
vim /etc/prometheus/prometheus.yml
.....
- job_name: "node-jenkins"
scheme: https
tls_config:
ca_file: /etc/prometheus/cacert.pem
insecure_skip_verify: true
.....
Yang kita tambahkan yaitu CA file yang tadi dibuat di server node_exporter, lalu jika kita menggunakan SSL yang dibuat sendiri (self-signed) parameter insecure_skip_verify kita isi dengan true
Sebelum melakukan restart kita transfer dulu file CA tadi dari server node_exporter ke server prometheus
scp /etc/ca/cacert.pem root@serverprometheus:/etc/prometheus/
Lalu lakukan restart service prometheus
systemctl restart prometheus
Cek dari Prometheus Web dibagian Status > Targets , pastikan tidak ada warning/error

Setup SSL/TLS berhasil dilakukan!!
Setup Autentikasi dengan Basic Auth
Install paket httpd-tools(Red Hat Based) atau apache2-utils(Debian Based) untuk membuat password yang terenkripsi dengan tools htpasswd
apt install apache2-utils -y
Generate password, sebagai contoh disini password yang kita buat yaitu prometheus
echo "prometheus" | htpasswd -inBC 10 "" | tr -d ':\n'
perintah tr -d untuk menghilangkan karakter whitespace
Salin hasilnya, lalu edit file config.yml di direktori /etc/node_exporter
vim /etc/node_exporter/config.yml
.....
tls_server_config:
cert_file: exporter.crt
key_file: exporter.key
basic_auth_users:
prometheus: $2y$10$s.3UPXqxZOVCy5mNEdRnG.25pTxYyspFP6Ho2cTeaDljdNQ0WTBD6
.....
Tambahkan konfigurasi basic_auth_users dengan format username:password
Untuk username bebas disini saya menggunakan prometheus dan masukkan password yang dibuat tadi
Lakukan restart service node_exporter
systemctl restart node_exporter
Cek di Prometheus Web dibagian Status > Targets, ketika kita menambahkan autentikasi di node_exporter, prometheus server kita tidak bisa langsung terkoneksi

Selanjutnya kita tambahkan username dan password di prometheus server
Edit file konfigurasi prometheus
vim /etc/prometheus/prometheus.yml
.....
- job_name: "node-jenkins"
scheme: https
tls_config:
ca_file: /etc/prometheus/cacert.pem
insecure_skip_verify: true
basic_auth:
username: prometheus
password: prometheus
.....
Setelah menambahkan username dan pasword, lalu kita restart service prometheusnya
systemctl restart prometheus
Cek lagi di Prometheus Web

Selanjutnya apa lagi?? stay tune terus