wonpick
devvon
wonpick
방문자🌱
오늘
어제
  • 분류 전체보기 (147)
    • 개발 (42)
      • Spark (7)
      • Hadoop (3)
      • ML&DL (4)
      • Paper Review (0)
      • ETC (24)
    • STUDY (77)
      • Data Engineering (54)
      • Cloud (4)
      • Algorithm (5)
      • SQL (10)
      • Toy Project (1)
    • Android (2)
    • Backend (14)
    • 인턴 (0)
    • 공모전 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

태그

  • 데이터엔지니어링
  • SQL
  • cka
  • 최신 데이터 인프라 이해하기 #7
  • 자연어처리
  • 최신 데이터 인프라 이해하기
  • 인턴강연
  • 쿠버네티스
  • Python
  • kodekloud

최근 댓글

최근 글

티스토리

Designed By.hELLO
wonpick

devvon

13. CKA udemy 강의 정리 - Section 7 [Security]
STUDY/Data Engineering

13. CKA udemy 강의 정리 - Section 7 [Security]

2023. 1. 18. 02:32

0. Authentication/Authorization

  • 허가 받지 사용자인지 확인하는 인증 방법(Authentication)
  • 인증받은 사용자에게 특정 자원의 사용 권한을 부여하는 방법(Authorization)
사용자가 쿠버네티스의 API에 접근하기 위해서는 인증(Authentication)을 거쳐야 합니다. apiserver는 테스트 목적으로 로컬호스트의 8080포트에 http 포트를 띄웁니다. 외부에서 접근할 수 있는 기본포트는 6443인데 TLS인증이 적용되어 있습니다. 일반적인 https인증은 접근하는 클라이언트에서는 인증서가 필요없지만, 쿠버네티스의 apiserver에 열려 있는 이 포트에 접근하기위해서는 apiserver에서 가지고 있는 인증서에서 검증 가능한 유효한 인증서를 가지고 접근해야 통신이 가능합니다. 인증되지 않은 클라이언트가 외부에서 apiserver에 접근하는 것을 막기 위해서 입니다.

 

쿠버네티스에서 인증을 요청하기 위한 사용자는 일반적인 사용자와 서비스어카운트(service account)  2가지 종류가 있습니다. 쿠버네티스에는 사용자에 대한 정보가 저장되지 않습니다. 외부의 별도 인증 시스템에 있는 사용자 정보들을 사용하도록 되어 있습니다. 구글 계정(Google Account)이나 오픈스택의 키스톤(keystone), LDAP 등의 인증 시스템과 연동이 가능하고 별도 인증 시스템이 없다면 단순하게 파일에 유저명과 비밀번호를 저장해두고 사용하는 것도 가능합니다.
서비스어카운트는 쿠버네티스가 직접 관리하는 사용자 계정입니다. 서비스어카운트에는 시크릿(secret)이 할당되어서 해당 서비스어카운트에 대한 비밀번호 역할을 해줍니다. 
 

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 

 

  1.  ETCD
    • etcd는 고가용성을 위해 multiple etcd 형태로 만들 수 있다.
    • ETCD 서버는 peer를 위해 Etcdpeer1.crt와 etcdpeer1.key를 추가적으로 생성
  2. kube-apiserver
    • kube- apiserver는 certificate를 생성할 때 DNS를 따로 정의한 openssl.cnf파일을 이용
  3. 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
    wonpick
    wonpick

    티스토리툴바