Certificated 도전/KCSA - Kubernetes

[KCSA] Kubernetes API 접근 제어(Controlling Access to the Kubernetes API)

지추월자 2025. 3. 27. 16:54
반응형

🔐 Kubernetes API 접근 제어란?

사용자(또는 애플리케이션)는 kubectl, 클라이언트 라이브러리, REST API를 통해 Kubernetes API에 접근해.이 요청은 다음과 같은 4단계 보안 절차를 거쳐 처리돼:

[1] 인증 → [2] 권한 확인 → [3] 어드미션 컨트롤 → [4] 저장

📡 0단계: 전송 보안(Transport Security)

  • 기본적으로 API 서버는 포트 6443에서 TLS로 보호됨
    • 실제 운영 환경에서는 보통 포트 443 사용
  • --secure-port, --bind-address 플래그로 포트와 IP 설정 가능
  • API 서버는 TLS 인증서를 클라이언트에게 제공함
  • 사설 인증서(CA) 사용하는 경우, 클라이언트의 ~/.kube/config에 해당 CA의 인증서가 등록되어 있어야 함
  • 클라이언트도 TLS 클라이언트 인증서를 제출할 수 있음

🧾 1단계: 인증(Authentication)

"누가 요청했는지 확인하는 단계"

  • API 요청은 인증 모듈을 거침 (하나 이상 설정 가능)
  • 요청의 헤더 또는 인증서 등을 사용해 인증 수행

✅ 인증 방법 예시:

  • 클라이언트 인증서
  • 베이직 인증 (아이디/비밀번호)
  • 토큰 (일반 토큰, 부트스트랩 토큰, JWT 등)

인증 실패 시: HTTP 401 Unauthorized 반환
인증 성공 시: 해당 사용자 이름(username) 정보가 이후 단계에 전달됨

⚠️ Kubernetes는 자체적으로 User 객체를 저장하지 않음 (사용자 정보는 외부 인증 시스템에 의존)


✅ 2단계: 권한 확인(Authorization)

"이 사용자가 이 행동을 할 수 있는 권한이 있는가?"

  • 요청에는 다음 정보가 포함됨:
    • 사용자 이름
    • 요청된 행동(읽기, 쓰기 등)
    • 대상 리소스 (예: Pod, Namespace 등)

✅ 예시:

{
  "user": "bob",
  "namespace": "projectCaribou",
  "resource": "pods",
  "readonly": true
}

→ 이 설정이 있다면 Bob은 projectCaribou 네임스페이스 내에서만 Pod를 읽을 수 있음.

  • 다른 네임스페이스나 쓰기 요청을 하면 권한 거부됨 (HTTP 403)

🔐 지원되는 권한 부여 방식:

  • RBAC (역할 기반 접근 제어)
  • ABAC (속성 기반 접근 제어)
  • Webhook (외부 시스템에 권한 확인 요청)

여러 권한 모듈이 설정되었을 경우, 하나라도 허용하면 허용됨 
모두 거부하면 요청이 차단됨


🚦 3단계: 어드미션 컨트롤(Admission Control)

"요청된 오브젝트의 내용을 검사하거나 수정"하는 단계

  • 오브젝트 생성/수정/삭제/프록시 요청에 대해서만 작동
  • 단순 조회(get/list) 요청에는 작동하지 않음
  • 여러 Admission Controller를 순서대로 호출하며,
    • 하나라도 거부하면 전체 요청 거부됨
    • 기본값 설정이나 필드 수정도 가능

✅ 예시:

  • Pod Security Admission (PSA)
  • Namespace 존재 여부 확인
  • Default 값 자동 설정

모든 Admission Controller를 통과하면
해당 요청은 최종적으로 검증(validation)을 거쳐 오브젝트 저장소에 기록됨


🕵️ 4단계: 감사 로깅(Auditing)

보안 로그 기록을 위한 시스템

  • 누가 어떤 요청을 했는지 시간순으로 기록
  • 사용자, 애플리케이션, Kubernetes 자체 시스템의 활동 포함

→ 보안 분석, 사고 대응 등에 필수적인 기능


🧩 단계별 요약

단계 설명 실패 시

0. TLS 연결 전송 암호화 연결 실패
1. 인증(Authentication) 사용자 확인 401 Unauthorized
2. 권한 확인(Authorization) 권한 부여 여부 판단 403 Forbidden
3. 어드미션 컨트롤 오브젝트 내용 검사 및 수정 즉시 요청 거부
4. 감사 로깅 기록 저장 (보안 추적용) N/A (항상 기록)

📌 PSA/PSS와 관련 있는가?

  • PSA (Pod Security Admission)3단계 어드미션 컨트롤 중 하나임
  • PSS (Pod Security Standards) 는 PSA가 따르는 보안 정책 기준

즉:

Kubernetes API 요청 흐름 안에서 PSA는 "3단계 어드미션"에 해당하고,
그 때 사용하는 정책 세트가 PSS야.

 

반응형