반응형
1. 개념
- Secert 리소스는 이름과 다르게 값을 base64로 인코딩해 저장한다.
- 따라서 secret 값을 secret, 컨테이너 런타임, etcdctl 등에서 평문으로 확인할 수 있다.
- 이러한 특성으로 인해 ETCD를 반드시 암호화해야 하고 혹은 Vault와 같은 3rd-Party 오픈소스를 사용해 크레덴셜을 저장해야 한다.
- ETCD 암호화에 관한 자세한 방법은 공식 문서에 잘 설명되어 있다.
2. 실습
- 암호키 생성
head -c 32 /dev/urandom | base64
- EncryptionConfiguration 작성
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
- secrets
providers:
- aescbc:
keys:
- name: key1
secret: <BASE 64 ENCODED SECRET>
- identity: {}
- ETCD 암호화 옵션 활성화(kube-apiserver.yaml)
spec:
containers:
- command:
- kube-apiserver
...
- --encryption-provider-config=/etc/kubernetes/enc/enc.yaml # add this line
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
- 암호화 확인
- 임의의 secret 생성 후 값을 확인하면 암호화된 것을 확인 가능
- ETCD 암호화를 적용하기 이전에 생성된 secret의 경우 값을 확인 가능
- 기존 시크릿 암호화 적용
kubectl get secrets --all-namespaces -o json | kubectl replace -f -
- 암호화 적용 후 secret 값(admin)이 암호화됨을 확인
3. 참고
반응형
'Kubernetes' 카테고리의 다른 글
Kubernetes SecurityContext 개념 및 설정2 (0) | 2024.03.06 |
---|---|
Kubernetes Container Runtime Sandbox 개념 (0) | 2024.03.06 |
Kubernetes CertificateSigningRequests 개념 및 실습 (0) | 2024.03.01 |
Kubernetes 서비스어카운트(ServiceAccount) 개념 및 설정2 (0) | 2024.02.29 |
Kubernetes RBAC 개념 및 설정2 (0) | 2024.02.29 |