0. Authentication/Authorization
- 허가 받지 사용자인지 확인하는 인증 방법(Authentication)
- 인증받은 사용자에게 특정 자원의 사용 권한을 부여하는 방법(Authorization)
TLS란?
인터넷에서의 정보를 암호화해서 송수신하는 프로토콜을 의미한다.
넷스케이프 커뮤니케이션스사가 개발한 SSL(Secure Sockets Layer)에 기반한 기술로, 국제 인터넷 표준화 기구에서 표준으로 인정받은 프로토콜입니다. 표준에 명시된 정식 명칭은 TLS지만 아직도 SSL이라는 용어가 많이 사용되고 있다.
흔히 SSL이라 부르는 것들의 대부분은 TLS입니다. SSL은 POODLE, DROWN 등의 취약점이 발견되어 현재 사용되지 않는다고 보면 됩니다. TLS를 사용해 암호화된 연결을 하는 HTTP를 HTTPS(Secure)라고 하며, 웹사이트 주소는 HTTPS로 시작합니다. 기본 포트 또한 80번이 아닌 443번을 씁니다.
TLS와 HTTPS를 혼동하는 경우가 많은데, 둘은 유사하긴 하지만 다른 개념입니다. TLS는 다양한 종류의 보안 통신을 하기 위한 프로토콜이며, HTTPS는 TLS 위에 HTTP 프로토콜을 얹어 보안된 HTTP 통신을 하는 프로토콜입니다. 다시 말해 TLS는 HTTP뿐만이 아니라 FTP, SMTP와 같은 프로토콜까지 포함하며, HTTPS는 TLS와 HTTP가 조합된 프로토콜만을 가리킵니다.
TLS Certificate
- CA에서 발급한 root certificate
- 클라이언트에서 발급한 client certificate
- 서버에서 발급한 server certificate
certificate와 private key를 구분하는 방법
- certificate : crt 또는 pem 확장자가 붙는다.
- private key: key가 확장자로 붙거나 파일명에 key가 들어간다.
server certificate와 client certificate
1. Root certificate 생성하기
server certificate와 client certificate를 생성하기 앞서 CA로부터 root certificate를 생성해줘야 한다.
1) Generate Keys: private key를 생성한다
2) CSR 요청: CA로 certificate signing request 보내기
3) certificate에 사인하기
(ca.crt와 ca.key에 접근한 가능한 누구든지 K8S 클러스터에 대한 cerficate를 발급받을 수 있다.
즉, ca.crt와 ca.key는 안전하게 보관되어야 한다.)
2. client side certificate와 server side certificate 생성하기
어드민, 스케줄러, 컨트롤러 매니저, kube-api server등 certificate 생성 과정은 모두 동일하므로
쿠버네티스 클러스터에 접근할때 사용되는 admin certificate만 생성해본다.
1) private key 생성하기
2) CSR 요청: CA로 certificate signing request 보내기
3) CA에서 발급받은 ca.cat와 ca.key로 admin의 certificate를 만들기
이외에도 이러한 파일들에 대한 정보를 담은 kube-config.yaml을 이용해서 kube-api server에 접근할 수도 있다.
※ ETCD의 CA
ETCD는 Kube-api server와 다른 CA를 이용하므로 root certificate를 따로 발급 받아줘야 한다.
3. server side certificate detail
1) 다른 멤버들(Peers)과 통신하기 위해 추가적인 peer's certificates가 필요하다.
2) 인증서가 만들어지면, etcd 서버가 시작될 때 그것들을 정의한다.
- key, cert file option 및 여러 옵션이 있고,
클라이언트가 connect하는 서버가 유효한지 체크하기 위한 root certification
- ETCD
- etcd는 고가용성을 위해 multiple etcd 형태로 만들 수 있다.
- ETCD 서버는 peer를 위해 Etcdpeer1.crt와 etcdpeer1.key를 추가적으로 생성
- kube-apiserver
- kube- apiserver는 certificate를 생성할 때 DNS를 따로 정의한 openssl.cnf파일을 이용
- kubelet 서버
- 각 노드에서 돌아가는 api 서버로 각 노드에는 한 쌍의 certificate와 key가 필요하다. certificate 이름을 명시할 때 kubelet이라 안하고 노드의 이름을 이용해서 certificate를 지정
Certificates API
certificate를 관리하는 방법과 certificate API가 무엇인지 다룸.
1) A user creates a key
# openssl genrsa -out jane.key 2048
2) generates CSR using the key with her name in it.
3) sends CSR to admin
# openssl req -new -key jane.key -subj "/CN=jane" -out jane.csr
4) admin create a CSR object
jane.csr -> object
5) CSR object의 definition file엔 key를 일일이 입력할 필요 없고,
base64 명령어를 통해 jane.csr의 key를 jane-csr.yaml의 spec>request:에 복붙 하면 된다.
# cat jane.csr | base64
6) CSR object를 조회해본다
# kubectl get csr
7) new Request / approved Req를 확인해본다
# kubectl certificate approve jane
8) certificate는 YAML file으로도 확인할 수 있다. (base64)
# kubectl get csr jane -o yaml
'STUDY > Data Engineering' 카테고리의 다른 글
[kodekloud] 01 Core Concepts : Namespaces 풀이 (0) | 2023.01.21 |
---|---|
14. CKA udemy 강의 정리 - Section 7 [Networking] (0) | 2023.01.21 |
12. CKA udemy 강의 정리 - Section 6 [Cluster Maintenance] (0) | 2023.01.14 |
11. CKA udemy 강의 정리 - Section 5 [Application Lifecycle Management] (0) | 2023.01.12 |
10. CKA udemy 강의 정리 - Section 4 [Logging&Monitoring] (0) | 2023.01.11 |