본문 바로가기

컴퓨터/인프라

K8S - Sealed Secret 적용하기 (feat. k9s)

K8S 에는 secret이라는 객체가 있는데, 이 때 secret의 내부 value가 base64로 암호화된 상태라서, 쉽게 복호화할 수 있다. 

이를 좀더 보안성을 강화하기 위해 비트나미에서 만든 것이 Sealed Sercet이다. 

 

sealed Secret을 실제로 어떻게 K8S 클러스터에서 적용하는 방법을 설명한다.

0. sealed secret controller가 k8s 클러스터에 필요한데, 관련 정보는 아래 블로그 참조

https://kangwoo.kr/2020/01/29/sealed-secretes/

 

Sealed Secretes – 지구별 여행자

Secrets in Kubernetes 쿠버네티스를 사용하다 보면, 수 많은 YAML 파일들을 만들어 낼 것입니다. 그리고 이 YAML 파일들을 잘 관리하기 위해서 저장소를 찾게 됩니다. 일반적으로는 평소 즐겨 사용하던 g

kangwoo.kr

1. 암호화 대상 값을 base64로 echo 해 암호화한다.

➜ echo -n 'fejiosfjalskjf3@fjo222.:' | base64
foiewjflkaewjfoawihfaowefjawfjaesijfeajfif=

➜ echo -n 'temp' | base64
lkfewjalfkjweilfjwalefj

➜ echo -n 'f@3kfeklsjflaewifjewaofljaeilf' | base64
lkeafjeawlifjewalfjlaefjwelajflsakfwejoesjf

2. 아래 형태로 my-secret.yaml 파일 생성

#my-secret.yaml
apiVersion: v1
data:
  SECRET_1: grdsgsrgsregsergrkgjlkresjg=
  SECRET_2: grl;dgks;lrekgs;rlkg
  SECRET_3: gsldrgsrkldjglskdrjg
kind: Secret
metadata:
  creationTimestamp: null
  name: my-secret
  namespace: default

3. 아래 커맨드로 sealed-secret.yaml 생성 (<>도 다 포함)

kubeseal --format=yaml <my-secret.yaml > sealed-secret.yaml

3.1 사용자가 클러스터에 직접 액세스할 수 없는 경우 에러가 뜰 수 있다. 이 때는 K9S에서 sealed secret object의 로그 확인을 통해 공개키를 받아서 파일로 만들어 커맨드에 추가한다.

BEGIN 부터 END까지 포함해서 복사해서 파일(cert.pem)로 만든다.

cert.pem 예시

-----BEGIN CERTIFICATE-----
dlkfjawelifjawelfjwlieafjlawiefj
-----END CERTIFICATE-----

cert.pem 파일 생성 후 커맨드 

kubeseal --format=yaml --cert=cert.pem <my-secret.yaml > sealed-secret.yaml

그러면 아래와 같이 sealed secret 파일이 생성된다. 이 파일을 helm이나 kubectl로 k8s에 적용하면 된다.

#sealed-secret.yaml
apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
  creationTimestamp: null
  name: my-secret
  namespace: default
spec:
  encryptedData:
    SECRET_1: eklfjalkwejfleakwjf
    SECRET_2: lwekfjlewajflwakejflkwaejfwalekfklwef
    SECRET_3: ewakfjwealkjflawekjflawekfj
  template:
    data: null
    metadata:
      creationTimestamp: null
      name: my-secret
      namespace: default

'컴퓨터 > 인프라' 카테고리의 다른 글

EKS pod에서 Elasticache에 접근하기 (feat. peering)  (0) 2022.01.27