Kubernetes

쿠버네티스 시크릿 관리 도구

wath1457 2025. 1. 20. 23:41

gitops 방식으로 배포되는 클러스터에서 사용되는 시크릿을 어떤식으로 관리해야 할지 찾아보았다.

 

참고로 내가 고려한 요소는

  • on-premise 클러스터
  • 라이센스 (직접적인 비즈니스 모델에 들어가지는 않고, 사내 구축용으로만 가능한 라이센스여도 OK)
  • 빠른 도입 (러닝커브가 비교적 적으면 좋겠지만...)

 


 

시크릿 관리 도구

 

  • sealed secrets
    • 컨트롤러로 암호화된 시크릿을 생성 / 암호화된 시크릿은 sealed secrets controller로만 복호화가 가능하다.
    • Gitops와의 통합성 / 암호화된 시크릿을 git repo에 저장하여, k8s 클러스터로 가져오고 복호화하여 사용
    • 클러스터 종속적이다.
    • 외부 secret 저장소가 따로 필요하지 않다.
    • auto-rolling 기능 지원 x
* auto-rolling이란?

configmap이나 secret 이 변경된 경우, 변경을 감지하고 application(pod) 재시작 

-> 우리가 configmap이나 secret 내용을 수정하고 pod를 재시작하여 해당 변경사항을 적용하는 것을 자동화하는 동작이라 생각하면 될 것 같다.

 

 

  • External Secrets Operator
    • Kubernetes External Secrets가 deprecated가 되었고, ESO를 사용하는 것 같다. 
    • 외부 시크릿 저장소와 k8s 클러스터 내의 시크릿 리소스를 통합
    • AWS secret manager, Vault와 같은 시크릿 저장소가 따로 필요하다.
    • 시크릿과 namespace에 대한 권한을 ServiceAccount에 rolebinding / 그리고 외부 저장소에 대한 권한을 IRSA 등을 통해서 ServiceAccount에 연결해 주어야 한다.
    • 그럼 ServiceAccount를 통해 External Secrets Controller는 외부 시크릿 저장소와 쿠버네티스 클러스터의 시크릿을 통합하여 관리할 수 있는 것이다.
    • auto-rolling이 가능하다.
    • GitOps와의 통합성


  • Vault
    • 암호화/복호화, 시크릿 저장소, auto-rolling 기능을 모두 가진 강력한 솔루션
    • 무료 / 유료 라이센스가 있다.
    • Audit Logs : 누가 언제 어느 시크릿에 접근했는지 로그를 통해 확인할 수 있다.
    • 중앙화된 시크릿 관리
    • Vault로 다양한 기능들을 한번에 통합하여 사용하고, kubernetes 클러스터 통합을 위해서 ESO를 사용하는 느낌인 것 같다.
    • 다양한 클라우드 프로바이더의 외부 시크릿 저장소와의 통합도 지원
    • 유연한 구성이 가능할 것 같다.
    • Vault 자체는 러닝커브가 꽤 있는 편. ESO를 통해 이를 어느정도 보완할 수 있을 것으로 보인다.


  • SOPS (Secrets Operations)
    • 시크릿 파일의 암호화 및 복호화를 위한 도구
    • Gitops 워크플로우 지원 - 암호화된 시크릿 키를 git-repo에 자유롭게 올릴 수 있기 때문
    • 시크릿은 YAML, JSON, ENV 등 다양한 형식의 파일로 관리, 해당 파일을 암호화하여 Git에 저장
    • 시크릿 키를 KMS와 GnuPG와 통합하여 암호화 / 복호화가 가능하다.
    • 전체 파일 뿐만 아니라, 파일 내 특정 값들만 암호화 가능
    • auto-rolling 지원 x
    • helm에서 사용 가능한 helm-secrets도 SOPS를 사용함
    • kustomize와의 통합
resources:
- secrets.enc.yaml

sops:
  kms: "arn:aws:kms:region:account-id:key/key-id"

 

 


Auto rolling 구현 방법

  1. annotation 기반 방법 : secret이나 configmap이 변경되었음을 알리기 위해 annotations 값을 업데이트 하는 방식
  2. gitops 도구의 지원 활용 (argocd, flux)
  3. External Secrets Operator
  4. 커스텀 컨트롤러 구현