EKS 클러스터를 컨트롤하기 위한 클라이언트 IAM 인증 기본개념

2021-11-21

.

Data_Engineering_TIL(20211121)

[학습자료]

“클라우드 네이티브를 위한 쿠버네티스 실전 프로젝트” 책을 읽고 정리한 내용입니다.

** 동양북스, 아이자와 고지&사토 가즈히코 지음, 박상욱 옮김

참고자료 URL : https://github.com/dybooksIT/k8s-aws-book

“EKS 컨테이너 및 네트워크 차원에서의 보안 기본개념”에 이어서 공부한 내용을 정리한 내용임

** URL : https://minman2115.github.io/DE_TIL309

[학습내용]

  1. EKS가 AWS CLI로 인증하는 방법

사용자가 EKS와 연결할때 IAM을 이용하게 되는데 사용자가 IAM으로 부터 토큰을 발급갖고 그거로 EKS에 접근을 하는 구조로 이해하면 된다. kubectl은 인증설정에서 AWS CLI로 사용하도록 설정하면 EKS 인증시 aws eks get-token 명령을 사용해서 토근을 생성하고 그것을 클러스터 인증 문자열로 사용하게 된다. kubectl은 이 생성된 토근 문자열을 사용해서 EKS의 control plane(kube-apiserver)에 요청을 보낸다. 클라이언트는 EKS 인증에 사용할 인증정보나 롤을 설정해두는 것으로 충분하다.

토근을 발급받아 kubectl 명령어로 EKS에 명령을 하게 되면 EKS는 받은 토근을 디코딩하여 IAM 사용자 정보를 확인한다. 그리고 이 클라이언트가 클러스터 내부의 사용자와 매칭되는지 확인하고 일치하는게 있다면 인증에 성공하는 구조다.

# 토근 발급받는 명령어 예시
[ec2-user@ip-10-10-1-125 ~]$ aws eks get-token --cluster-name eks-work --region ap-northeast-2
{"status": {"expirationTimestamp": "2021-11-21T06:17:43Z", "token": "k8s-aws-v1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}, "kind": "ExecCredential", "spec": {}, "apiVersion": "client.authentication.k8s.io/v1alpha1"}
  1. EKS 클러스터를 생성한 사람과 관리하는 사람이 다를경우 인증문제

EKS 클러스터가 생성되면 클러스터를 생성할때 사용된 IAM 사용자 또는 IAM 역할이 자동으로 관리자로 EKS에 등록된다. 예를들어서 사용자 A라는 IAM 사용자로 EKS 클러스터를 생성하면 EKS 클러스터에는 관리자로 사용자 A가 등록되고 사용자 A의 인증정보를 사용해서 클러스터 조작을 수행할 수 있다. 반대로 말하면 사용자 A 인증정보 이외에는 인증되지 않으며 클러스터를 관리할 수 없다는 말이다. 자주 발생하는 사례로 EKS 클러스터 생성은 인프라 팀이 하였는데 실제 유지보수는 운영팀이 수행하는 경우가 있다. 이때 별도의 팀이 사용할 인증정보를 클러스터에 등록해두지 않으면 kubectl로 클러스터를 관리하려고 해도 인증이 되지 않는 경우가 발생한다. 운영팀이 사용하는 인증정보를 사용자 A로 변경해주거나 운영팀이 사용하는 IAM 사용자 및 IAM 역할정보를 EKS 클러스터에 등록해야 한다.