Kubernetes Cluster에서는 사람이 사용하는 계정뿐만 아니라 Application 자체도 Kubernetes API에 접근해야 하는 경우가 있습니다.
예를 들어:
Monitoring Agent
↓
Node 정보 조회
CI/CD Pipeline
↓
Deployment 변경
Operator
↓
Kubernetes Resource 관리
이러한 Application은 일반 사용자 계정이 아닌 ServiceAccount를 사용합니다.
Kubernetes ServiceAccount는 Pod와 Application이 Kubernetes API Server와 통신하기 위한 인증 Identity입니다.
| 구성 요소 | 역할 |
|---|---|
| ServiceAccount | Application 인증 계정 |
| Token | API 인증 정보 |
| RBAC | 권한 연결 |
| Pod | ServiceAccount 사용 |
ServiceAccount 구조를 이해하면 Kubernetes 내부 Component와 Application의 접근 권한을 안전하게 관리할 수 있습니다.
Kubernetes ServiceAccount가 필요한 이유
Kubernetes에서는 두 종류의 Identity가 존재합니다.
Human User
사람이 사용하는 계정
예:
- Developer
- Administrator
- Operator
ServiceAccount
Application이 사용하는 계정
예:
- Monitoring System
- CI/CD Tool
- Kubernetes Operator
Application이 Kubernetes API를 사용하려면 ServiceAccount가 필요합니다.
Kubernetes ServiceAccount 동작 구조
Application이 Kubernetes API에 접근하는 과정:
Pod 실행
↓
ServiceAccount 연결
↓
Token 제공
↓
API Server 인증
↓
RBAC 권한 확인
↓
Resource 접근
Authentication과 Authorization을 함께 사용합니다.
Kubernetes 기본 ServiceAccount
Namespace가 생성되면 기본 ServiceAccount가 자동 생성됩니다.
확인:
kubectl get serviceaccount
기본:
default
Pod는 별도 설정이 없으면 default ServiceAccount를 사용합니다.
Kubernetes Pod와 ServiceAccount 연결
Pod에서는 사용할 ServiceAccount를 지정할 수 있습니다.
예:
spec:
serviceAccountName: app-account
구조:
Pod
↓
app-account
↓
RBAC Permission
↓
Kubernetes API 접근
필요한 권한만 연결할 수 있습니다.
Kubernetes ServiceAccount 생성 방법
생성:
kubectl create serviceaccount app-account
확인:
kubectl get serviceaccount
Application 전용 인증 계정을 만들 수 있습니다.
Kubernetes ServiceAccount와 RBAC 관계
ServiceAccount는 권한 자체를 가지고 있지 않습니다.
Role 또는 ClusterRole과 연결해야 합니다.
구조:
ServiceAccount
↓
RoleBinding
↓
Role
↓
Permission
예:
Monitoring Agent
↓
ServiceAccount
↓
ClusterRole
↓
Node 조회 권한
권한 분리가 가능합니다.
Kubernetes ServiceAccount Token 구조
ServiceAccount는 API Server 인증을 위한 Token을 사용합니다.
구조:
Pod
↓
Token Mount
↓
API Request
↓
API Server
Token을 통해 Application임을 확인합니다.
Kubernetes Token 자동 Mount
기본적으로 Kubernetes는 Pod 내부에 ServiceAccount Token을 자동으로 연결할 수 있습니다.
예:
Container 내부:
/var/run/secrets/kubernetes.io/serviceaccount/
포함:
- Token
- CA Certificate
- Namespace 정보
Application이 Kubernetes API와 통신할 때 사용합니다.
Kubernetes automountServiceAccountToken 설정
API 접근이 필요 없는 Application은 Token Mount를 비활성화할 수 있습니다.
예:
automountServiceAccountToken: false
효과:
- 불필요한 인증 정보 제거
- 공격 가능성 감소
보안 강화 방법입니다.
Kubernetes ServiceAccount 활용 사례
Monitoring System
구조:
Prometheus
↓
ServiceAccount
↓
Cluster 조회 권한
↓
Metric 수집
CI/CD Pipeline
구조:
Pipeline
↓
ServiceAccount
↓
Deployment 권한
↓
Application 배포
Operator
구조:
Operator
↓
ServiceAccount
↓
Resource 관리
운영 자동화에서 많이 활용됩니다.
Kubernetes ServiceAccount 보안 관리
ServiceAccount는 높은 권한을 가질 수 있기 때문에 관리가 중요합니다.
주의:
| 항목 | 방법 |
|---|---|
| 권한 최소화 | 필요한 권한만 부여 |
| Token 보호 | 외부 노출 방지 |
| 계정 분리 | Application별 생성 |
| 사용하지 않는 계정 제거 | 정기 관리 |
RBAC과 함께 운영해야 합니다.
Kubernetes ServiceAccount 장애 사례
| 문제 | 원인 |
|---|---|
| API 접근 실패 | 권한 부족 |
| Permission Denied | RoleBinding 오류 |
| Token 오류 | 인증 문제 |
| Application 실행 실패 | 잘못된 ServiceAccount 설정 |
문제 발생 시 권한 구조를 확인해야 합니다.
Kubernetes ServiceAccount 확인 방법
ServiceAccount 확인:
kubectl get serviceaccount
상세 확인:
kubectl describe serviceaccount account-name
Pod 연결 확인:
kubectl describe pod pod-name
RBAC 연결 확인:
kubectl get rolebinding
Kubernetes ServiceAccount와 Security 관계
Kubernetes 보안 구조:
Authentication
↓
ServiceAccount 확인
↓
Authorization
↓
RBAC 검사
↓
Resource 접근
누가 접근하는지 확인한 후 권한을 적용합니다.
Kubernetes ServiceAccount 운영 전략
Production 환경에서는 다음 방식을 권장합니다.
기본 default 계정 사용 최소화
↓
Application별 ServiceAccount 생성
↓
최소 권한 RBAC 연결
↓
Token 자동 Mount 검토
↓
정기 권한 검토
안전한 Application 운영 환경을 만들 수 있습니다.
Kubernetes ServiceAccount와 DevSecOps
자동화 환경에서는 ServiceAccount 관리가 중요합니다.
구조:
CI/CD System
↓
ServiceAccount
↓
RBAC Permission
↓
Kubernetes Deploy
자동 배포 권한을 안전하게 관리할 수 있습니다.
Kubernetes ServiceAccount 장점
| 장점 | 설명 |
|---|---|
| Application 인증 | Pod 접근 관리 |
| 권한 분리 | 최소 권한 적용 |
| 자동화 지원 | CI/CD 연결 |
| 보안 강화 | Token 관리 가능 |
ServiceAccount는 Kubernetes Application 보안의 핵심 구성 요소입니다.
자주 묻는 질문
ServiceAccount와 User Account 차이는 무엇인가요?
User Account는 사람이 사용하고 ServiceAccount는 Application이 사용합니다.
ServiceAccount만 만들면 Kubernetes API 접근이 가능한가요?
아닙니다.
RBAC Role 또는 ClusterRole 권한 연결이 필요합니다.
모든 Pod에서 ServiceAccount Token이 필요한가요?
아닙니다.
API 접근이 필요 없는 Application은 Token Mount를 제한하는 것이 좋습니다.
마무리
Kubernetes ServiceAccount는 Application과 Kubernetes API Server 사이의 인증 Identity를 관리하는 기능입니다.
| 구성 요소 | 역할 |
|---|---|
| ServiceAccount | Application 인증 |
| Token | API 인증 정보 |
| RBAC | 권한 관리 |
| Pod | 계정 사용 |
ServiceAccount 구조를 이해하면 Kubernetes 내부 Component와 Application 접근 권한을 안전하게 관리하고 Production Cluster 보안을 강화할 수 있습니다.
다음 글에서는 Kubernetes 배포 환경에서 발생하는 Container Image 보안 문제를 다루는 Kubernetes Image Security 완벽 가이드! Container Image 취약점 관리와 안전한 배포 구조 이해하기를 알아보겠습니다.