Service Accounts

Yu Sang Min·2025년 6월 20일

CKA

목록 보기
56/110
post-thumbnail

🔐 Kubernetes Service Accounts 개요

👤 Kubernetes의 두 가지 계정 유형

  • Kubernetes에서는 User AccountService Account 두 가지 계정 유형 존재
  • User Account: 사람(관리자, 개발자 등)이 클러스터에 접근하기 위한 계정
  • Service Account: 애플리케이션이나 서비스가 클러스터와 상호작용할 수 있도록 하기 위한 계정

🛠 Service Account 생성 및 사용

  • 서비스 계정 생성 명령어:

    kubectl create serviceaccount <서비스계정이름>
  • 예: kubectl create serviceaccount dashboard-sa

  • 생성된 서비스 계정은 자동으로 토큰(Secret 형태)을 생성하고 연결

🔑 Service Account Token 확인

  • Secret 오브젝트를 조회:

    kubectl get secret
    kubectl describe secret <secret-이름>
  • Secret 내부에 저장된 토큰은 애플리케이션이 Kubernetes API와 통신할 때 Bearer 토큰으로 사용 가능

📦 Pod 내에서의 Token 자동 마운트

  • Kubernetes는 기본적으로 Pod에 Service Account Token을 자동 마운트

  • 마운트 경로:

    /var/run/secrets/kubernetes.io/serviceaccount/token
  • 해당 경로에서 토큰 파일 확인 가능

⚙️ 사용자 정의 Service Account 사용 방법

  • Pod 정의 파일에 아래처럼 명시:

    serviceAccountName: dashboard-sa
  • 기존 Pod는 Service Account 변경 불가 → 재생성 필요

  • Deployment는 수정 시 자동 롤아웃 진행되어 변경 가능

⚠️ 기본 Service Account 제한 사항

  • 기본 Service Account는 제한된 권한만 가짐
  • 고급 권한이 필요한 경우, RoleRoleBinding 또는 ClusterRole, ClusterRoleBinding과 함께 사용 필요

🚫 자동 마운트 비활성화

  • Service Account Token 자동 마운트 비활성화 옵션:

    automountServiceAccountToken: false

🔁 Kubernetes v1.22 변경 사항

  • Token Request API 도입 (Kubernetes Enhancement Proposal 1205)
  • 기존 Secret 기반 토큰 대신 유효기간, audience, object binding이 설정된 투명하고 보안성 높은 토큰 제공
  • Pod 생성 시 admission controller가 Token Request API를 호출해 projected volume으로 토큰 마운트

🔁 Kubernetes v1.24 변경 사항

  • Service Account 생성 시 자동 Secret/Token 생성 비활성화

  • 토큰 수동 생성 필요:

    kubectl create token <serviceaccount이름>
  • 수동 생성한 토큰은 기본적으로 1시간 유효 (옵션으로 조절 가능)

🧾 Secret 방식의 토큰 수동 생성

  • 여전히 이전 방식 사용 가능:

    apiVersion: v1
    kind: Secret
    metadata:
      name: dashboard-sa-secret
      annotations:
        kubernetes.io/service-account.name: dashboard-sa
    type: kubernetes.io/service-account-token
  • 단, 보안상 유효기간 없는 토큰은 권장되지 않음

  • 토큰 요청 API 사용을 Kubernetes 공식 문서에서 권장

📚 참고 문서

profile
React, Node.js, AWS, Git, Github, Github Action, Docker, K8S

0개의 댓글