프로메테우스를 사용하기 위해선 Security 기능을 적용해야한다.
본 포스트에서는 아래 항목들에 대해 다룬다.
두 방식 모두 --web.config.file 플래그를 통해 서비스 시작시 YAML 포맷의 Config 파일을 지정해 적용시킬 수 있다.
openssl req \
-x509 -newkey rsa:4096 \
-nodes \
-keyout private.key -out certificate.crt
cat web.yml
tls_server_config:
cert_file: /certs/certificate.crt
key_file: /certs/private.key
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target
[Service]
User=prometheus
Restart=on-failure
ExecStart=/home/prometheus/prometheus-2.35.0.linux-amd64/prometheus \
--config.file=/home/prometheus/prometheus-2.35.0.linux-amd64/prometheus.yml \
--storage.tsdb.path=/home/prometheus/prometheus-2.35.0.linux-amd64 \
--web.enable-lifecycle \
--web.config.file=/home/prometheus/prometheus-2.35.0.linux-amd64/config/web.yml
[Install]
WantedBy=multi-user.target
위 과정을 통해 웹서버의 모든 액세스는 tls로 변경된다.
다만, job별 scrape시의 TLS 통신은 job마다 별도로 지정해주어야 한다.
insecure_skip_verify 파라미터를 false로 지정하여 scrape시 TLS를 비활성화할 수 있다.
- job_name: 'kubernetes-apiservers'
kubernetes_sd_configs:
- role: endpoints
namespaces:
names:
- default
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
insecure_skip_verify: true
bcrypt를 통해 해싱된 패스워드를 웹 컨피그 파일에 지정하여 동작시킨다.
apt install python3-bcrypt
import getpass
import bcrypt
password = getpass.getpass("password: ")
hashed_password = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt())
print(hashed_password.decode())
$ python3 gen-pass.py
password:
$2b$12$92Do/EILnpDym2W2Cum1rO1tW.ze9U2aH1a9LEN.BmOUlk0v/w4vK
basic_auth_users:
dbaas: $2b$12$zlmXDDcIe6LejFjmijZHI.C0E5BgHZAggbwhJBrvau48i90POf0K6
$ ./promtool check web-config ./config/web.yml
./config/web.yml SUCCESS
systemctl restart prometheus.service
$ curl http://localhost:9090/metrics
Unauthorized
$ curl -u dbaas http://localhost:9090/metrics
Enter host password for user 'dbaas':
# HELP go_gc_cycles_automatic_gc_cycles_total Count of completed GC cycles generated by the Go runtime.
# TYPE go_gc_cycles_automatic_gc_cycles_total counter
go_gc_cycles_automatic_gc_cycles_total 6
# HELP go_gc_cycles_forced_gc_cycles_total Count of completed GC cycles forced by the application.
# TYPE go_gc_cycles_forced_gc_cycles_total counter