feat: ES TLS 검증을 CA 번들 경로로 켤 수 있게 한다
verify_ssl 이 bool 만 받아 ECK 자기서명 CA 를 신뢰시킬 방법이 없었다. 공개 CA 번들에는 체인이 없어 true 로는 검증이 통과하지 않는다(보안 감사 #2).
- ElasticsearchConfig.verify_ssl 을 bool | str 로 넓혀 CA 번들 경로를 받는다. _expand_env_vars 가 re.sub 기반이라 ${ES_VERIFY_SSL:-false} 결과가 항상 문자열이므로, bool 문자열을 되돌리는 before 검증기를 함께 둔다.
- es._resolve_verify_ssl 이 경로를 SSLContext 로 해석한다. 빈 문자열은 False 가 아니라 True 폴백이고, 경로가 틀리면 FileNotFoundError 로 터진다(fail-closed). 캐시하지 않는다 — ECK 가 CA 를 교체하면 옛 CA 를 물고 있게 된다.
- 검증이 꺼져 있으면 WARNING 을 남긴다. 클라이언트가 잡/요청마다 새로 생성되므로 프로세스당 1회로 제한한다(파드 기동당 1줄).
dev 는 검증 ON 이 기본이다(${ES_VERIFY_SSL:-/etc/es-certs/ca.crt}). 이 경로는 예시 겸 기본값이고, 실제 마운트 경로/파일명은 인프라가 정해 env 로 덮어쓴다. 사고 시 ES_VERIFY_SSL=false 로 코드 재배포 없이 롤백된다.
stg/prod 는 건드리지 않았다 — test_stg_matches_prod 가 두 환경의 동일성을 강제하므로 같은 MR 에서 함께 바꿔야 한다.
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com