프로젝트/졸업작품 - 인프라

3. SealedSecret 을 통한 애플리케이션 환경변수 관리

han1693516 2025. 6. 27. 20:51

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 에 반영한다.  

https://techblog.uplus.co.kr/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4%EC%97%90%EC%84%9C-sealed-secrets%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-%EC%8B%9C%ED%81%AC%EB%A6%BF-%EC%95%94%ED%98%B8%ED%99%94-%EB%B0%A9%EB%B2%95-1f44635a53e3 참고

 

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 테스트 결과 멀쩡하게 나왓다~

 

참고문헌 : https://techblog.uplus.co.kr/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4%EC%97%90%EC%84%9C-sealed-secrets%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-%EC%8B%9C%ED%81%AC%EB%A6%BF-%EC%95%94%ED%98%B8%ED%99%94-%EB%B0%A9%EB%B2%95-1f44635a53e3

 

쿠버네티스에서 Sealed Secrets을 활용한 시크릿 암호화 방법

쿠버네티스(Kubernetes) 환경에서 애플리케이션 개발 시 민감한 비밀 데이터를 저장하는 시크릿(Secret)에 대한 보안 강화하는 방법에 대해서 소개합니다. 이를 위해서 Bitnami에서 개발한 오픈소스인

techblog.uplus.co.kr