Certified Kubernetes Administration - 36
2024-06-22
- Kubernetes
- Cloud
Kubernetes에서 비밀 데이터의 암호화
개요
-
Kubernetes에서 비밀 데이터를 안전하게 저장하기 위해 암호화 필요.
-
비밀 데이터는 기본적으로 인코딩된 형식으로 저장되지만, 인코딩된 값은 쉽게 디코딩 가능.
-
etcd에 저장된 데이터는 기본적으로 암호화되지 않음.
비밀 데이터 생성 및 조회
-
비밀 데이터 생성:
kubectl create secret generic my-secret --from-literal=key1=supersecret
-
비밀 데이터 조회:
kubectl get secrets kubectl describe secret my-secret kubectl get secret my-secret -o yaml
-
비밀 데이터 디코딩:
echo 'c3VwZXJzZWNyZXQ=' | base64 --decode
etcd에 저장된 데이터 조회
-
etcdctl 설치:
sudo apt-get install etcd-client
-
etcdctl를 사용하여 etcd에서 데이터 조회:
ETCDCTL_API=3 etcdctl get /registry/secrets/default/my-secret --prefix --keys-only --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key | hexdump -C
암호화 설정
-
암호화 구성 파일 생성:
encryption-config.yaml
파일 생성:apiVersion: apiserver.config.k8s.io/v1 kind: EncryptionConfiguration resources: - resources: - secrets providers: - aescbc: keys: - name: key1 secret: c2VjcmV0S2V5MTIzNDU2Nzg5MA== - identity: {}
-
암호화 키 생성:
head -c 32 /dev/urandom | base64
-
암호화 구성 파일을 kube-apiserver에 추가:
-
/etc/kubernetes/manifests/kube-apiserver.yaml
파일 수정:- --encryption-provider-config=/etc/kubernetes/enc/encryption-config.yaml
-
볼륨 및 볼륨 마운트 추가:
volumeMounts: - mountPath: /etc/kubernetes/enc name: encryption-config readOnly: true volumes: - hostPath: path: /etc/kubernetes/enc type: DirectoryOrCreate name: encryption-config
-
-
kube-apiserver 재시작 확인:
kubectl get pods -n kube-system
암호화 상태 확인
-
새로운 비밀 데이터 생성:
kubectl create secret generic my-secret-2 --from-literal=key2=topsecret
-
etcdctl로 새로운 비밀 데이터 조회:
ETCDCTL_API=3 etcdctl get /registry/secrets/default/my-secret-2 --prefix --keys-only --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key | hexdump -C
-
기존 비밀 데이터 암호화:
kubectl get secrets -o json | kubectl replace -f -
-
기존 비밀 데이터 암호화 상태 확인:
ETCDCTL_API=3 etcdctl get /registry/secrets/default/my-secret --prefix --keys-only --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key | hexdump -C
요약
-
비밀 데이터는 기본적으로 인코딩된 형식으로 저장되며, 쉽게 디코딩 가능.
-
etcd에 저장된 데이터를 암호화하려면 암호화 구성 파일을 생성하고 kube-apiserver에 추가해야 함.
-
새로운 비밀 데이터는 자동으로 암호화되며, 기존 비밀 데이터는 업데이트를 통해 암호화 가능.
-
암호화된 비밀 데이터를 etcdctl 명령어를 사용하여 확인할 수 있음.
Certified ...
Certified ...