# ============================================================================= # vmauth — PaaSup 커스텀 오버라이드 (Keycloak JWT/OIDC 멀티테넌시) # 차트: victoria-metrics/victoria-metrics-auth # 포트: 8427 / 역할: vmselect·vlselect 앞단 인증·라우팅 프록시 # # 인증 모델: 전면 JWT/OIDC (vmauth v1.138.0+, Enterprise 아님) # - 클라이언트는 Keycloak이 발급한 액세스 토큰(JWT)을 Bearer로 제시 # - vmauth가 jwt.oidc.issuer Discovery로 공개키를 자동 fetch/rotate → 서명 검증 # - 토큰의 vm_access 클레임(metrics_account_id 등)으로 테넌트를 동적 라우팅 # - 테넌트 추가 = Keycloak 그룹/attribute 추가만 → vmauth 재배포 불필요 # # Keycloak 측 준비: vm_access 클레임을 주입하는 Protocol Mapper 필요 # {"vm_access": {"metrics_account_id": , "logs_account_id": }} # 자세한 절차는 CUSTOM-README.md 참조. # ============================================================================= replicaCount: 1 resources: requests: cpu: 50m memory: 64Mi limits: cpu: 200m memory: 128Mi config: users: # ── 권장: Keycloak JWT 검증 + vm_access 동적 라우팅 ────────────────────── # 모든 사용자/팀이 단일 항목을 공유한다. 테넌트 구분은 토큰의 vm_access 클레임이 담당. - jwt: oidc: # 배포 환경에 항상 존재하는 paasup realm 사용 (realm 신규 생성 금지) issuer: "https://keycloak.example.org/realms/paasup" url_map: # 메트릭(PromQL): vm_access.metrics_account_id → URL 경로 /select/{accountID}/ (경로 기반 격리) - src_paths: ["/api/v1/.*"] url_prefix: "http://vmcluster-victoria-metrics-cluster-vmselect.monitoring.svc.cluster.local:8481/select/{{.MetricsAccountID}}/prometheus" # 로그(LogsQL): vlselect + AccountID 헤더 (VictoriaLogs는 헤더 기반 테넌트 격리) - src_paths: ["/select/logsql/.*"] url_prefix: "http://vlogs-victoria-logs-cluster-vlselect.monitoring.svc.cluster.local:9471" headers: - "AccountID: {{.LogsAccountID}}" - "ProjectID: 0" # ── 대안(주석): 정적 basic-auth ────────────────────────────────────────── # 토큰을 사용할 수 없는 CI/레거시 클라이언트에 한해 추가한다. 평문 금지 → %{ENV_VAR} 치환 사용. # - username: ci-bot # password: "%{CI_BOT_PASSWORD}" # url_map: # - src_paths: ["/api/v1/.*"] # url_prefix: "http://vmcluster-victoria-metrics-cluster-vmselect.monitoring.svc.cluster.local:8481/select/9000/prometheus" # 주의: unauthorized_user를 두지 않는다. 두면 무토큰/무효토큰 요청이 해당 accountID로 # 무인증 접근되어 격리가 약해진다(E2E에서 acct0 200 확인). vmalert는 vmselect에 직결하므로 # vmauth 폴백이 불필요 → 모든 vmauth 접근은 유효 JWT를 요구(미인증=401).