Encrypting Secret Data at Rest

zuckerfrei·2024년 1월 3일
0

Kubernetes

목록 보기
32/63

EncryptionConfiguration을 사용하여 etcd에 저장되는 secret을 암호화 하기

secret-1 생성

kubectl create secret generic secret-1 --from-literal=key=value

EC 생성

enc.yaml

apiVersion: v1
kind: EncryptionConfiguration
resources:
  - resources:
      - secrets
    providers:
      - aescbc:
          keys:
            - name: key1
              secret: c2Vj~~~base64인코딩데이터  # 암호화 시킬 때 사용함
      - identity: {}

identity는 아무런 암호화 하지 않겠다는 뜻

aescbc는 알고리즘의 한 종류로 이 알고리즘으로 암호화 하겠다는 뜻


생성한 enc.yaml 파일을 볼륨마운트하여 사용하기 위해 아래의 경로로 이동시킴

mkdir /etc/kubernetes/enc  
mv enc.yaml /etc/kubernetes/enc

kube-apiserver.yaml 수정

vi /etc/kubernetes/manifests/kube-apiserver.yaml
apiVersion: v1
kind: Pod
metadata:
  name: kube-apiserver
  namespace: kube-system
  ....
spec:
  containers:
  - command:
    - kube-apiserver
    - --advertise-address:10.6.188.3 
    - ...
    - ...
    - --encryption-provider-config=/etc/kubernetes/enc/enc.yaml
  volumeMounts:
  - name: enc                           # add this line
    mountPath: /etc/kubernetes/enc      # add this line
    readOnly: true                      # add this line
  volumes:
    ...
  - name: enc                             # add this line
    hostPath:                             # add this line
      path: /etc/kubernetes/enc           # add this line
      type: DirectoryOrCreate             # add this line

이렇게 파일 수정 & 저장하면 kube apiserver가 재시작되면서 약간의 시간 필요함
crictl 명령어로 올라오는지 여부 체크 가능
재시작되면 이때부터 secret이 암호화되어 저장되기 시작한다.
다만 새로 추가되는 secret에 대해서만 암호화가 적용됨


새로 secret-2를 생성해보면 암호화 적용되어 있지만, 기존 secret-1에는 암호화가 적용되지 않은 것을 확인
kubectl create secret generic secret-2 --from-literal=key=value

기존 secret-1 포함한 모든 secret을 암호화 적용하는 방법

kubectl get secrets --all-namespace -o json | kubectl replace -f -
profile
무설탕 음료를 좋아합니다

0개의 댓글