인증된 보안?
- Password 기반의 authentication
- SSH Key 기반의 authentication 등
Scheduler, kube-apiserver, kubelet, kube-proxy, etcd 통신 등 클라이언트 간 통신 보안을 위해 TLS 사용
- 구성요소 간 통신
- 사용자 인증 : 클라이언트(kubectl, dashboard)는 TLS 인증서를 사용해 API에 접근
- Pod간 통신 보안
- Ingress Controller 및 외부 클라이언트의 접근시 TLS를 사용해 안전한 HTTPS 연결 제공
TLS
인터넷 통신 보안을 위한 표준 프로토콜로, 데이터를 암호화하여 네트워크 상에서 안전하게 전송되도록 보장한다.
TLS는 이전 버전인 SSL(Secure Sockets Layer)을 대체하며, 현재 대부분의 보안 인터넷 통신에서 사용되고 있다.
TLS의 동작 원리
(1) TLS Handshake
TLS 통신은 클라이언트와 서버가 TLS Handshake를 수행하면서 시작됩니다. Handshake 과정에서 키 교환, 암호화 방식 협상, 인증서 확인 등이 이루어진다.
- 클라이언트 Hello:
- 클라이언트가 서버에 접속 요청을 보내며 지원하는 암호화 알고리즘 목록, TLS 버전 등을 제공
- 서버 Hello:
- 서버가 클라이언트와 사용할 암호화 알고리즘, 인증서를 포함하여 응답
- 서버 인증:
- 서버 인증서를 클라이언트가 확인(공개 키 포함)
- 신뢰할 수 없는 인증서는 연결 거부
- 키 교환:
- 클라이언트와 서버가 암호화 통신에 사용할 세션 키를 교환하거나 생성
- 암호화 통신 시작:
- 클라이언트와 서버가 세션 키를 사용해 암호화된 데이터를 전송
(2) 대칭 키 암호화
- Handshake 후에는 대칭 키 암호화 방식으로 데이터를 전송.
- 대칭 키 암호화는 속도가 빠르고 효율적
인증서 체계
- Root CA: 모든 인증서의 신뢰 기반
- Intermediate CA: 루트 CA의 인증을 받아 인증서 발급
- 서버 인증서: 실제 사용되는 인증서
Generate Certificates
- EASYRSA, OPENSSL, CFSSL 등의 인증서 생성 도구가 있다.
- 참고 문서 : https://kubernetes.io/docs/tasks/administer-cluster/certificates/
## Openssl 예시
# 키 생성
openssl genrsa -out ca.key 2048
# signing request 증명
openssl req -new -key ca.key -subj "/CN=KUBERNETES-CA" -out ca.csr
# Sing Certificates
openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt
- etcd service log 분석
$ journalct -u etcd.service -l
embed: ClientTLS: cert = ... 등의 로그 생성됨
$ kubectl logs etcd-master
- view certificate
controlplane ~ ✖ openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 8998127591539017835 (0x7cdfc55ed153086b)
Signature Algorithm: sha256WithRSAEncryption
Issuer: CN = kubernetes
Validity
Not Before: Jan 11 10:42:36 2025 GMT
Not After : Jan 11 10:47:36 2026 GMT
Subject: CN = kube-apiserver
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:bc:63:c7:c3:36:04:44:a4:17:8c:4b:5a:d6:ac:
31:c8:8c:a0:6f:54:d4:21:7d:31:31:e0:4f:3d:06:
59:fe:8d:84:62:1b:47:bd:d8:ae:50:0e:39:37:a3:
85:34:82:c4:86:84:8e:e7:1f:2d:e6:e3:a3:1d:e7:
93:d3:e9:ee:0c:23:23:b0:55:1a:2a:af:81:60:eb:
52:99:40:e4:89:f0:c7:44:fb:8d:35:75:e1:fd:19:
5d:b8:42:71:b7:32:07:0b:5d:8e:c0:5b:b5:ed:e9:
48:e2:f6:d5:41:a4:d9:ce:73:af:58:95:f5:04:43:
a0:a7:61:0d:af:0c:f3:fc:f5:69:76:f6:4e:24:b5:
19:68:f3:cb:38:47:2a:1f:14:43:7b:ce:2f:b1:5f:
db:fc:9b:84:ac:5e:42:d0:2b:bb:78:98:16:50:62:
38:64:af:e7:a5:54:d9:33:ec:1f:4d:fa:f8:a3:a1:
17:61:79:d6:43:95:8e:87:da:7a:99:59:e4:bd:7d:
fe:0d:1a:98:54:58:d3:8c:d7:81:d1:99:5c:e5:2c:
b4:0b:e5:66:1c:6d:22:67:f5:8d:e1:6c:6a:47:08:
42:b7:a9:6d:b0:67:36:b1:10:9c:bf:a7:e9:43:12:
7b:61:19:ba:93:0a:36:a2:f3:6d:ba:9c:e7:b2:11:
b9:1f
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Key Usage: critical
Digital Signature, Key Encipherment
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Basic Constraints: critical
CA:FALSE
X509v3 Authority Key Identifier:
9A:0D:BA:3D:C9:EE:E9:9E:3D:24:27:F3:7E:0B:4A:96:24:41:94:BD
X509v3 Subject Alternative Name:
DNS:controlplane, DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, IP Address:172.20.0.1, IP Address:192.168.227.77
Signature Algorithm: sha256WithRSAEncryption
Signature Value:
04:3b:c3:03:77:51:49:a4:25:b4:95:58:ff:bf:99:99:60:02:
86:bc:44:46:e1:fa:7d:62:95:cd:ae:d2:f9:be:4f:09:d1:f7:
07:b4:99:42:77:94:4d:fc:26:23:f0:7d:ed:ff:18:81:ca:d0:
11:c9:06:ea:64:76:58:b4:10:1b:b4:f7:3f:37:83:5a:5f:f9:
e7:d9:9d:fa:6e:fb:f1:30:8b:81:27:c0:67:c7:5e:fe:54:2a:
4d:45:9e:ee:b9:9b:cc:47:c4:4c:58:85:5b:74:57:e9:58:81:
24:50:84:72:fd:d8:16:80:89:5f:aa:a7:5a:86:4f:c4:e1:a9:
ed:6e:69:5b:c7:fe:24:39:f6:0c:97:f6:e1:36:92:ef:8b:04:
e3:61:76:8d:65:0d:54:3c:68:c3:2a:db:e4:63:98:2d:40:b1:
02:35:0d:d7:c3:4d:57:3d:5c:d3:d6:bc:a7:d3:58:31:8e:2f:
02:ac:1a:d8:d3:50:da:98:96:48:56:1b:1f:34:57:ad:9c:22:
76:b6:24:5b:4b:84:e5:bf:cc:98:e9:4b:16:24:44:79:37:bc:
62:41:57:eb:ee:da:7c:50:78:17:3d:c9:d4:6e:6b:2e:11:30:
e1:98:34:c5:40:99:d5:f1:51:e8:ae:da:fd:23:bd:c3:32:88:
0e:da:15:71
반응형
'Container > Kubernetes' 카테고리의 다른 글
[K8S] Authorization (1) | 2025.01.20 |
---|---|
[K8S] Certificates API (0) | 2025.01.13 |
[K8S] Encrypting Secret Data at Rest (0) | 2025.01.08 |
[K8S] ConfigMap (0) | 2025.01.08 |
[K8S] Rollout (0) | 2025.01.08 |