# Secret
⚡️ 목표
쿠버네티스에서 비밀번호, SSH 인증, TLS Secret과 같은 보안 정보를 관리하는 방법을 알아봅니다.
쿠버네티스는 ConfigMap
과 유사하지만, 보안 정보를 관리하기 위해 Secret
을 별도로 제공합니다. ConfigMap과 차이점은 데이터가 base64
로 저장된다는 점 말고는 거의 없습니다.
Secret은 암호화되지 않음
Secret은 보안 정보를 다루기 때문에 당연히 암호화될 거라고 생각할 수 있지만, 실제로는 그대로 저장됩니다. 따라서, etcd에 접근이 가능하다면 누구나 저장된 Secret을 확인할 수 있습니다. vault (opens new window)와 같은 외부 솔루션을 이용하여 보안을 강화할 수 있습니다.
# Secret 만들기
아이디와 패스워드를 Secret으로 저장하고 컨테이너에서 환경변수로 사용하는 방법을 알아봅니다.
admin
1q2w3e4r
Secret을 만들고 확인해봅니다.
# secret 생성
kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt
# secret 상세 조회
kubectl describe secret/db-user-pass
# -o yaml로 상세 조회
kubectl get secret/db-user-pass -o yaml
# 저장된 데이터 base64 decode
echo 'MXEydzNlNHI=' | base64 --decode
설정한 Secret을 환경변수로 연결합니다.
apiVersion: v1
kind: Pod
metadata:
name: alpine-env
spec:
containers:
- name: alpine
image: alpine
command: ["sleep"]
args: ["100000"]
env:
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: db-user-pass
key: username.txt
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-user-pass
key: password.txt
환경변수를 확인합니다.
kubectl apply -f alpine-env.yml
# env 확인
kubectl exec -it alpine-env -- env
# 마무리
Secret은 아직 완전히 믿고 사용할 수는 없습니다. 따라서, 정말 암호화가 중요한 경우라면 별도의 솔루션을 고려하는 것이 필요합니다.