글을 쓰기 앞서 이 책을 참조하였습니다.

 

쿠버네티스 인증에는 어떤 것들이 있나요?

 

  • Service Account 오브젝트를 통한 인증
  • Open ID Connect  (OAuth) 와 같은 third party 를 통한 인증
  • Certificates (인증서)를 통한 인증  등이 있습니다.

 

쿠버네티스 사용 시 인증이 왜 필요한가요?

 

운영중인 서비스에 대한 보안 강화 및 기밀 정보 보호의 목적 뿐만 아니라,

사내 조직 간의 쿠버네티스 동시다발적 제어 및 접근에 있어서

RBAC (Role Based Access Control)  역할에 따른 최소 권한 할당에 있어서 중요한 역할을 합니다.

 

 

쿠버네티스의 인증과정은 어떻게 이루어지나요? 

일반적으로 위와 같은 과정으로 Kubernetes API Server 에서 인증이 진행됩니다.

  1. Kubectl 명령어를 통해 Kube-API Server에 HTTP Handler 에 요청을 전송
  2. API Server 는 해당 클라이언트가 쿠버네티스의 사용자가 맞는지 확인
  3. API Server 는 해당 클라이언트가 요청한 기능을 실행할 권한이 있는지 확인 
  4. 관리자의 정책에 따라 Admission Control 을 수행합니다.

 

API Server 가 인증을 어떻게 하나요?

 

앞서 설명했다시피  Service Account, third party , Certificates 와 같은 방법들이 있습니다.

우선 Service Account 오브젝트를 활용하여 인증하는 방법을 설명하겠습니다.

 

Service Account (SA) 는 체계적으로 권한을 관리하기 위한 쿠버네티스 오브젝트입니다.

k create sa [Service Account Name] -n [ namespace ]

 위와 같이 SA 생성이 가능하며, 다음과 같이 활용할 수 있습니다.

그러나, SA 오브젝트만 있어서는 인증이 불가능하며, SA 에 직접  접근 대상, 접근 권한, 권한 주체를 설정해주어야 합니다.

Role 이라는 오브젝트로 아래와 같이 rule 을 적용하여  SA에 RoleBinding 을 통해 Role 을 할당해 주어야 합니다.

또, Namespace 에 속한 리소스들을 대상으로 다루는 Role 과  Cluster 전체 리소스들을 다루는 Cluster Role 이 있습니다.

 

그러면, Kubectl 을 통해서만 SA 를 활용할 수 있나요?

 

Application 에서 또한 HTTP API 를 통해 API Server에 요청이 가능합니다.

우선, HTTP API 요청을 위한 API Server Endpoint 로  다음과 같습니다.

기본적으로 API Server 는 HTTPS 요청만을 처리하기 때문에, 인증에 대한 자격증명이 필요합니다.

SA 오브젝트를 생성ㅇ하면 해당 SA에 대응하는 Secret 이 자동으로 생성됩니다.

해당 Secret 에는 ca.crt , token , namespace 가 base64 로 인코딩되어 저장되어 있습니다.

 

이에 Application 에서는 Token 정보를 읽어 API Server 에 JWT 인증을 시도합니다.

이후, 기존 SA 정보를 바탕으로 인증 및 인가 과정을 처리하게 됩니다.

그리고, API Server 의 몇몇 특정 경로들은 접근 제한이 되어있으나, Cluster Role 을 통해 아래와 같이 설정하여 접근이 가능합니다.

 

 

마지막으로, 다음과 같이 SDK 를 통한 SA 인증이 가능합니다.

1. SA 를 생성 한 후 Role 과 Role Binding 을 적용해줍니다. 

2. 대상 Pod 에 SA 이름을 명시합니다.

3. 해당 Pod 의 Container 에 자동으로 Secret 정보가 마운트됩니다.

4. Token 정보를 읽어 기존 default namespace 의 kubernetes 서비스를 통해 API Server 에 인증을 시도합니다.

 

 

RBAC 이 왜 중요한건가요?

추후 작성 예정

Admission Controller 가 뭔가요?

추후 작성 예정

OIDC 나 Certificates 를 통한 인증은 어떻게 하나요??

새로운 글로 작성 예정

 

 

+ Recent posts