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 구현 방법
- annotation 기반 방법 : secret이나 configmap이 변경되었음을 알리기 위해 annotations 값을 업데이트 하는 방식
- gitops 도구의 지원 활용 (argocd, flux)
- External Secrets Operator
- 커스텀 컨트롤러 구현