Sobes.tech
Middle+

Aké máte skúsenosti s nastavením cyklického monitorovania stavu certifikátu a jeho automatickej výmeny v DevOps?

sobes.tech AI

Odpoveď od AI

Pre monitorovania certifikátov používam kombináciu nástrojov. Hlavné sledovanie stavu a doby platnosti certifikátov na webových serveroch a službách sa realizuje prostredníctvom:

  1. Prometheus Exporters:

    • ssl exporter: Zbiera metriky o dobách platnosti certifikátov z uvedených endpointov.
    • node exporter (v spojení s textovými súbormi): Môže sa použiť na monitorovanie súborov certifikátov na súborovom systéme.

    Skripty v Bash alebo Python pravidelne kontrolujú stav certifikátov (napríklad pomocou openssl x509 -in cert.pem -noout -enddate) a zapisujú výsledok do formátu, ktorý rozumie node exporter (textfile collector).

  2. Alertmanager:

    • Nastavujem pravidlá v Alertmanageri na spustenie upozornení (napríklad 30, 7 a 1 deň pred vypršaním) na základe metrík z Promethea.
    • Upozornenia sa odosielajú do Slacku, e-mailu alebo iných komunikačných kanálov.

Automatická výmena certifikátov sa zvyčajne realizuje pomocou ACME klientov ako sú certbot alebo lego.

  1. Plánovanie úlohy: Cron úlohy alebo systémové časovače (systemd timers) spúšťajú ACME klienta na kontrolu a aktualizáciu certifikátov.

    # Príklad cron záznamu pre certbot
    0 */12 * * * root certbot renew --quiet --standalone --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx"
    
  2. Automatizácia cez CI/CD: Pre zložitejšie scenáre alebo prostredia s Kubernetes môže byť proces aktualizácie certifikátov integrovaný do CI/CD pipeline.

    • Napríklad pri použití v Kubernetes klastre s objektmi Ingress s TLS, správca certifikátov typu cert-manager automatizuje vydávanie a aktualizáciu Let's Encrypt certifikátov pomocou Controlleru a vlastných Resource Definitions (CRD).
    # Príklad Ingress s anotáciami pre cert-manager
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-ingress
      annotations:
        cert-manager.io/cluster-issuer: "letsencrypt-prod"
    spec:
      tls:
      - hosts:
        - example.com
        secretName: example-com-tls
      rules:
      - host: example.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-service
                port:
                  number: 80
    
  3. Aktualizácia konfigurácií: Po úspešnej aktualizácii certifikátov skripty alebo pipeline reštartujú alebo prečítajú konfigurácie služieb (webových serverov, load balancerov), aby začali používať nový certifikát.

Kombinácia monitorovania a automatizácie minimalizuje riziko zlyhania služieb kvôli vypršaniu certifikátov.