[아키텍처] kt cloud PLATFORM 보안 거버넌스의 수립: Vault 도입과 효율적인 시크릿 전달 전략 (ESO & CSI)

Tech Story/DevOps & Container

[아키텍처] kt cloud PLATFORM 보안 거버넌스의 수립: Vault 도입과 효율적인 시크릿 전달 전략 (ESO & CSI)

 

 
[ kt cloud Foundation플랫폼팀 이지은 님 ]

📋 요약

이 글에서는 GitOps 환경에서 발생하는 시크릿 보안 문제를 해결하기 위해 HashiCorp Vault를 도입하고,

ESO와 CSI Provider를 활용한 두 가지 시크릿 전달 전략을 다룹니다.

보안 거버넌스를 플랫폼 수준에서 내재화함으로써 개발자의 부담을 줄이고

대규모 MSA 환경에서의 운영 안정성과 규정 준수 수준을 높이는 방향을 정리합니다.

#HashiCorpVault #ExternalSecretsOperator #CSIProvider #시크릿관리 #보안거버넌스


1. GitOps의 딜레마: 모든 것을 코드로, 하지만 비밀은 빼고?

[아키텍처] kt cloud PLATFORM 보안 거버넌스의 수립 Vault 도입과 효율적인 시크릿 전달 전략 (ESO & CSI)

우리는 지난 아티클에서 Helm과 ArgoCD를 통해 인프라의 상태를 코드로 정의하는 선언적 배포 체계를 완성했습니다. 하지만 실무에 적용하는 순간 거대한 벽에 부딪힙니다. 바로 시크릿(Secret)입니다.

 

Kubernetes의 Kind: Secret은 Base64로 인코딩될 뿐, 평문과 다름없습니다. 이를 그대로 Git 저장소에 푸시하는 것은 '보안'이라는 현관문 열쇠를 누구나 볼 수 있는 문 앞 매트 아래에 두는 것과 같습니다.

 

특히 2026년 kt cloud PLATFORM이 지향하는 대규모 마이크로서비스(MSA)와 AI Foundry의 고도화된 연동 환경에서는 기존 방식이 다음과 같은 치명적인 한계를 드러냅니다.

  • 파편화된 보안: 팀별, 클러스터별로 흩어진 시크릿은 통합적인 보안 정책 적용을 어렵게 합니다.
  • 평문 노출의 위험: GitOps 파이프라인(Git 저장소)에 시크릿이 평문이나 단순 인코딩 상태로 저장될 위험이 상존합니다.
  • 감사(Audit)의 부재: 누가, 언제 보안 정보에 접근했는지 기록이 남지 않아 보안 사고 시 추적이 불가능합니다.

이러한 문제를 해결하기 위해, 우리는 모든 보안 정보를 암호화하여 중앙에서 통제하는 HashiCorp Vault를 도입했습니다.

 

비교 항목 기존 방식 (Static Secret) Vault 기반 관리
저장 위치 Git 저장소 또는 K8s 내부에 평문 노출 Vault 중앙 금고에 암호화 보관
보안 수준 한 번 유출되면 모든 시스템 위험 유출 시 즉시 차단 및 동적 비밀번호 발급 가능
운영 편의성 비번 변경 시마다 Pod 재시작 필요 실시간 감지(Drift Detection) 및 자동 반영
감사(Audit) 누가 조회했는지 알기 어려움 모든 접근 기록이 Vault에 로그로 남음
권한 제어 클러스터 단위의 광범위한 접근 Role 기반(RBAC)의 세밀한 최소 권한 부여

2. Vault 시크릿 전달의 두 가지 핵심 경로: ESO vs CSI Provider

