Skip to content

feat: ES TLS 검증을 CA 번들 경로로 켤 수 있게 한다

변재혁 requested to merge feature/DOP_AI_es_인증 into develop

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 로 코드 재배포 없이 롤백된다.

⚠️ CA 마운트(dop-ai-elasticsearch-es-http-certs-public 의 ca.crt)가 먼저 또는 같은 롤아웃에 반영돼야 한다. 없이 배포하면 지식 잡과 /search 가 전건 실패한다.

stg/prod 는 건드리지 않았다 — test_stg_matches_prod 가 두 환경의 동일성을 강제하므로 같은 MR 에서 함께 바꿔야 한다.

Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com

Merge request reports