서비스어카운트(ServiceAccount)

일반적으로 리눅스 기반의 서버 환경에서 서비스를 운영하는 경우, 리눅스의 유저, 그룹, 권한 기능을 활용해서 시스템엔지니어, 개발자간의 실행 권한을 나눠서 관리한다. 모든 사람이 루트 권한을 갖게 되면 보안 문제 뿐만 아니라 운영 중인 서버에 변경을 누구나 할 수 있다는 문제를 갖기 때문이다.

쿠버네티스에서도 이처럼 사용자별로 권한을 제어할 수 있는 기능이 Account Service이다. RBAC(Role Based Access Control)기반으로 동작한다.

쿠버네티스 권한 인증 과정

Account Service가 동작하는 방식을 이해하기 위해서는 쿠버네티스에서 명령에 대한 권한 인증과정을 이해해야 한다.

Untitled

위 그림 처럼 kubectl 를 통해서 명령을 내리면 해당 명령이 컨트롤 플레인에 kube-api-server의 HTTP handler로 전달이되고 그 뒤로 해당 명령을 수행한 사람이 클러스터에 등록된 사용자가 맞는지(Authentication)확인한다. 이후에 해당 사용자가 get pod라는 명령에 대한 권한이 있는지(Authorization) 확인한다. 그 이후에 명령이 처리 된다.

kubectl을 통해서 명령을 내릴때 인증 정보는 ~/.kube/config 파일에 저장되어있는 정보를 사용한다. 이 인증 정보는 모든 권한을 가지고 있는 cluster-admin 권한이다.

RBAC 동작 방식 - 서비스어카운트(ServiceAccount), 롤(Role), 클러스터 롤(Cluster Role)

서비스어카운트는 리눅스의 유저계정처럼 한명의 사용자를 의미한다.

롤은 파드 상태를 조회할 수 있다와 같이 쿠버네티스 오브젝트에 대한 권한을 의미한다.

클러스터롤은 퍼시스턴트 볼륨과 같이 클러스터 단위의 오브젝트에 대한 권한을 의미한다.

위 세가지에 대한 manifest file을 보면 이해가 쉽다.