기술적인 깊이로 들어가기에 앞서, 우리 시스템의 뼈대가 되는 개념을 먼저 짚어보겠습니다. HashiCorp Vault는 인증번호, API 키, DB 패스워드 등 민감한 정보를 한곳에 모아 보호하는 '중앙 집중형 보안 금고'입니다. 단순히 저장하는 것에 그치지 않고 '누가, 언제, 무엇을 조회했는지' 완벽하게 기록(Audit)하며, 유사시 자격 증명을 즉시 파기할 수 있는 강력한 통제력을 제공합니다.

 

중앙 금고를 안전하게 구축했다면, 이제 금고 안의 시크릿을 클러스터 내부의 Pod까지 안전하게 배달할 차례입니다. 현재 kt cloud 인프라가 표준으로 채택하고 있는 두 가지 핵심 배달 방식의 원리와 차이점을 분석합니다.

2.1 External Secrets Operator (ESO): "유연한 동기화 중심의 배달"

ESO는 Vault라는 외부 금고의 데이터를 Kubernetes 내부의 Secret 객체로 복사 및 동기화해주는 전문 배달부입니다.

  • 작동 원리: Vault의 특정 경로를 실시간으로 감시(Polling/Watching)하다가 값이 변경되면, 연결된 Kubernetes Secret 리소스를 자동으로 업데이트합니다.
  • 장점: 애플리케이션 코드를 수정할 필요가 전혀 없습니다. 앱은 기존 방식대로 환경 변수나 볼륨 마운트를 통해 Kubernetes Secret을 읽기만 하면 되므로 전환 비용이 매우 낮습니다.
  • 적합한 케이스: 범용적인 웹 서비스, 레거시 애플리케이션의 클라우드 네이티브 전환, 그리고 환경 변수 기반의 설정이 주를 이루는 마이크로서비스 환경에 최적입니다.

2.2 Vault CSI Provider: "휘발성 메모리 직접 주입 방식"

CSI(Container Storage Interface) 방식은 시크릿을 Kubernetes 객체(etcd)로 저장하지 않습니다. 대신 Pod가 실행되는 런타임에 메모리 기반의 가상 디스크(tmpfs)에 시크릿을 직접 꽂아 넣는 방식입니다.

  • 작동 원리: Pod 정의(YAML)에 볼륨 마운트를 설정하면, Pod가 생성되는 찰나에 Vault에서 값을 가져와 지정된 경로에 임시 파일로 생성합니다.
  • 장점: 보안성이 극대화됩니다. 시크릿 데이터가 Kubernetes 데이터베이스(etcd)에 흔적을 남기지 않으며, Pod가 종료되는 즉시 메모리에서 소멸하여 데이터 유출 경로를 원천 차단합니다.
  • 적합한 케이스: 고도의 보안 규정을 준수해야 하는 금융 서비스, AI 모델 학습을 위한 고권한 API Key 관리, 그리고 데이터 보호가 최우선인 AI Foundry 워크로드에 필수적입니다.

3. 플랫폼 엔지니어를 위한 선택 가이드: ESO vs CSI Provider

두 방식은 상호 배타적이지 않으며, 서비스의 성격에 따라 혼용하는 것이 일반적입니다. kt cloud PLATFORM 환경에서 각 팀이 고려해야 할 판단 기준은 다음과 같습니다.

3.1 편의성과 호환성이 우선이라면: ESO (External Secrets Operator)

ESO는 기존의 개발 경험을 그대로 유지하면서 보안만 강화하고 싶은 팀에게 최적의 선택입니다.

  • 기존 자산 활용: 기존에 사용하던 Helm Chart나 YAML 매니페스트를 수정할 필요가 거의 없습니다. 환경 변수를 통해 시크릿을 읽는 대부분의 애플리케이션에 즉시 적용 가능합니다.
  • 높은 가용성: 시크릿이 이미 Kubernetes 내부에 복제되어 있으므로, 일시적인 Vault 장애나 네트워크 지연이 발생하더라도 애플리케이션은 중단 없이 구동됩니다.
  • 추천 상황: 대규모 MSA 환경에서 빠르게 보안 거버넌스를 확보해야 하거나, 기존의 레거시 애플리케이션을 클라우드로 마이그레이션할 때 권장합니다.

