Pod 보안 승인
Pod 보안 승인 (Pod Security Admission)
Kubernetes Pod 보안 표준(Pod Security Standards)은 파드에 대한 서로 다른 격리 수준을 정의해요. 이 표준은 파드의 동작을 제한하는 방식을 명확하고 일관되게 정의하게 해줘요.
Kubernetes는 Pod 보안 표준을 강제하기 위한 내장 Pod 보안 admission 컨트롤러를 제공해요. Pod 보안 제한은 파드가 생성될 때 네임스페이스 수준에서 적용돼요.
출처: 문서
본문
내장 Pod 보안 admission 강제
이 페이지는 Kubernetes v1.37 문서의 일부예요. 다른 버전의 Kubernetes를 실행 중이라면 해당 릴리스의 문서를 참고해요.
Pod 보안 수준 (Pod Security levels)
Pod 보안 admission은 Pod 보안 표준이 정의한 세 가지 수준(privileged, baseline, restricted)에 따라 파드의 보안 컨텍스트와 기타 관련 필드에 요구 사항을 부과해요. 그 요구 사항을 깊이 있게 보려면 Pod 보안 표준 페이지를 참고해요.
네임스페이스용 Pod 보안 admission 라벨
기능이 활성화되거나 웹훅이 설치되면, 각 네임스페이스에서 pod 보안에 사용할 admission 제어 모드를 정의하도록 네임스페이스를 구성할 수 있어요. Kubernetes는 네임스페이스에 사용할 미리 정의된 Pod 보안 표준 수준을 정의하기 위해 설정할 수 있는 라벨 집합을 정의해요. 선택한 라벨은 잠재적 위반이 감지되면 컨트롤 플레인이 취하는 조치를 정의해요.
| 모드 | 설명 |
|---|---|
enforce |
정책 위반으로 인해 파드가 거부됨 |
audit |
정책 위반으로 감사 로그에 기록된 이벤트에 감사 어노테이션 추가가 트리거되지만, 그 외에는 허용됨 |
warn |
정책 위반으로 사용자에게 보이는 경고가 트리거되지만, 그 외에는 허용됨 |
네임스페이스는 어떤 모드든 모두 구성할 수 있고, 모드마다 다른 수준을 설정할 수도 있어요.
각 모드에 대해 사용되는 정책을 결정하는 라벨 두 개가 있어요.
# The per-mode level label indicates which policy level to apply for the mode.
#
# MODE must be one of `enforce`, `audit`, or `warn`.
# LEVEL must be one of `privileged`, `baseline`, or `restricted`.
pod-security.kubernetes.io/<MODE>: <LEVEL>
# Optional: per-mode version label that can be used to pin the policy to the
# version that shipped with a given Kubernetes minor version (for example v1.37).
#
# MODE must be one of `enforce`, `audit`, or `warn`.
# VERSION must be a valid Kubernetes minor version, or `latest`.
pod-security.kubernetes.io/<MODE>-version: <VERSION>
예시 사용법은 네임스페이스 라벨로 Pod 보안 표준 강제를 확인해요.
워크로드 리소스와 파드 템플릿
파드는 종종 Deployment나 Job 같은 워크로드 객체를 만들어 간접적으로 생성돼요. 워크로드 객체는 파드 템플릿을 정의하고, 워크로드 리소스용 컨트롤러가 그 템플릿을 기반으로 파드를 만들어요. 위반을 일찍 잡기 위해 audit와 warn 모드는 모두 워크로드 리소스에도 적용돼요. 다만 enforce 모드는 워크로드 리소스에는 적용되지 않고 결과 파드 객체에만 적용돼요.
면제 (Exemptions)
주어진 네임스페이스와 연결된 정책 때문에 금지되었을 파드의 생성을 허용하기 위해 pod 보안 강제에서 면제를 정의할 수 있어요. 면제는 Admission Controller 구성에서 정적으로 구성할 수 있어요.
면제는 명시적으로 나열되어야 해요. 면제 기준을 충족하는 요청은 Admission Controller가 무시해요(enforce, audit, warn 동작 모두 건너뜀). 면제 차원은 다음과 같아요.
- 사용자 이름 (Usernames): 면제된 인증된(또는 가장된/impersonated) 사용자 이름의 사용자로부터 온 요청은 무시됨.
- RuntimeClassNames: 면제된 런타임 클래스 이름을 지정하는 파드와 워크로드 리소스는 무시됨.
- 네임스페이스 (Namespaces): 면제된 네임스페이스의 파드와 워크로드 리소스는 무시됨.
다음 파드 필드에 대한 업데이트는 정책 검사에서 면제돼요. 즉 파드 업데이트 요청이 이 필드들만 변경하면, 파드가 현재 정책 수준을 위반하더라도 거부되지 않는다는 뜻이에요.
- seccomp 또는 AppArmor 어노테이션(
seccomp.security.alpha.kubernetes.io/pod(사용 중단),container.seccomp.security.alpha.kubernetes.io/*(사용 중단),container.apparmor.security.beta.kubernetes.io/*(사용 중단)) 변경을 제외한 모든 metadata 업데이트 .spec.activeDeadlineSeconds에 대한 유효한 업데이트.spec.tolerations에 대한 유효한 업데이트
메트릭 (Metrics)
다음은 kube-apiserver가 노출하는 Prometheus 메트릭이에요.
pod_security_errors_total— 정상적인 평가를 방해하는 오류의 수를 나타냄. 치명적이지 않은 오류는 최신 restricted 프로파일이 강제에 사용되게 할 수 있음.pod_security_evaluations_total— 발생한 정책 평가의 수를 나타냄. 내보내기 중 무시되거나 면제된 요청은 세지 않음.pod_security_exemptions_total— 면제된 요청의 수를 나타냄. 무시되거나 범위 밖의 요청은 세지 않음.
다음 단계
더 오래된 Kubernetes 버전을 실행 중이고 PodSecurityPolicy가 포함되지 않은 버전으로 업그레이드하고 싶다면, PodSecurityPolicy에서 내장 PodSecurity Admission 컨트롤러로 마이그레이션을 읽어보세요.