Cloud Native/K8s

k8s 이론: 보안

lys4321 2026. 2. 23. 19:00

보안 - Pod Security Standards(PSS)

  • PSS는 Pod가 가지는 보안 관련 설정을 검증하는 정책 레벨
  • 기존에는 PodScurityPolicy가 사용되었으나 despercated 되면서 PSS + 내부 어드미션 컨트롤러(Admission Controller)가 사용중이다.
  • PSS의 목적은 컨테이너 격리, 권한 상승 방지, 호스트 리소스 보호등의 보안 취약점으로 직결되는 설정을 표준화시켜 제한하는데 있다.
  • PSS 전체 보안 스펙트럼을 포괄하기 위해 3개의 정책 레벨을 제공
  • PSS 가 정의하는 3개의 정책 레벨
    • Privileged
      • 가장 제약이 없는 정책
      • 인프라 수준이나 신뢰된 시스템 워크로드용으로 사용
    • BaseLine
      • 기본값
      • 기본적인 Pod 설정을 허용하되, 보안 위험이 있는 큰 설정은 제한
    • Restricted
      • 가장 엄격한 정책
      • 보안이 중요한 워크로드나 낮은 신뢰 환경에 적합
  • PSS 적용 및 시행 방식-Admission Controller
    • PSS 규칙은 namespace 단위에서 적용됨
      • 특정 namespace에 label을 달아 해당 소속의 Pod들에게 정책을 강제할 수 있디.
      • 이 기능은 Pod Security Admission Contoller를 통해 제공
    • Admission Controller에서 제공하는 3가지 모드
      • enforce
        • 정책 위반 시, Pod 생성을 막음
      • warn
        • 정책 위반 시, 경고 메시지를 출력하지만 Pod 생성은 허용
      • audit
        • 정책 위반 시, 감사 로그를 남김, Pod 생성은 허용
    • 워크로드 리소스와의 관계
      • 워크로드 리소스 생성 시점에서 Pod Security Admission은 audit, warn 모드만 지원
      • 실제 Pod 생성 시점일 땐 해당 Pod 객체에 대해 설정된 namespace 레이블에 따라서 정책이 enforcement(거부)될 수 있다.
    • Pod Security Admission 에서 예외처리나 정책 검사를 제외시키는 경우
      • 인증된 대상자나 사칭 대상자
      • 특정 RuntimeClassNames을 사용하는 Pod
      • 면제 namespace로 지정된 경우
      • 면제되는 Pod 업데이트
        • metadata 변경(seccomp, AppArmor는 제외)
        • spec.activeDeadlineSecond 변경
        • spec.tolerations 변경
  • 모니터링 및 매트릭
    • Pod Security Admission은 kube-apiserver를 통해 매트릭들을 노출
    • pod_security_error_totals
      • 정책 평가 중 치명적인 오류의 발생 횟수
    • pod_security_evaluations_total
      • 정책 평가가 수행된 횟수
      • 면제나 무시 요청은 제외
    • pod_security_exemptions_total
      • 면제된 요청 횟수

보안 - ServiceAccount

  • 사람이 아닌 대상의 계정
  • 클러스터 내 Pod, 시스템 구성요소, 자동화된 워크로드 등이 스스로를 식별하고 인증하는데 쓰이는 데이터
  • namespace 단위로 존재
  • 인증방식
    • API 서버 접근 시, JSON Web Token(JWT)형태의 bearer 토근을 사용
      • 이 토큰은 서명이되어 있고, 만료나 유효성 등의 정보를 포함할 수 있다.
    • 클러스터 내부 Pod가 ServiceAccount를 사용하면 k8s 가 이 토큰을 자동으로 생성, Pod 내 마운트해 준다.
    • 최신 k8s 버전에선 단기유효(token bound, time-limited)방식을 권장하며 예전 static 토큰 방식은 권장하지 않음
  • 사용 방법 및 권한 관리
    • ServiceAccount 오브젝트 생성
    • 생성한 것에 필요한 권한 등을 부여하여 최소 권한 원칙(least Privilege)를 충족시킴
    • Pod Spec에서 serviceAccountName 필드를 사용해 생성한 ServiceAccount를 Pod에 할당하여 Pod 시작 시, 토큰이 자동으로 주입되게 한다.
      • 명시하지 않으면 default ServiceAccount를 사용
      • 만약 Pod가 자동으로 토큰을 마운트 받는것을 원하지 않으면, automountServiceAccountToken 필드를 false로 설정하여 토큰 마운트를 비활성화

보안 - k8s API 접근 제어

  • 컨트롤 플로우
    • 전송 보안(Transport Security)
      • API 서버는 TLS(HTTPS)를 통해 서비스 되며 인증서 제공
    • 인증
      • TLS 통신 이후 인증단계가 시작되며 누구의 요청인지 식별
      • 여러 인증 모듈을 지정가능하며 하나라도 성공 시 인증완료가 되며 실패 시, 상태코드 401로 거부
    • 인가
      • 요청자에게 권한을 할당하는 단계
      • k8s 에서 지원하는 인가 모드로는
        • Role-Based Access Control(RBAC)
        • Attribute-Based Access Control(ABAC)
        • Webhook 기반 인가(Webhook mode)
        • Node-authorization 등
      • 이것 또한 하나라도 만족 시, 완료가 되며 전부 실패시 403 에러
    • 어드미션 제어(Admission Control)
      • 인증,인가 후 API 서버는 Admission Conrollers를 통해 요청을 추가 검사하거나 변경/거부 가능
      • 요청된 오브젝트의 spec 이나 필드에 접근이 가능
    • 감사(Auditing)
      • 요청이 승인 된 후 어떤 요청이 들어왔는지 기록하는 감사 로깅 기능

'Cloud Native > K8s' 카테고리의 다른 글

k8s 실전: 리소스 관련 명령어  (0) 2026.02.23
k8s 이론: 스케줄링  (0) 2026.02.23
k8s 이론: 구성  (0) 2026.02.23
k8s 이론: 스토리지  (0) 2026.02.23
k8s 이론: 서비스, 로드밸런싱, 네트워킹  (0) 2026.02.23