인증서 만료 모니터링

인증서 만료 모니터링

Consul에서 인증서 만료를 모니터링하여 만료된 인증서로 인한 서비스 중단을 방지하는 방법을 설명해 드릴게요. Consul이 제공하는 내장 인증서 텔레메트리를 살펴볼게요.

출처: 문서

본문

이 문서는 Consul에서 인증서 만료를 모니터링하여 만료된 인증서로 인한 서비스 중단을 방지하는 방법을 설명해요.

개요

Consul은 서비스 메시 배포에서 여러 유형의 인증서를 관리해요:

  • CA 루트 인증서 (CA Root Certificates): 기본 루트 인증 기관
  • 중간 인증서 (Intermediate Certificates): 리프 인증서를 발급하는 데 사용되는 서명 인증서
  • 리프 인증서 (Leaf Certificates): 워크로드의 서비스 ID 인증서
  • 에이전트 TLS 인증서 (Agent TLS Certificates): 안전한 에이전트 통신용 인증서

인증서를 제때 갱신하지 않으면 서비스 중단이 발생할 수 있어요. Consul은 이러한 문제가 중단을 일으키기 전에 인증서 만료와 갱신 상태를 추적하는 데 도움이 되는 내장 인증서 텔레메트리를 제공해요.

구성

인증서 텔레메트리는 기본적으로 활성화돼요. 에이전트 구성에서 임계값과 동작을 사용자 지정할 수 있어요.

이 예시는 인증서 만료 텔레메트리를 활성화하고 인증서 관련 모니터링 및 로그 출력에 사용되는 경고 및 중요 임계값을 설정해요.

HCL / JSON

telemetry {
  certificate {
    enabled = true
    cache_duration = "5m"
    critical_threshold_days = 7
    warning_threshold_days = 30
    info_threshold_days = 90
    exclude_auto_renewable = false
  }
}
{
  "telemetry": {
    "certificate": {
      "enabled": true,
      "cache_duration": "5m",
      "critical_threshold_days": 7,
      "warning_threshold_days": 30,
      "info_threshold_days": 90,
      "exclude_auto_renewable": false
    }
  }
}

모니터링 워크플로

인증서 만료 텔레메트리를 모니터링하는 네 가지 방법이 있어요:

  1. 에이전트 metrics 엔드포인트 쿼리
  2. CA roots API에서 NotAfter 타임스탬프 쿼리
  3. 에이전트 로그 모니터링
  4. Prometheus 알림 구성

에이전트 metrics 엔드포인트

Consul은 기존 /agent/metrics 엔드포인트를 통해 인증서 관련 지표를 내보내요. 스크랩하기 쉬운 형태로 인증서 지표를 검색하려면 Prometheus 형식을 사용해 주세요.

Consul 에이전트에서 인증서 관련 지표를 요청하려면 다음 명령을 사용해 주세요:

$ curl http://127.0.0.1:8500/v1/agent/metrics?format=prometheus

예시 응답:

consul_mesh_active_root_ca_expiry{datacenter="dc1"} 864000
consul_mesh_active_signing_ca_expiry{datacenter="dc1"} 259200
consul_agent_tls_cert_expiry{datacenter="dc1",partition="default",node="server-1"} 950400
consul_leaf_certs_cert_expiry{datacenter="dc1",partition="default",namespace="default",service="web",kind=""} 86340
consul_leaf_certs_cert_renewal_failure{datacenter="dc1",partition="default",namespace="default",service="web",kind="",reason="rate_limited"} 1

루트 및 서명 CA 만료 지표는 리더 측 모니터가 내보내요. 비리더 또는 시작 중에는 리더가 이를 업데이트할 때까지 이 값에 대해 일시적으로 NaN이 표시될 수 있어요.

CA roots API

정확한 CA 루트 만료 타임스탬프를 보려면 CA roots API 중 하나를 쿼리해 주세요:

  • /connect/ca/roots
  • /agent/connect/ca/roots

