ServiceAccount와 Pod 보안

Kubernetes Pod의 권한 관리와 보안 컨텍스트 설정


Kubernetes Pod의 권한 관리와 보안 컨텍스트 설정

목표: 최소 권한 원칙에 따라 Pod를 안전하게 실행할 수 있는 수준


👤 ServiceAccount

기본 개념

graph TB
    subgraph "Pod 권한 흐름"
        Pod["📦 Pod"] -->|"ServiceAccount"| SA["👤 ServiceAccount"]
        SA -->|"Token"| API["🔷 API Server"]
        API -->|"RBAC"| AUTH["✅ 인증/인가"]
    end

ServiceAccount는 Pod가 Kubernetes API를 사용할 때의 신원입니다.

기본 ServiceAccount

# 기본 SA 확인
kubectl get serviceaccount default

# 모든 네임스페이스의 SA
kubectl get sa --all-namespaces

사용자 정의 ServiceAccount

apiVersion: v1
kind: ServiceAccount
metadata:
  name: my-app-sa
  namespace: default
automountServiceAccountToken: false  # 토큰 자동 마운트 비활성화

Pod에 연결

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  serviceAccountName: my-app-sa  # SA 지정
  automountServiceAccountToken: false  # 토큰 마운트 비활성화
  containers:
  - name: app
    image: my-app:latest

🔐 Token 관리

Kubernetes 1.24+ 변경사항

# 이전: Secret에 토큰 자동 생성
# 현재: TokenRequest API 사용

# 토큰 생성
kubectl create token my-app-sa

# 만료 시간 지정
kubectl create token my-app-sa --duration=24h

수동 토큰 생성 (레거시)

apiVersion: v1
kind: Secret
metadata:
  name: my-app-sa-token
  annotations:
    kubernetes.io/service-account.name: my-app-sa
type: kubernetes.io/service-account-token

🛡️ 보안 컨텍스트

Pod 수준

apiVersion: v1
kind: Pod
metadata:
  name: secure-pod
spec:
  securityContext:
    runAsNonRoot: true
    runAsUser: 1000
    runAsGroup: 3000
    fsGroup: 2000
    seccompProfile:
      type: RuntimeDefault
  containers:
  - name: app
    image: my-app:latest

컨테이너 수준

apiVersion: v1
kind: Pod
metadata:
  name: secure-pod
spec:
  containers:
  - name: app
    image: my-app:latest
    securityContext:
      allowPrivilegeEscalation: false
      readOnlyRootFilesystem: true
      capabilities:
        drop:
        - ALL
        add:
        - NET_BIND_SERVICE
      seccompProfile:
        type: RuntimeDefault

📋 보안 체크리스트

  • ServiceAccount 생성
  • 토큰 자동 마운트 제어
  • RBAC 최소 권한
  • runAsNonRoot 설정
  • readOnlyRootFilesystem
  • capabilities drop ALL
  • seccompProfile 설정
  • NetworkPolicy 적용

🔗 관련 노트

  • 02-09-RBAC-설정 — 권한 관리
  • 02-04-NetworkPolicy — TLS, mTLS
  • 03-03-보안-하드닝 — 전체 보안

마지막 업데이트: 2026-06-01