지원 버전: Kubernetes 1.31, 1.32, 1.33
마지막 업데이트: 2026년 2월 19일
개요
Kubernetes의 인증(Authentication) 및 권한 부여(Authorization) 시스템은 클러스터 보안의 핵심 요소입니다. 이 문서에서는 Kubernetes의 인증 및 권한 부여 메커니즘을 자세히 살펴보고, 실제 환경에서 이를 구성하는 방법을 설명합니다.
인증(Authentication)
인증은 사용자 또는 서비스가 자신이 주장하는 대상인지 확인하는 프로세스입니다. Kubernetes는 여러 인증 방법을 지원하며, 이들은 동시에 활성화될 수 있습니다.
인증 전략
1. X.509 인증서
X.509 인증서는 Kubernetes에서 가장 일반적인 인증 방법입니다. 클라이언트 인증서는 클러스터의 인증 기관(CA)에 의해 서명되어야 합니다.
인증서 생성 예시:
# 개인 키 생성opensslgenrsa-outjohn.key2048# 인증서 서명 요청(CSR) 생성opensslreq-new-keyjohn.key-outjohn.csr-subj"/CN=john/O=engineering"# Kubernetes CA로 CSR 서명opensslx509-req-injohn.csr-CAca.crt-CAkeyca.key-CAcreateserial-outjohn.crt-days365
kubeconfig 구성:
2. 서비스 계정 토큰
서비스 계정은 파드 내에서 실행되는 프로세스의 ID를 제공합니다. 각 네임스페이스에는 기본 서비스 계정이 있으며, 추가 서비스 계정을 생성할 수 있습니다.
서비스 계정 생성:
파드에 서비스 계정 할당:
3. OpenID Connect (OIDC)
OIDC는 외부 ID 제공자(예: Google, Azure AD, Okta)를 통한 인증을 지원합니다.
API 서버 구성 예시:
4. 웹훅 토큰 인증
웹훅 토큰 인증은 외부 서비스를 통해 토큰을 검증합니다.
API 서버 구성:
5. 인증 프록시
인증 프록시는 API 서버 앞에 위치하여 인증을 처리합니다.
API 서버 구성:
사용자 및 그룹
Kubernetes에서 사용자는 다음과 같이 분류됩니다:
일반 사용자: 클러스터 외부에서 관리되며, Kubernetes에서는 직접 관리하지 않습니다.
서비스 계정: Kubernetes API에 의해 관리되는 계정입니다.
사용자는 하나 이상의 그룹에 속할 수 있으며, 그룹은 권한 부여 정책에서 사용됩니다.
권한 부여(Authorization)
권한 부여는 인증된 사용자가 요청한 작업을 수행할 권한이 있는지 확인하는 프로세스입니다. Kubernetes는 여러 권한 부여 모듈을 지원합니다.
권한 부여 모드
1. RBAC (Role-Based Access Control)
RBAC는 역할 기반 액세스 제어를 제공하며, 현재 Kubernetes에서 가장 널리 사용되는 권한 부여 메커니즘입니다.
주요 개념:
Role: 네임스페이스 내에서 권한을 정의합니다.
ClusterRole: 클러스터 전체 범위의 권한을 정의합니다.
RoleBinding: Role을 사용자, 그룹 또는 서비스 계정에 바인딩합니다.
ClusterRoleBinding: ClusterRole을 사용자, 그룹 또는 서비스 계정에 바인딩합니다.
Role 예시:
RoleBinding 예시:
ClusterRole 예시:
ClusterRoleBinding 예시:
2. ABAC (Attribute-Based Access Control)
ABAC는 속성 기반 액세스 제어를 제공합니다. 정책은 JSON 파일로 정의됩니다.
정책 예시:
3. Node 권한 부여
Node 권한 부여는 kubelet이 API 서버에 접근할 때 사용됩니다.
4. Webhook 권한 부여
Webhook 권한 부여는 외부 서비스를 통해 권한 부여 결정을 내립니다.
API 서버 구성:
권한 부여 모범 사례
최소 권한 원칙: 필요한 최소한의 권한만 부여합니다.
역할 분리: 관리자, 개발자, 운영자 등 역할에 따라 적절한 권한을 부여합니다.
네임스페이스 분리: 팀 또는 프로젝트별로 네임스페이스를 분리하고 적절한 권한을 부여합니다.
서비스 계정 분리: 각 애플리케이션에 대해 별도의 서비스 계정을 사용합니다.
정기적인 감사: 권한 부여 정책을 정기적으로 검토하고 업데이트합니다.
어드미션 컨트롤(Admission Control)
어드미션 컨트롤은 인증 및 권한 부여 후에 요청을 처리하기 전에 추가 검증 및 수정을 수행합니다.
어드미션 컨트롤러 유형
변경 어드미션 컨트롤러: 요청을 수정할 수 있습니다.
검증 어드미션 컨트롤러: 요청을 검증만 하고 수정하지 않습니다.
주요 어드미션 컨트롤러
LimitRanger: 파드 및 컨테이너의 리소스 제한을 설정합니다.
ResourceQuota: 네임스페이스별 리소스 사용량을 제한합니다.
PodSecurityPolicy: 파드의 보안 컨텍스트를 제한합니다.
ServiceAccount: 파드에 서비스 계정을 자동으로 할당합니다.
DefaultStorageClass: 기본 스토리지 클래스를 설정합니다.
동적 어드미션 컨트롤
동적 어드미션 컨트롤은 웹훅을 통해 구현됩니다:
MutatingAdmissionWebhook: 요청을 수정할 수 있습니다.
ValidatingAdmissionWebhook: 요청을 검증만 하고 수정하지 않습니다.
웹훅 구성 예시:
실제 구현 예시
EKS에서의 인증 및 권한 부여 구성
IAM과 RBAC 통합
Amazon EKS는 AWS IAM과 Kubernetes RBAC를 통합하여 인증 및 권한 부여를 제공합니다.
aws-auth ConfigMap:
OIDC 제공자 구성
멀티 테넌트 클러스터 보안
멀티 테넌트 환경에서는 테넌트 간 격리가 중요합니다.
네임스페이스 격리:
리소스 할당량:
보안 모범 사례
정기적인 인증서 순환: 인증서를 정기적으로 갱신합니다.
서비스 계정 토큰 자동 마운트 비활성화: 필요하지 않은 경우 서비스 계정 토큰 자동 마운트를 비활성화합니다.
RBAC 정책 최소화: 필요한 최소한의 권한만 부여합니다.
네트워크 정책 구현: 파드 간 통신을 제한합니다.
감사 로깅 활성화: 모든 API 요청을 로깅하고 모니터링합니다.
보안 컨텍스트 설정: 파드 및 컨테이너의 보안 컨텍스트를 적절히 구성합니다.
이미지 스캐닝: 컨테이너 이미지의 취약점을 정기적으로 스캔합니다.
결론
Kubernetes의 인증 및 권한 부여 시스템은 클러스터 보안의 핵심 요소입니다. 적절한 인증 방법을 선택하고, RBAC를 통해 세밀한 권한 제어를 구현하며, 어드미션 컨트롤러를 활용하여 추가적인 보안 정책을 적용함으로써 안전한 Kubernetes 환경을 구축할 수 있습니다.
인증, 권한 부여, 어드미션 컨트롤은 서로 보완적인 역할을 하며, 이들을 함께 사용하여 심층 방어(Defense in Depth) 전략을 구현하는 것이 중요합니다.