831. mTLS (Mutual TLS) - 마이크로서비스 간 신뢰 통신 양방향 자격 증명 체계
핵심 인사이트: 은행 앱에 접속할 때, 우리는 브라우저(TLS)를 믿고 접속한다. 브라우저가 은행 서버의 '신분증(인증서)'을 검사하기 때문이다. 하지만 은행 서버는 내 얼굴(클라이언트)이 진짜인지 검사하지 않고 그냥 아이디/비밀번호만 맞으면 통과시켜 준다(단방향). 그런데 클라우드 안에서 서버(마이크로서비스) 100대가 서로 통신할 때도 이렇게 할까? 아니다. 해커가 100대 중 1대라도 장악하면 사내망이 털리기 때문에, "나도 네 신분증 검사할 건데, 너도 내 신분증 검사해! 쌍방향으로 신분증 까고 맞을 때만 통신해!"라는 미치도록 깐깐한 상호 불신(제로 트러스트) 방어벽을 쳐야 한다. 이것이 mTLS다.
Ⅰ. 기존 TLS(단방향) 통신의 맹점
- TLS (HTTPS): 인터넷의 절대 표준입니다. 클라이언트(내 폰)가 서버(네이버)에 접속할 때, 서버가 나에게 전송한 **인증서를 내 폰이 검사(단방향 인증)**하여 가짜 사이트인지 판별합니다.
- MSA 환경의 문제점: 쿠버네티스 안에서 [결제 컨테이너]가 [DB 컨테이너]에 접속할 때 일반 TLS를 쓰면, DB는 결제 컨테이너가 보낸 비밀번호만 믿지 그 놈이 진짜 사내 결제 컨테이너인지, 아니면 외부에서 몰래 잠입한 해커 컨테이너인지 검증할 방법이 없습니다.
Ⅱ. mTLS (Mutual TLS, 상호 TLS)의 개념과 강력함 🌟
- 개념: 클라이언트와 서버가 연결을 맺을 때, 서버만 신분증을 보여주는 것이 아니라 클라이언트와 서버 양쪽(Mutual)이 서로에게 자신의 X.509 디지털 인증서를 제시하고, 상대방이 진짜 우리 회사 내부 시스템이 맞는지 양방향으로 깐깐하게 검증한 뒤에야 암호화 통신 터널을 뚫어주는 통신 구조입니다.
완벽한 제로 트러스트(Zero Trust)의 실현
- 쿠버네티스 노드 10대가 하나의 가상 사설망(VPC)으로 묶여있다고 안심하지 않습니다(네트워크 경계 무시).
- IP 주소를 조작(Spoofing)한 해커가 통신을 찔러도, 해커는 우리 회사 중앙 보안실(CA)에서 발급받은 '합법적 클라이언트 인증서'가 없기 때문에 첫 악수(Handshake) 단계에서 즉각 연결이 끊기고 쫓겨납니다.
Ⅲ. 서비스 메시(Istio)와 mTLS의 기적 같은 결합 🌟
mTLS가 완벽하긴 한데, 개발자들이 100개의 앱(결제, 로그인 등)마다 이 인증서 발급과 검증 코드를 직접 짜 넣어야 한다면 아무도 안 씁니다(인증서 만료 관리 지옥).
- Istio의 구원 (829번 문서):
- 829번에서 배운 서비스 메시의 Citadel (보안관 컨트롤러) 모듈이 이 지옥을 완벽히 해결합니다.
- 관리자가 쿠버네티스에
mTLS: STRICT (강제 적용)옵션을 켜면 마법이 일어납니다. - 앱 코드는 평문(HTTP)으로 대화합니다. 그런데 밖으로 나가려는 찰나, 옆방의 Envoy 사이드카 프록시가 그 평문을 낚아챕니다.
- Envoy 프록시는 Citadel이 매일 아침 몰래 발급해 준 초단기(예: 1시간짜리) 인증서를 꺼내 들어, 상대방 Envoy 프록시와 0.1초 만에 상호 인증(mTLS)을 끝내고 암호화 터널로 데이터를 쏴줍니다.
- 인증서가 만료되면 갱신(Rotation)하는 것도 사이드카 요원들이 알아서 다 합니다. 개발자는 코드 한 줄 안 짜고 망 전체가 군사급 암호망으로 둔갑합니다.
Ⅳ. mTLS 도입의 뼈아픈 트레이드오프 (오버헤드)
- 핸드셰이크 지연 (Latency): 단방향 검사에 비해 양쪽이 인증서를 주고받고 서명 검증을 하느라 첫 통신 연결 시간이 더 오래 걸립니다. (CPU 암호화 연산 부하 상승)
- 디버깅 지옥: 평문이 아니라 군사급 암호화가 되어 날아다니기 때문에, 통신이 꼬였을 때 관리자가 덤프(Wireshark)를 떠서 원인을 분석하기가 미친 듯이 어려워집니다.
📢 섹션 요약 비유: 일반 TLS는 '신분증 검사받는 나이트클럽'입니다. 손님(클라이언트)은 나이트클럽(서버) 간판을 확인하고 안심해서 들어가고, 클럽 기도는 손님 신분증을 봅니다(단방향). 하지만 한 번 들어가서 안에서 노는 손님들끼리 누구인지 검사하진 않습니다. mTLS는 국방부 1급 비밀 벙커의 '쌍방향 검열소'입니다. 벙커 안의 직원(마이크로서비스)들끼리 서류를 주고받을 때조차, 복도에서 서로를 만나면 A가 B의 군번줄을 스캔하고, 동시에 B도 A의 군번줄을 스캔해서 양쪽이 완벽하게 승인된 내부자임을 확인한 뒤에야 금고에서 서류를 꺼내 건네줍니다(상호 인증). 이 철통 방어 덕분에 설령 스파이(해커)가 벽을 뚫고 벙커 안에 잠입했다 하더라도 군번줄(인증서)이 없어 아무 서류도 빼낼 수 없습니다.