Kubernetes Cluster에서는 사용자뿐만 아니라 Application 자체도 Kubernetes API에 접근해야 하는 경우가 있습니다.
예를 들어 Monitoring System은 Cluster 상태를 조회해야 하고, Deployment Automation Tool은 Kubernetes Resource를 생성하거나 수정해야 합니다.
하지만 Application에 일반 사용자 계정을 제공하는 것은 보안상 적합하지 않습니다.
Kubernetes에서는 이러한 Application 인증을 위해 ServiceAccount 기능을 제공합니다.
ServiceAccount는 Pod와 Application이 Kubernetes API Server와 안전하게 통신할 수 있도록 제공하는 인증 계정입니다.
| 구성 요소 | 역할 |
|---|---|
| ServiceAccount | Application 인증 계정 |
| Pod | ServiceAccount 사용 |
| API Server | 요청 처리 |
| RBAC | 권한 관리 |
ServiceAccount 구조를 이해하면 Kubernetes에서 Application 권한 관리와 보안 접근 방식을 이해할 수 있습니다.
Kubernetes ServiceAccount란 무엇인가?
ServiceAccount는 Kubernetes 내부 Application이 API Server에 접근하기 위해 사용하는 계정입니다.
일반 사용자가 사용하는 User Account와 다르게 Pod와 같은 Workload를 위한 Identity입니다.
구분:
| 종류 | 사용 대상 |
|---|---|
| User Account | 사람, 관리자 |
| ServiceAccount | Application, Pod |
예:
Monitoring Pod
↓
ServiceAccount 인증
↓
Kubernetes API 조회
Application별 권한을 분리하여 안전하게 관리할 수 있습니다.
Kubernetes ServiceAccount가 필요한 이유
Application이 Kubernetes API에 접근할 때 인증 과정이 필요합니다.
인증 없이 접근을 허용하면 보안 문제가 발생할 수 있습니다.
문제:
| 상황 | 위험 |
|---|---|
| 공용 계정 사용 | 접근 추적 어려움 |
| 관리자 권한 제공 | 보안 위험 증가 |
| 인증 정보 노출 | API 접근 가능 |
ServiceAccount를 사용하면 Application별 독립적인 인증 환경을 구성할 수 있습니다.
Kubernetes ServiceAccount 동작 구조
ServiceAccount는 Pod에 연결되어 API 접근 권한을 제공합니다.
구조:
| 구성 요소 | 역할 |
|---|---|
| Pod | Application 실행 |
| ServiceAccount | Identity 제공 |
| Token | 인증 정보 |
| API Server | 요청 검증 |
동작 과정:
| 단계 | 내용 |
|---|---|
| 1단계 | ServiceAccount 생성 |
| 2단계 | RBAC 권한 연결 |
| 3단계 | Pod에 지정 |
| 4단계 | Token 발급 |
| 5단계 | API Server 접근 |
이 과정을 통해 Application은 필요한 Kubernetes 기능만 사용할 수 있습니다.
Kubernetes ServiceAccount와 Pod 연결
Pod는 spec.serviceAccountName 설정을 통해 특정 ServiceAccount를 사용할 수 있습니다.
구조:
Pod
↓
ServiceAccount
↓
Token
↓
Kubernetes API
예:
Monitoring Pod
↓
monitoring-sa
↓
Cluster Metrics 조회
Application마다 별도의 Identity를 부여할 수 있습니다.
Kubernetes ServiceAccount Token이란?
ServiceAccount Token은 API Server 인증에 사용하는 Credential입니다.
Pod 내부 Application은 Token을 이용하여 Kubernetes API 요청을 보낼 수 있습니다.
구조:
Application
↓
Token 전달
↓
API Server 인증
↓
Resource 접근
Token은 Kubernetes 인증 과정의 핵심 요소입니다.
Kubernetes ServiceAccount와 RBAC 관계
ServiceAccount는 권한 자체를 가지고 있지 않습니다.
Role 또는 ClusterRole과 연결해야 실제 권한이 부여됩니다.
구조:
ServiceAccount
↓
RoleBinding
↓
Role
↓
Permission
예:
Monitoring ServiceAccount
↓
ClusterRole 연결
↓
Node 정보 조회 가능
Kubernetes Default ServiceAccount란?
각 Namespace에는 기본적으로 default ServiceAccount가 생성됩니다.
Pod에서 별도 ServiceAccount를 지정하지 않으면 default 계정이 사용됩니다.
구조:
Pod 생성
↓
ServiceAccount 미지정
↓
default ServiceAccount 사용
하지만 Production 환경에서는 목적별 ServiceAccount 생성이 권장됩니다.
Kubernetes ServiceAccount 생성 방식
ServiceAccount는 Kubernetes Resource 형태로 생성합니다.
생성 과정:
ServiceAccount 정의
↓
kubectl 적용
↓
Pod 연결
↓
API 접근
관리자는 Application 목적에 맞는 계정을 생성할 수 있습니다.
Kubernetes ServiceAccount 권한 최소화
보안 운영에서는 최소 권한 원칙이 중요합니다.
권장 방식:
| 방법 | 설명 |
|---|---|
| 전용 ServiceAccount 생성 | Application별 분리 |
| 필요 권한만 부여 | 과도한 접근 방지 |
| RBAC 적용 | 권한 관리 |
| Token 보호 | 인증 정보 보호 |
관리자 권한 ServiceAccount 사용은 제한해야 합니다.
Kubernetes ServiceAccount 활용 사례
| Application | 사용 목적 |
|---|---|
| Monitoring Tool | Cluster 상태 조회 |
| CI/CD Tool | 배포 자동화 |
| Operator | Resource 관리 |
| Backup System | Storage 접근 |
Cloud Native 환경에서 다양한 자동화 도구가 ServiceAccount를 활용합니다.
Kubernetes ServiceAccount Token 보안 관리
Token은 Kubernetes API 접근 권한을 가진 중요한 정보입니다.
관리 방법:
| 항목 | 설명 |
|---|---|
| Rotation | Token 변경 |
| RBAC 제한 | 권한 최소화 |
| Secret 보호 | 접근 제한 |
| Audit Log | 사용 기록 확인 |
Token 관리가 Kubernetes 보안 수준을 결정합니다.
Kubernetes ServiceAccount와 Secret 관계
과거 Kubernetes에서는 ServiceAccount Token이 Secret 형태로 자동 생성되었습니다.
최근 Kubernetes 버전에서는 Bound ServiceAccount Token 방식이 기본적으로 사용됩니다.
특징:
| 방식 | 설명 |
|---|---|
| Legacy Token | 장기간 사용 |
| Bound Token | 기간 제한, 보안 강화 |
최신 환경에서는 단기 Token 방식이 권장됩니다.
Kubernetes ServiceAccount 운영 시 고려사항
Production 환경에서는 Application Identity 관리가 중요합니다.
| 항목 | 설명 |
|---|---|
| 계정 분리 | Application별 관리 |
| 권한 검토 | 불필요 권한 제거 |
| Token 관리 | 보안 유지 |
| Monitoring | 접근 기록 확인 |
ServiceAccount는 Kubernetes 보안 Architecture의 핵심입니다.
Kubernetes ServiceAccount 장점
| 장점 | 설명 |
|---|---|
| Application 인증 | 안전한 API 접근 |
| 권한 분리 | 최소 권한 운영 |
| 자동화 지원 | Operator, CI/CD 활용 |
| 보안 강화 | Identity 기반 관리 |
ServiceAccount는 Kubernetes Application 보안 운영의 기본 요소입니다.
자주 묻는 질문
ServiceAccount와 User Account 차이는 무엇인가요?
User Account는 사람이 사용하는 계정이고 ServiceAccount는 Application과 Pod가 사용하는 인증 계정입니다.
ServiceAccount만 만들면 API 접근이 가능한가요?
아닙니다.
Role 또는 ClusterRole을 Binding하여 권한을 부여해야 합니다.
모든 Pod가 ServiceAccount를 사용하나요?
네.
별도로 지정하지 않아도 Namespace의 default ServiceAccount가 적용됩니다.
마무리
Kubernetes ServiceAccount는 Pod와 Application이 Kubernetes API Server에 안전하게 접근하기 위한 핵심 인증 기능입니다.
| 구성 요소 | 역할 |
|---|---|
| ServiceAccount | Application Identity |
| Token | 인증 정보 |
| RBAC | 권한 관리 |
| API Server | 요청 검증 |
ServiceAccount 구조를 이해하면 Kubernetes 환경에서 Application별 접근 권한을 안전하게 관리하고 자동화된 운영 환경을 구축할 수 있습니다.
다음 글에서는 Kubernetes 운영 자동화를 위한 Kubernetes Operator 완벽 가이드! CRD 기반 Application 관리와 자동화 구조 이해하기를 알아보겠습니다.