이 응답에는 반환된 CA 루트에 대한 NotAfter 필드가 포함돼요.

에이전트 로그

Consul은 인증서 만료 경고를 서로 다른 심각도 수준으로 기록해요:

  • CRITICAL
  • WARNING

consul monitor CLI 명령을 사용하여 에이전트의 로그를 반환해 주세요. Consul 에이전트의 구성 파일에서 로그 동작을 구성할 수 있어요.

Prometheus 지표

Consul은 인증서 만료에 대해 다음 Prometheus 지표를 내보내요:

  • consul_mesh_active_root_ca_expiry: 루트 CA 만료(초 단위)
  • consul_mesh_active_signing_ca_expiry: 서명 CA 만료(초 단위)
  • consul_agent_tls_cert_expiry{node="server-1"}: 에이전트 TLS 인증서 만료(초 단위), 노드별로 레이블 지정
  • consul_leaf_certs_cert_expiry{service="web",kind=""}: 리프 인증서 만료(초 단위), 서비스 및 kind별로 레이블 지정
  • consul_leaf_certs_cert_renewal_failure{service="web",kind="service",reason="rate_limited"}: 인증서 갱신 실패
  • consul_leaf_certs_renewal_success: 성공적인 리프 인증서 갱신 카운터
  • consul_leaf_certs_renewal_failed: rate limit이 아닌 리프 갱신 실패 카운터
  • consul_leaf_certs_renewal_failed_rate_limited: rate limit된 리프 갱신 실패 카운터
  • consul_leaf_certs_consecutive_rate_limit_errors: 연속 rate-limit 실패를 추적하는 게이지

이 지표를 사용하여 Prometheus에서 인증서 만료 알림을 구성할 수 있어요. 다음 구성 예시는 다음 시나리오에서 알림을 보내요:

  • 루트 CA가 7일 미만 후에 만료
  • 서비스에 대한 리프 인증서 갱신 실패
groups:
  - name: consul_certificates
    rules:
      - alert: ConsulCertificateExpiringSoon
        expr: consul_mesh_active_root_ca_expiry < (7 * 24 * 60 * 60)
        labels:
          severity: critical
        annotations:
          summary: "Consul root CA expires in less than 7 days"
          description: "Root CA expires in {{ $value | humanizeDuration }}"

      - alert: ConsulLeafCertRenewalFailure
        expr: consul_leaf_certs_cert_renewal_failure > 0
        labels:
          severity: warning
        annotations:
          summary: "Leaf certificate renewal failing for {{ $labels.service }}"
          description: "Service {{ $labels.service }} has renewal failures: {{ $labels.reason }}"

문제 해결

Consul의 인증서 만료 텔레메트리 기능을 사용할 때 다음 문제 중 하나가 발생하면 문제 해결 제안을 따라 주세요.

인증서가 나열되지 않음

지표에 인증서가 나타나지 않으면 다음 작업을 수행해 주세요:

  • 인증서 텔레메트리가 활성화되어 있는지 확인.
  • Consul이 인증서를 사용하는지 확인.
  • Prometheus가 Consul 지표를 수집하고 있는지 확인.
  • 다음 지표 방출 주기를 기다림. CA 인증서의 경우 매시간 발생해요.

인증서 갱신 실패

리프 인증서가 갱신 실패를 보이면:

  • 갱신 실패 지표의 reason 레이블 확인
  • CA 가용성 및 상태 확인
  • rate limiting 확인 및 필요 시 CSRMaxPerSecond 증가
  • 인증서 서명에 대한 ACL 권한 확인
  • 상세 오류 메시지에 대한 에이전트 로그 검토

루트 및 서명 CA 지표가 NaN 표시

루트 또는 서명 CA 만료 지표가 NaN을 표시하면 현재 리더를 스크래핑하고 있는지 확인하고, 시작 후 첫 값을 리더 측 모니터가 방출할 시간을 허용해 주세요.

더 알아보기 (Learn more)