3.2 강력한 보안과 규정 준수가 우선이라면: CSI Provider

보안 사고의 가능성을 조금이라도 줄여야 하는 핵심 서비스나 규제 산업군에 있는 팀이라면 CSI 방식을 선택해야 합니다.

  • 최소 노출 원칙: 시크릿 데이터가 Kubernetes의 공용 데이터베이스인 etcd에 평문 형태로 저장되지 않습니다. 메모리상에만 존재하는 파일 형태로 주입되어 보안 취약점을 최소화합니다.
  • 정밀한 통제: Pod 단위로 시크릿 접근 권한을 세밀하게 제어할 수 있으며, Pod가 소멸하면 시크릿도 함께 즉시 사라집니다.
  • 추천 상황: 금융 서비스, AI 모델의 핵심 API Key 보호, 그리고 데이터 프라이버시가 엄격히 요구되는 AI Foundry 워크로드에 필수적입니다.

 

비교 항목 External Secrets Operator (ESO) Vault CSI Provider
저장 방식 K8s Secret 객체 생성 (etcd 저장) Pod 메모리 내 파일 마운트 (etcd 미저장)
애플리케이션 영향 무영향 (기존 환경 변수 그대로 사용) YAML 수정 필요 (Volume Mount 설정)
보안성 보통 (etcd 암호화 권장) 매우 높음 (휘발성 데이터 주입)
연동 편의성 높음 (GitOps 친화적) 보통 (Namespace별 별도 설정 필요)

4. 실무 적용 가이드: kt cloud 환경에서의 최적화 전략

Vault라는 강력한 도구를 도입하는 것보다 중요한 것은 이를 '안정적'이고 '투명'하게 운영하는 것입니다. 플랫폼 엔지니어가 실제 운영 환경에서 반드시 확보해야 할 세 가지 핵심 전략을 제안합니다.

4.1 인증의 추상화: "ID/PW가 없는 보안"

개별 애플리케이션이나 Pod가 Vault에 접근하기 위해 별도의 인증 정보를 소유하게 해서는 안 됩니다. 이는 또 다른 시크릿 관리 문제를 야기할 뿐입니다.

  • Kubernetes Auth Method 활용: Pod의 ServiceAccount와 Vault를 연동하여, 인프라 수준에서 자동 인증이 이루어지도록 설계해야 합니다.
  • 개발자 경험(DevEx) 개선: 개발자가 소스 코드 내에 보안 인증 로직을 직접 구현할 필요가 없도록 인증 과정을 추상화하여 제공하는 것이 플랫폼 엔지니어링의 핵심입니다.

4.2 고가용성(HA)과 장애 격리: "Single Point of Failure 방어"

Vault는 모든 시크릿의 원천(Source of Truth)이기에, Vault의 장애는 곧 전체 시스템의 마비로 이어질 수 있습니다.

  • 멀티 가용 영역(Multi-AZ) 배치: kt cloud의 인프라를 활용하여 Vault 노드를 여러 AZ에 분산 배치하고, Raft 합의 알고리즘 등을 통해 데이터 정합성과 가용성을 확보해야 합니다.
  • 장애 전파 차단: Vault 서버에 일시적인 문제가 생기더라도 이미 배포된 서비스는 중단되지 않아야 합니다. 이를 위해 ESO의 로컬 캐싱 기능을 활용하여, 비상시에도 기존 시크릿을 유지하는 'Fail-safe' 아키텍처를 구성해야 합니다.

4.3 최소 권한의 원칙: "엄격한 네임스페이스 격리"

