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