K8S 에는 secret이라는 객체가 있는데, 이 때 secret의 내부 value가 base64로 암호화된 상태라서, 쉽게 복호화할 수 있다.
이를 좀더 보안성을 강화하기 위해 비트나미에서 만든 것이 Sealed Sercet이다.
sealed Secret을 실제로 어떻게 K8S 클러스터에서 적용하는 방법을 설명한다.
0. sealed secret controller가 k8s 클러스터에 필요한데, 관련 정보는 아래 블로그 참조
https://kangwoo.kr/2020/01/29/sealed-secretes/
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의 로그 확인을 통해 공개키를 받아서 파일로 만들어 커맨드에 추가한다.
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 |
---|