중앙 집중형 관리의 가장 큰 위험은 권한 오남용입니다. 모든 Pod가 모든 시크릿에 접근할 수 있다면 보안의 경계는 무너집니다.

  • Vault Policy의 세밀한 설계: 특정 네임스페이스에서 구동되는 워크로드는 오직 자신에게 허용된 경로(Path)의 시크릿만 읽을 수 있도록 정책을 최소화해야 합니다.
  • 경로 표준화: projects/{team-name}/{env}/와 같이 표준화된 경로 규칙을 수립하여, 운영 효율성을 높이고 인가되지 않은 접근을 원천 차단해야 합니다.

5. 결론: 보안이 '공기'처럼 존재하는 플랫폼을 향해

지금까지 살펴본 Vault 도입과 시크릿 전달 체계는 단순한 도구의 변경이 아닙니다. 이는 보안을 '개별 팀의 숙제'에서 '플랫폼이 제공하는 서비스'로 전환하는 과정입니다.

 

kt cloud PLATFORM 과 AI Foundry 환경에서는 수많은 마이크로서비스와 AI 워크로드가 복잡하게 얽히게 됩니다. 이러한 대규모 인프라에서 Vault와 ESO, CSI Provider의 조합은 보안의 복잡성을 낮추는 핵심 인프라가 될 것입니다.

 

결국 플랫폼 엔지니어링의 지향점은 명확합니다. 개발자가 보안 설정에 에너지를 쏟지 않아도 인프라 수준에서 강력한 가드레일이 작동하는 환경을 만드는 것입니다. 보안이 공기처럼 당연하게 존재하여, 개발자는 오직 비즈니스 로직과 모델 개발에만 전념할 수 있는 'Seamless'한 플랫폼을 향해 kt cloud는 계속 진화할 것입니다.

 

kt cloud 플랫폼 바로가기

❓ 자주 묻는 질문 (FAQ)

Q. 이미 Kubernetes Secret을 잘 사용하고 있는데, 왜 굳이 Vault를 추가로 도입해야 하나요? 
A: Kubernetes Secret은 기본적으로 etcd에 인코딩된 상태로 저장되며, 접근 제어가 클러스터 단위로 제한적입니다. kt cloud NEXT와 같은 멀티 클러스터/멀티 테넌트 환경에서는 중앙 집중화된 감사 로그(Audit Log) 기록과 유효 기간이 지나면 자동 파기되는 동적 시크릿(Dynamic Secrets) 기능이 필수적입니다. Vault는 단순 저장소가 아닌 '중앙 보안 거버넌스 엔진' 역할을 수행하여 보안 사고의 리스크를 근본적으로 낮춰줍니다.
Q. ESO와 CSI Provider 중 하나만 선택해야 하나요? 
A: 아닙니다. 두 방식은 상호 보완적입니다. 일반적인 설정값이나 호환성이 중요한 앱은 ESO를 통해 환경 변수로 주입하고, 금융 데이터 접근용 API Key나 DB 인증서처럼 메모리 수준의 보호가 필요한 핵심 데이터는 CSI Provider를 사용하는 '하이브리드 전략'이 실제 엔터프라이즈 환경에서 가장 권장되는 패턴입니다.
Q. Vault 서버 자체가 장애가 나면 모든 서비스가 중단되는 것 아닌가요? 
A: 플랫폼 엔지니어는 이를 대비해 고가용성(HA) 구성을 선행해야 합니다. 또한, ESO 방식을 사용하면 Vault 통신이 일시 중단되어도 이미 동기화된 Kubernetes 내 시크릿은 유지되므로 서비스 가용성(Availability)을 확보할 수 있습니다. 

 


📚 관련/출처

  1. [공식 문서] HashiCorp Vault Kubernetes Integration: Kubernetes 환경에서의 Vault 인증 및 통합 방법론 상세 가이드 (Kubernetes - Auth Methods | Vault | HashiCorp Developer )
  2. [오픈소스] External Secrets Operator: 다양한 외부 시크릿 매니저와 K8s Native Secret 간의 동기화 프로젝트 (Introduction - External Secrets Operator )