Spring 운영 시 필요한 datasource url이나 sentry 등 타인에게 공개되면 안 되는 값은 ConfigMap이 아닌, secret 을 통해 관리해야 한다. 하지만 일반적인 secret 은 base64 로 인코딩된 값을 넣으므로, 민감 정보가 노출될 수 있따. 따라서 우리의 환경 정보는 SealedSecret 을 통해 관리하기로 했다.
이를 위한 아키텍처이다. 간단히 요약하자면 우리가 작성한 Secret yaml 을 kubeseal과 클러스터 내 Sealed Secret Controller 의 public key 로 encrypt 해서 github 에 올리고, ArgoCD 등으로 수정된 내용이 클러스터에 반영될 때 Sealed Secret Controller 가 이를 secret 으로 decrypt 해 application 에 반영한다.

EKS 를 사용하는 이번 프로젝트의 경우 유지비가 상당히 많이 나가기에, 우선 Docker Desktop 으로 띄운 클러스터에 대해 이를 적용해보려 한다.
우선 controller 설치를 위해서는 helm 이 필요한데, 이는 Window 기준 choco 를 통해서 설치할 수 있다.
sealed-secret controller 를 다음과 같이 설치한다.
helm repo add sealed-secrets https://bitnami-labs.github.io/sealed-secrets
helm repo update
helm install sealed-secrets-controller sealed-secrets/sealed-secrets \
--namespace kube-system \
--create-namespace \
--set keyrenewperiod=720h \
--set keyttl=8760h
다음 커맨드로 sealed controller 가 설치된 걸 볼 수 있다.

추후 띄울 EKS에서 로컬 환경과 같은 인증서를 쓸 수 있도록 별도 인증서를 만들어주도록 하자.
openssl 의 경우 window 기준 `choco install openssl` 을 이용해 다운받을 수 있다.
# Self-signed 인증서 생성 (유효기간 10년)
openssl req -x509 -days 3650 -nodes -newkey rsa:4096 \
-keyout new-sealed-secrets-key.pem \
-out new-sealed-secrets-key.pub \
-subj "/CN=sealed-secret/O=sealed-secret"
# 클러스터에 인증서를 저장할 시크릿 생성
kubectl create secret tls sealed-secrets-key \
--cert=new-sealed-secrets-key.pub \
--key=new-sealed-secrets-key.pem \
-n kube-system
# sealed-secrets-key 라벨 추가
kubectl label secret sealed-secrets-key \
sealedsecrets.bitnami.com/sealed-secrets-key=active \
-n kube-system
# 파드 재시작
kubectl rollout restart deployment sealed-secrets-controller -n kube-system
이제 secret 암호화를 위한 kubeseal 을 설치해 보자.
위 command는 스크립트 실행 권한을 위해서 넣었다.
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
irm https://raw.githubusercontent.com/jordan-owen/kubeseal-windows-installer/main/Install-Kubeseal.ps1 | iex
이제 암호화를 해 보자. --cert에는 pub key의 위치를, -f 다음에는 secret 값 원본, '>' 이후에는 SealedSecret 이 생성될 위치가 들어간다.
kubeseal --cert=C:/users/han16/new-sealed-secrets-key.pub --format=yaml -f ./overlays/local/backend/sealed-secret.yaml > ./overlays/local/backend/real-sealed-secret.yaml
다음과 같이 생성되었다!

postman 테스트 결과 멀쩡하게 나왓다~

쿠버네티스에서 Sealed Secrets을 활용한 시크릿 암호화 방법
쿠버네티스(Kubernetes) 환경에서 애플리케이션 개발 시 민감한 비밀 데이터를 저장하는 시크릿(Secret)에 대한 보안 강화하는 방법에 대해서 소개합니다. 이를 위해서 Bitnami에서 개발한 오픈소스인
techblog.uplus.co.kr
'프로젝트 > 졸업작품 - 인프라' 카테고리의 다른 글
| 6. kustomize 를 통한 Spring 및 Flask 애플리케이션 구축 (0) | 2025.07.02 |
|---|---|
| 5. Terraform 을 통한 EKS 및 DB 구축 (0) | 2025.07.02 |
| 4. TroubleShooting - dev 환경에서 로그 미출력 현상 발생 (1) | 2025.07.02 |
| 2. CI with Github Actions (0) | 2025.06.23 |
| 1. 프로젝트 아키텍처 (0) | 2025.06.21 |