Infrastructure/Kubernetes

GitOps를 위한 Secret 관리하기 (1) - SealedSecrets 개념

MingyuKim 2025. 3. 11.

최근 GitOps를 통한 Kubernetes 클러스터 관리가 확산되면서, 애플리케이션의 배포와 환경 구성을 코드로 관리하는 방식이 주목받고 있습니다. 이와 함께 중요한 정보인 Secret의 안전한 관리 역시 큰 고민거리로 떠오르는데요. 이번 포스팅에서는 GitOps 환경에서 Secret을 안전하게 다룰 수 있는 방법 중 하나인 SealedSecrets 개념에 대해 알아보겠습니다.

해당 포스팅은 커피고래님의 "GitOps Secret 관리" 포스팅을 참고하였습니다.

 

GitOps Secret 관리

GitOps에서 Secret 관리가 고민이시라구요? 그래서 준비했습니다, SealedSecret! GitOps는 우리의 삶을 편리하게 만들어 줍니다. 어플리케이션의 배포 상태를 완벽하게 반영해주어 Git에 저장된 배포 정의

coffeewhale.com

 


GitOps와 Secret 관리의 필요성

GitOps는 선언형 인프라와 지속적 배포를 위해 Git 저장소를 단일 진실의 원천(single source of truth)으로 사용하는 접근법입니다. 모든 애플리케이션 설정, 인프라 코드, 그리고 Secret까지 Git에 기록되면 버전 관리와 추적이 용이해지는 장점이 있습니다. 그러나 Secret 정보는 민감한 데이터이므로 평문으로 Git에 저장할 수 있지만 하면 안되는 행위이며, Git으로 관리하게 될 경우에는 암호화된 상태로 관리해야 합니다.


SealedSecrets란 무엇인가?

SealedSecrets는 Bitnami에서 개발한 Kubernetes 커스텀 리소스(CRD)로, 민감한 정보를 암호화하여 Git 저장소에 안전하게 저장할 수 있게 해줍니다. SealedSecrets 오브젝트는 암호화된 데이터를 포함하고 있으며, 클러스터 내에 배포된 SealedSecrets 컨트롤러가 이를 감시하여 복호화 후 일반 Secret 리소스로 변환합니다.

  • 암호화와 복호화
    SealedSecrets는 공개키/개인키 암호화 방식을 사용합니다. 개발자가 공개키로 암호화된 SealedSecret YAML 파일을 생성하면, 클러스터에 설치된 컨트롤러는 미리 설정된 개인키를 이용해 복호화한 뒤 Kubernetes Secret으로 변환합니다.
  • GitOps와의 연계
    암호화된 SealedSecrets 파일은 Git 저장소에 안전하게 커밋할 수 있으므로, GitOps 파이프라인에서 Secret 관리가 용이해집니다. 코드 리뷰 및 버전 관리가 가능해지고, 추후 변경 이력을 통해 누가 언제 어떤 Secret이 변경되었는지 추적할 수 있습니다.

SealedSecrets의 동작 원리

  1. 암호화 단계
    개발자는 kubeseal CLI 도구를 사용해 일반 Kubernetes Secret을 암호화합니다. 이 때 클러스터에 설치된 SealedSecrets 컨트롤러의 공개키를 사용합니다.
  2. 저장 단계
    암호화된 SealedSecret YAML 파일을 Git 저장소에 커밋합니다. 이 파일은 평문이 아니므로 민감한 정보가 노출되지 않습니다.
  3. 복호화 및 배포
    클러스터에서 SealedSecrets 컨트롤러가 해당 CRD를 감지하면, 내부의 개인키를 사용해 복호화한 뒤 실제 Secret으로 생성합니다. 이 과정은 자동으로 이루어지며, GitOps 도구가 이를 트리거하게 됩니다.

SealedSecrets 사용의 장점

  • 보안 강화
    민감한 데이터가 암호화된 형태로 저장되어 Git 저장소에 노출되지 않습니다.
  • GitOps와의 통합
    모든 클러스터 설정이 Git에 저장되므로, 배포 파이프라인에 자연스럽게 녹아들어 자동화된 배포 및 롤백이 가능합니다.
  • 버전 관리 및 감사 추적
    SealedSecrets 파일 역시 Git으로 관리되므로, 언제 누가 어떤 변경을 했는지 쉽게 확인할 수 있습니다.

고려사항 및 한계

  • 키 관리
    SealedSecrets 컨트롤러의 개인키와 공개키가 일치해야 하며, 키 회전 시 기존 SealedSecret 파일을 재생성해야 하는 번거로움이 있습니다.
  • 복잡한 Secret 구조
    복잡한 Secret 구성이나 동적 값이 필요한 경우, 관리에 주의가 필요하며 별도의 템플릿화나 CI/CD 파이프라인 내 자동화 작업이 요구될 수 있습니다.

 

GitOps 환경에서 Secret 관리 문제는 보안과 운영 효율성을 동시에 고려해야 하는 중요한 과제입니다. SealedSecrets는 민감한 정보를 안전하게 암호화하여 Git 저장소에 보관할 수 있도록 도와줌으로써, GitOps 방식의 이점을 극대화할 수 있는 강력한 도구입니다. 앞으로 이어질 포스팅에서는 SealedSecrets의 설치, 활용법, 그리고 이를 효과적으로 사용하기위한 Application을 제작하여 제가 실무에 적용했던 사례 등을 통해 더 구체적인 사용 방법을 포스팅하겠습니다.

 

댓글