1. 사용자 및 서비스 계정의 종류:

쿠버네티스에서는 두 종류의 계정이 있다: 

  • Normal users
  • Service Accounts

 

두 계정은 인증 대상이 다르고 인증을 관리하는 주체가 다르다.

 

 

Normal Users:

  • 쿠버네티스를 사용하는 외부 사람들 즉 개발자나, 관리자에 대한 인증을 말한다.
  • kubectl 을 통해서 kube-apiserver 에 명령을 내리기 위해선 Credentials 정보가 필요하다. GKE 의 경우 GCP 에서 인증과 인가 검사가 끝나면 이 Credentials 정보를 발급해준다.
  • 즉 GKE 를 사용하는 사람들은 쿠버네티스를 통해서 인증을 받는 것이 아니라 Google 에서 인증을 받아야 함:
    • 먼저 Google 로그인을 통해서 인증을 해야함. 이를 해주는 서비스가 Google Cloud Identity 이다.
    • 인증이 끝난 후 GKE 에 대한 접근 권한이 있는지 확인해야한다. 이를 해주는 서비스가 Google Cloud IAM (Identity and Access Management) 이라고 한다.

 

Service Accounts:

  • 쿠버네티스 내부에서 작동하고 있는 Pod 내의 프로세스에 대한 인증을 말한다. 주로 Pod 내의 프로세스가 쿠버네티스 API 를 호출하기 위해서 필요하다.
  • 쿠버네티스에서 관리하는 계정이다. 

 

2. Google Cloud Identity:

Google Cloud Identity 는 Google 에서 인증을 해주는 서비스를 말한다.

 

회사에서는 Google Cloud Identity 를 통해서 우리 회사의 GCP 관리를 위해서 조직원들을 추가하고 삭제하는 멤버 관리를 할 수 있다.

 

 

3. 인증 및 권한 부여

GKE 를 접근하고 제어할 수 있는 권한을 줄 수 있는 방법은 다음 두 가지가 있다.

  • Google Cloud IAM
  • RBAC (Role-Based Access Control)

 

중요한 건 이 두가지 권한은 각자의 역할과 범위가 다르다는 것이다. 이 둘을 함께 조합해서 잘 쓰는게 중요하다.

  • 그리고 권한을 줄 때 중요한 건 the principle of least privilege (최소 권한의 법칙) 이다. 권한을 오버해서 주지 말고 딱 필요한 만큼만 최소한으로 주는 것.

 

Google Cloud IAM:

  • Google Cloud Platform(GCP) 리소스에 대해서 접근 권한을 넣을 수 있는 서비스이다.
  • GCP 프로젝트 수준에서 이 권한은 관리된다.
  • GKE 클러스터를 생성하거나 관리하는 수준에서 사용이 가능하다.

 

RBAC:

  • 쿠버네티스 클러스터 내부에서 쿠버네티스 오브젝트를 제어할 때 사용되는 권한이다.
  • Namespace Level 과 Cluster Level 에서의 권한을 줄 수 있다.
    • 예시로, 특정 네임스페이스에서만 Pod 를 삭제하고 추가할 수 있도록 하는 권한을 줄 수도 있다.

 

 

4. kube-apiserver 의 인증 방법:

kube-apiserver 는 HTTPS 로 오는 요청에 대해서 인증 검사를 수행한다.

 

인증은 여러가지 방법을 통해서 수행될 수 있다:

  • OpenID Connect Token
  • x509 Client certs
  • basic Authentication using static password

 

OpenID Connect Token 의 인증만 사용하는 것을 권장한다고 한다. 이게 제일 보안적으로 우수하다고 함.

  • x509 Client certs 는 인증서 관리를 잘 해줘야하고 basic Authentication using static password 는 비밀번호 관리를 잘해줘야함.

 

GKE 1.12 이상부터는 OpenID Connect Token 방식의 인증만 제공된다.

'Kubernetes' 카테고리의 다른 글

Google Kubernetes Engine: RBAC  (0) 2023.11.25
Google Kubernetes Engine: Cloud IAM  (0) 2023.11.19
Google Kubernetes Engine: kubectl  (0) 2023.11.18
Google Kubernetes Engine: Secret  (0) 2023.11.17
Google Kubernetes Engine: ConfigMap  (0) 2023.11.17

+ Recent posts