Service Account

임종혁·2025년 4월 14일

서비스 어카운트란?


클러스터 내의 애플리케이션이 Kubernetes API 서버와 상호작용할 수 있도록 인증 정보를 제공하는 역할을 함

즉 애플리케이션(파드) 가 API 서버와 통신 할 수 있도록 만들어진 특수 계정
(Kubernetes 클러스터 내에서 파드가 실행 중 일 때, 파드가 클러스터의 상태를 모니터링 하거나 다른 리소스에 접군하기 위해서 Kubernetes API 서버에 인증된 요청을 보내야함 이를 가능하게 하는것이 바로 서비스 어카운트 토큰)

docs로 보는 서비스 어카운트 vs 사용자 어카운트

쿠버네티스는 여러 가지 이유로 사용자 어카운트와 서비스 어카운트의 개념을 구분한다.

  • 사용자 어카운트는 사람을 위한 것이지만, 서비스 어카운트는 쿠버네티스의 경우 파드의 일부 컨테이너에서 실행되는 애플리케이션 프로세스를 위한 것이다.
  • 사용자 어카운트는 전역적으로 고려되기 때문에, 클러스터의 모든 네임스페이스에 걸쳐 이름이 고유해야 한다. 어떤 네임스페이스를 확인하든지 간에, 특정 사용자명은 해당 유저만을 나타낸다. 쿠버네티스에서 서비스 어카운트는 네임스페이스별로 구분된다. 두 개의 서로 다른 네임스페이스는 동일한 이름의 서비스어카운트를 각자 가질 수 있다.
  • 일반적으로 클러스터의 사용자 어카운트는 기업 데이터베이스로부터 동기화될 수 있으며, 여기서 새로운 사용자 어카운트를 생성하려면 특별한 권한이 필요하며 복잡한 비즈니스 프로세스에 연결된다. 반면에 서비스 어카운트를 생성하는 경우는, 클러스터 사용자가 최소 권한 원칙에 따라 특정 작업을 위한 서비스 어카운트를 만들 수 있도록 보다 가볍게 만들어졌다. 실 사용자를 온보딩하는 단계와 서비스어카운트를 생성하는 단계를 분리하는 것은, 워크로드가 최소 권한 원칙을 따르기 쉬워지게 한다.
  • 사람과 서비스 어카운트에 대한 감사 고려 사항은 다를 수 있다. 이 둘을 따로 관리함으로써 더욱 쉽게 감사를 수행할 수 있다.
  • 복잡한 시스템의 설정들은 그 시스템의 구성요소에 대한 다양한 서비스 어카운트 정의를 포함할 수 있다. 서비스 어카운트는 많은 제약없이 만들 수 있고 네임스페이스에 할당된 이름을 가질 수 있기 때문에 이러한 설정은 이식성이 좋다.

서비스 어카운트 토큰 자동 마운트

서비스 어카운트가 제공하는 토큰은 파드가 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 로 설정

0개의 댓글