[Cluster Setup and Hardening] ServiceAccount

IMKUNYOUNG·2024년 7월 5일
0

CKS

목록 보기
6/70

이번 글에서는 쿠버네티스의 중요한 보안 개념 중 하나인 ServiceAccount에 대해 알아보겠습니다.

사용자 계정과 서비스 계정의 차이

쿠버네티스에는 두 가지 유형의 계정이 있습니다:

  1. 사용자 계정: 사람이 클러스터에 접근하여 관리 작업을 수행하는 데 사용됩니다.
  2. 서비스 계정: 애플리케이션이 쿠버네티스 클러스터와 상호작용할 때 사용됩니다.

예시 애플리케이션: My Kubernetes Dashboard

예를 들어, 'My Kubernetes Dashboard'라는 간단한 대시보드 애플리케이션이 있다고 가정해봅시다. 이 애플리케이션은 Python으로 작성되었으며, 배포되면 쿠버네티스 API에 요청을 보내 클러스터의 파드 목록을 검색하여 웹 페이지에 표시합니다. 이를 위해 서비스 계정을 사용합니다.

서비스 계정 생성 및 사용

서비스 계정 생성

서비스 계정을 생성하려면 kubectl create serviceaccount 명령어를 사용합니다. 예를 들어, dashboard-sa라는 이름의 서비스 계정을 생성하려면 다음과 같이 입력합니다:

kubectl create serviceaccount dashboard-sa

서비스 계정 확인

서비스 계정을 확인하려면 kubectl get serviceaccount 명령어를 사용하여 모든 서비스 계정을 나열할 수 있습니다:

kubectl get serviceaccount

토큰 확인

서비스 계정이 생성되면 자동으로 토큰도 생성됩니다. 이 토큰은 시크릿 객체로 저장되며, 이를 확인하려면 kubectl describe secret 명령어를 사용합니다:

kubectl describe secret <secret-name>

토큰을 통해 애플리케이션이 쿠버네티스 API에 인증할 수 있습니다.

파드에 서비스 계정 연결

외부 애플리케이션이 쿠버네티스 클러스터에 호스팅되어 있을 경우, 서비스 토큰 시크릿을 파드를 호스팅하는 애플리케이션의 볼륨으로 자동 마운트하면 됩니다. 이를 통해 애플리케이션이 쉽게 토큰을 읽을 수 있습니다. 예를 들어, 기본 서비스 계정을 사용하지 않고 새로운 서비스 계정을 사용하고 싶다면, 파드 정의 파일에 serviceAccount 필드를 추가하고 새로운 서비스 계정의 이름을 지정합니다.

쿠버네티스 1.22 및 1.24의 변경 사항

버전 1.22

쿠버네티스 향상 제안서(KEP) 1205의 일환으로 토큰 요청 API가 도입되었습니다. 이 API는 더 안전하고 확장 가능한 서비스 계정 토큰을 제공하며, 대상이 바인딩되고 시간 제한이 있습니다.

버전 1.24

버전 1.24에서는 서비스 계정을 생성할 때 더 이상 자동으로 시크릿 또는 토큰이 생성되지 않습니다. 필요한 경우 kubectl create token 명령어를 사용하여 서비스 계정에 대한 토큰을 생성해야 합니다.

만료되지 않는 토큰 생성 (unexpired)

만료되지 않는 토큰을 포함하는 시크릿을 생성하려면 시크릿 객체의 유형을 kubernetes.io/service-account-token으로 설정하고, 주석에 서비스 계정 이름을 지정합니다. 하지만 보안 상의 이유로 토큰 요청 API를 사용하는 것이 더 권장됩니다.

마무리

서비스 어카운트는 쿠버네티스에서 애플리케이션이 클러스터와 상호작용하는 데 필수적인 요소입니다. 이번 글을 통해 서비스 계정을 생성하고 사용하는 방법을 배웠으며, 최신 쿠버네티스 버전에서의 변경 사항도 알아보았습니다.

0개의 댓글