Pod 보안 승인
Pod 보안 승인 (pod-security-admission)
기능 상태:
Kubernetes v1.25 [stable]
Pod Security Standards를 시행할 수 있는 Pod Security Admission Controller에 대한 개요 문서예요.
쿠버네티스 Pod Security Standards는 Pod에 대해 서로 다른 격리 수준을 정의해요. 이 표준을 사용하면 Pod의 동작을 제한하는 방식을 명확하고 일관되게 정의할 수 있어요. 쿠버네티스는 Pod Security Standards를 시행하는 내장 Pod Security 승인 컨트롤러를 제공해요. Pod 보안 제한은 Pod가 생성될 때 네임스페이스 수준에서 적용돼요.
내장 Pod Security 승인 시행 (Built-in Pod Security admission enforcement)
이 페이지는 쿠버네티스 v1.36 문서의 일부예요. 다른 버전의 쿠버네티스를 실행 중이라면 해당 릴리스의 문서를 참고하세요.
Pod Security 수준 (Pod Security levels)
Pod Security 승인은 Pod Security Standards가 정의한 세 가지 수준 — privileged, baseline, restricted — 에 따라 Pod의 Security Context와 그 밖의 관련 필드에 요구사항을 부과해요. 이 요구사항에 대한 심층 내용은 Pod Security Standards 페이지를 참고하세요.
네임스페이스의 Pod Security Admission 라벨 (Pod Security Admission labels for namespaces)
| 모드 | 설명 | | enforce | 정책 위반 시 Pod가 거부됨. | | warn | 정책 위반 시 사용자에게 보이는 경고가 발생하지만, 그 외에는 허용됨. | | audit | 정책 위반 시 감시 로그에 기록됨. |
# 모드별 수준 라벨은 해당 모드에 적용할 정책 수준을 나타낸다.
#
# MODE는 `enforce`, `audit`, `warn` 중 하나여야 한다.
# LEVEL은 `privileged`, `baseline`, `restricted` 중 하나여야 한다.
pod-security.kubernetes.io/<MODE>: <LEVEL>
# 선택 사항: 주어진 쿠버네티스 마이너 버전(예: v1.36)과 함께 제공된 버전으로
# 정책을 고정(pin)할 수 있는 모드별 버전 라벨.
#
# MODE는 `enforce`, `audit`, `warn` 중 하나여야 한다.
# VERSION은 유효한 쿠버네티스 마이너 버전 또는 `latest`여야 한다.
pod-security.kubernetes.io/<MODE>-version: <VERSION>
워크로드 리소스와 Pod 템플릿 (Workload resources and Pod templates)
Pod는 흔히 Deployment나 Job 같은 워크로드 오브젝트를 생성함으로써 간접적으로 만들어져요. 워크로드 오브젝트는 Pod 템플릿을 정의하고, 워크로드 리소스의 컨트롤러가 그 템플릿을 기반으로 Pod를 생성해요. 위반을 일찍 잡기 위해 audit과 warn 모드는 모두 워크로드 리소스에 적용돼요. 그러나 enforce 모드는 워크로드 리소스에는 적용되지 않고, 결과로 만들어진 pod 오브젝트에만 적용돼요.
면제 (Exemptions)
보안 시행에서 면제(exemptions) 를 정의해서, 주어진 네임스페이스와 연관된 정책 때문에 원래는 금지됐을 Pod의 생성을 허용할 수 있어요. 면제는 Admission Controller 구성에서 정적으로 구성할 수 있어요.
면제는 명시적으로 열거해야 해요. 면제 기준을 충족하는 요청은 Admission Controller가 무시해요(enforce, audit, warn 동작을 모두 건너뜀). 면제 차원은 다음과 같아요:
- 사용자 이름(Usernames): 면제된 인증(또는 가장된 impersonated) 사용자 이름을 가진 사용자의 요청은 무시돼요.
- RuntimeClassNames: 면제된 런타임 클래스 이름을 지정하는 pod와 워크로드 리소스는 무시돼요.
- 네임스페이스(Namespaces): 면제된 네임스페이스에 있는 pod와 워크로드 리소스는 무시돼요.
주의 (Caution)
대부분의 Pod는 워크로드 리소스에 응답하여 컨트롤러가 생성해요. 즉, 최종 사용자를 면제하면 Pod를 직접 생성할 때만 면제되고, 워크로드 리소스를 생성할 때는 면제되지 않아요. 컨트롤러 서비스 계정(예: system:serviceaccount:kube-system:replicaset-controller)은 일반적으로 면제하면 안 돼요. 그렇게 하면 해당 워크로드 리소스를 만들 수 있는 모든 사용자를 암묵적으로 면제하게 되기 때문이에요.
허용되는 Pod 업데이트에는 다음이 포함돼요(예외 없음):
- seccomp 또는 AppArmor 주석 변경을 제외한 모든 메타데이터 업데이트:
seccomp.security.alpha.kubernetes.io/pod(deprecated)container.seccomp.security.alpha.kubernetes.io/*(deprecated)container.apparmor.security.beta.kubernetes.io/*(deprecated)
.spec.activeDeadlineSeconds의 유효한 업데이트
메트릭 (Metrics)
pod_security_errors_total: 정상적인 평가를 막는 오류의 수를 나타내는 메트릭. 치명적이지 않은 오류는 시행에 최신 restricted 프로파일이 사용되도록 할 수 있어요.pod_security_evaluations_total: 얼마나 많은 정책 평가가 발생했는지를 나타내는 메트릭. 내보내기(exports) 중 무시되거나 면제된 요청은 세지 않아요.pod_security_exemptions_total: 면제된 요청의 수를 나타내는 메트릭. 무시되거나 범위 밖의 요청은 세지 않아요.