DevOps/Kubernetes

Service Account 관련 주요 사항

우드의개발개발 2024. 10. 29. 14:44

개념

서비스어카운트는 쿠버네티스나 프로메테우스와 같은 애플리케이션이 쿠버네티스 클러스터에 요청을 할 때 필요한 인증 및 인가를 위해 도입되는 개념이다. 이번 시간에는 해당 개념을 알고있는 사람을 대상으로 관련 내용을 정리해보는 시간을 가졌다.

부가 내용

- 파드 생성시 서비스 어카운트를 지정하지 않으면 쿠버네티스 기본 서비스 어카운트가 설정된다. 따라서 파드 생성시 서비스 어카운트를 지정하고 싶지 않으면 아래 그림처럼 authomountServiceAccountToken: false를 지정해야한다.

 

- 현재 러닝 중인 파드에 새로운 서비스 어카운트를 지정하고 싶다면 yaml 파일 수정 후 파드를 삭제하고 다시 생성해야한다. kubectl edit pod my-kubernetes-dashboard 명령어로는 새로운 서비스 어카운트를 지정할 수 없다. 디플로이의 경우 위 명령어가 적용된다.

 

서비스 어카운트의 개정

 

과거 쿠버네티스 클러스터 서비스 어카운트 생성 시 기본적으로 생성되는 토큰은 토큰으로서 문제점들이 있다. 첫번째로 해당 토큰이 특정 주체에 의해서만 사용 가능한 토큰이라는 특징이 없어 토큰을 가지고 있는 모든 주체가 권한이 있는 문제점이 있다. 두번째로 서비스 어카운트 생성 시 토큰을 포함하고 있는 시크릿 오브젝트를 자동으로 생성하기 때문에 해당 시크릿 토큰을 볼 수 있는 권한이 있는 경우 보안의 토큰을 갖고 있는 컴포넌트만큼이나 권한을 가질 수 있다. 세번째로 토큰이 언제까지 유효하다 하는 기간이 없는 영구토큰이기 때문에 해당 단점을 로테이션 키를 통해 보완할 수는 있으나 수동으로 수행해야 하고 라이브러리 지원이 되지 않아 잘 사용되지 않는다. 마지막으로 서비스 계정 당 시크릿을 필요로 함으로 계정이 많아질수록 관리해야 하는 토큰도 많아진다는 단점이 있다.

 

 

위와 같은 단점으로 인해 해당 단점을 보완하는 방식으로 개정되었다. 파드에 Secret을 마운트 해서 토큰을 사용하는 방식이 권장되지 않고 TokenRequest API를 통해 토큰을 가져오는 방식으로 변경되었다. 이는 API를 통해 필요할 때마다 토큰을 생성하는 방식으로 변경되었다는 것을 의미한다.

 

Audience Bound란 토큰이 특정 수신자를  위해 토큰이 발급되었음을 의미한다. 따라서 권한이 없는 서비스 어카운트가 접근하는 것을 방지하여 보안을 강화한다.

 

Time Bound란 토큰에 유효기간이 있다는 것을 의미한다.

 

Object Bound란 토큰을 통해 특정 쿠버네티스 리소스에만 접근할 수 있는 것을 의미한다. 예를 들어 특정 네임스페이스의 특정 파드에 대한 액세스 권한이 부여된 서비스 계정 토큰은 그 파드에만 접근할 수 있는 권한을 갖게 되는데 그런 맥락에서 특정 파드(리소스)에 바인드 된 것이다.

 

그렇게 함으로써 v1.22 부터 해당 토큰과 관련한 주체가 명시되었고 토큰이 언제까지 유효한지 유효시간이 생겼다. 그리고 v1.24에서는 자동으로 시크릿 오브젝트를 생성하지 않게 되었고 서비스 어카운트 생성 후 토큰을 생성해야 하는 과정이 추가되었다. 

 

 

만약 v1.24에서 서비스 어카운트 생성 후 유효기간이 없는 토큰을 생성하고 싶은 경우 서비스 어카운트 생성 후 시크릿 생성 시 어노테이션으로 서비스어카운트를 명시해주어야한다.