클러스터 내의 애플리케이션이 Kubernetes API 서버와 상호작용할 수 있도록 인증 정보를 제공하는 역할을 함
즉 애플리케이션(파드) 가 API 서버와 통신 할 수 있도록 만들어진 특수 계정
(Kubernetes 클러스터 내에서 파드가 실행 중 일 때, 파드가 클러스터의 상태를 모니터링 하거나 다른 리소스에 접군하기 위해서 Kubernetes API 서버에 인증된 요청을 보내야함 이를 가능하게 하는것이 바로 서비스 어카운트 토큰)
쿠버네티스는 여러 가지 이유로 사용자 어카운트와 서비스 어카운트의 개념을 구분한다.
서비스 어카운트가 제공하는 토큰은 파드가 Kubernetes API 에 접근할 때 중요 역할을 하며, 이는 자동으로 파드에 마운트됨
기본적으로 파드가 생성할때 default 서비스 어카운트의 토큰을 자동 마운트
apiVersion: v1
kind: ServiceAccount
metadata:
name: example-account
automountServiceAccountToken: true # true일시 자동 마운트
apiVersion: v1
kind: Pod
metadata:
name: exaple-pod
spec:
serviceAccountName: example-account
automountServiceAccountToken: true
위 같이 설정시 Kubernetes 파드 생성시 서비스 어카운트 토큰을 파드의 파일 시스템에 Projected Volume을 통해 자동 주입
/var/run/secrets/kubernetes.io/serviceaccount/token 경로에 파일로 저장됨
해당 경로에 토큰을 읽어 Kubernetes API 서버 요청을 보낼 때 사용
기본적으로 expriationSeconds 설정을 통해 1시간 후 만료되도록 구성됨
만료 토큰은 더 이상 유효하지 않으며 새 토큰 필요
Kubernetes는 이 과정을 자동화
파드에서 마운트된 토큰이 만료시, 자동으로 새로운 토큰을 생성하고 기존 토큰이 저장된 경로로 업데이트
이를 통해 애플리케이션은 지속적으로 유효한 토큰을 사용하여 Kubernetes API 에 접근
즉 토큰 만료에 신경쓰지 않고 중단 없이 Kubernetes API 서버와 상호 작용
서비스 어카운트 토큰이 Kubernetes 클러스터에서 중요한 역할을 하기 때문 이를 안전하게 관리하는 것은 매우 중요
최소 권한 원칙
각 서비스 어카운트는 그들이 수행해야할 작업에 필요한 최소 권한만 가져야함
Role, RoleBinding, ClusterRole, ClusterRoleBinding을 통해 각 서비스 어카운트에 부여된 권한을 제한
특정 파드가 Kubernetes API 에 접근할 필요가 없을시 automountServiceAccountToken: false 로 설정