TutorialDecember 25, 2025Sarah Kim24 views

Kubernetes Pod Security Standards: PSP 폐기 이후 컨테이너 보안 정책 완벽 가이드

Kubernetes 환경에서 Pod Security Policies(PSP) 폐기 이후 컨테이너 보안 정책을 효과적으로 관리하는 방법을 제시합니다. Pod Security Standards(PSS)와 Admission Controller를 활용한 실전 가이드를 통해 안전하고 효율적인 Kubernetes 보안 아키텍처를 구축하는 데 필요한 핵심 전략을 상세히 설명합니다.

#Kubernetes 보안#Pod Security Standards#PSS#PSP 폐기#컨테이너 보안#Admission Controller#OPA Gatekeeper#Kyverno#FRIIM CNAPP
Kubernetes Pod Security Standards: PSP 폐기 이후 컨테이너 보안 정책 완벽 가이드
Sarah Kim

Sarah Kim

December 25, 2025

Kubernetes Pod Security Standards: PSP 폐기 이후 컨테이너 보안 정책 완벽 가이드

Kubernetes 환경에서 Pod의 보안 정책을 효과적으로 관리하는 것은 매우 중요합니다. 과거에는 Pod Security Policies(PSP)가 이러한 역할을 수행했으나, Kubernetes 1.21 버전부터 Deprecated되었고, 1.25 버전에서는 완전히 제거되었습니다. 이러한 변화는 많은 조직에게 새로운 보안 정책 관리 방안을 모색하게 만들었습니다. PSP의 복잡성과 관리의 어려움은 새로운 접근 방식의 필요성을 더욱 부각시켰습니다. 이제 Kubernetes는 Pod Security Standards(PSS)와 이를 구현하는 Admission Controller 기반의 솔루션을 통해 컨테이너 보안을 강화하는 방향으로 진화하고 있습니다.

이 가이드에서는 PSP 폐기 이후 Kubernetes 보안 정책을 관리하기 위한 핵심 전략을 체계적으로 다루고 있습니다. PSS의 개념부터 OPA Gatekeeper와 같은 Policy Engine을 활용하여 실제 보안 정책을 구현하고 관리하는 방법에 이르기까지, 단계별 접근 방식을 통해 컨테이너 환경의 보안 수준을 한층 더 높일 수 있는 실용적인 인사이트를 제공합니다. 안전하고 견고한 Kubernetes 클러스터를 구축하고 운영하기 위한 필수적인 지침이 될 것입니다.

배경 지식: PSP의 한계와 PSS의 등장

먼저 Pod Security Policies(PSP)가 왜 Deprecated되었는지 살펴보겠습니다. PSP는 Kubernetes 클러스터의 Pod이 특정 보안 요구 사항을 충족하도록 강제하는 데 사용되었던 Admission Controller였습니다. 예를 들어, privileged 컨테이너 실행 금지, hostPath 볼륨 사용 제한, root 유저 실행 금지 등의 정책을 정의할 수 있었습니다. 하지만 PSP는 다음과 같은 여러 한계점을 가지고 있었습니다.

  • 복잡한 RBAC 바인딩: PSP는 Pod 생성 시 요청하는 서비스 어카운트에 올바른 PSP를 바인딩해야만 적용되었습니다. 이 과정에서 필요한 RBAC(Role-Based Access Control) 설정이 매우 복잡하고 오류가 발생하기 쉬웠습니다.
  • 전역적인 적용의 어려움: 특정 네임스페이스에만 PSP를 적용하거나, 예외를 두는 것이 쉽지 않았습니다. 의도치 않게 모든 Pod에 강력한 정책이 적용되어 운영상의 어려움을 초래하기도 했습니다.
  • 기본 정책의 부재: 보안 요구사항에 따라 PSP를 직접 정의해야 했으며, 클러스터의 기본 보안 수준을 설정하는 표준화된 방법이 부족했습니다.

정리하면, PSP는 강력한 기능을 제공했지만, 관리 복잡성과 적용 유연성 부족으로 인해 더 나은 대안이 필요하다는 인식이 확산되었습니다. 이러한 배경 속에서 Pod Security Standards(PSS)가 등장했습니다. PSS는 세 가지 미리 정의된 보안 프로파일을 제공하여 Kubernetes 클러스터의 보안 정책 관리를 간소화합니다.

  • Privileged: 제한이 거의 없는 정책으로, 클러스터와 호스트에 대한 광범위한 접근 권한이 필요한 인프라 Pod에 사용됩니다.
  • Baseline: 알려진 권한 확대 공격을 방지하면서 최소한의 제한을 적용하는 정책입니다. 대부분의 애플리케이션 Pod에 적합합니다.
  • Restricted: Pod 강화 모범 사례를 따르는 고도로 제한적인 정책입니다. 보안에 가장 민감한 애플리케이션 Pod에 사용됩니다.

PSS는 Namespace에 label을 지정하여 적용하며, `PodSecurity` Admission Controller에 의해 Pod 생성 시 유효성이 검사됩니다. 이를 통해 RBAC 바인딩의 복잡성 없이 간편하게 네임스페이스별 보안 수준을 관리할 수 있게 됩니다. 또한 OPA Gatekeeper, Kyverno와 같은 Policy Engine을 함께 활용하면 PSS의 기본 정책 외에 더욱 세밀하고 유연한 커스텀 정책을 구현할 수 있습니다. 한마디로 PSS는 PSP의 단점을 보완하고, 표준화된 보안 가이드라인을 제공하여 Kubernetes 보안 정책 관리를 보다 직관적이고 효율적으로 만드는 데 기여합니다.

전제 조건

이 가이드를 따라가기 위해서는 다음과 같은 환경과 사전 지식이 필요합니다. 먼저 Kubernetes 클러스터가 필요합니다. Kubernetes 1.23 버전 이상을 사용하는 것이 권장되며, 이는 PSS가 GA(General Availability) 상태로 지원되기 시작한 버전입니다. 클러스터는 로컬 환경의 Minikube, Kind 또는 클라우드 제공업체의 관리형 서비스(예: AWS EKS, Azure AKS, GCP GKE) 등 어떤 형태든 무방합니다. 다음으로 클러스터와 상호작용하기 위한 `kubectl` 커맨드라인 툴이 설치되어 있고, 대상 클러스터에 접속할 수 있도록 설정되어 있어야 합니다.

또한 Helm이 설치되어 있어야 합니다. Helm은 Kubernetes 애플리케이션을 관리하는 패키지 매니저로, Policy Engine을 손쉽게 배포하는 데 사용됩니다. 마지막으로 Kubernetes의 기본적인 개념, 예를 들어 Pod, Deployment, Namespace, RBAC에 대한 이해가 있다면 가이드 내용을 더 깊이 있게 파악하는 데 도움이 될 것입니다. 이러한 전제 조건들을 갖추면, PSS와 Policy Engine을 활용한 Kubernetes 보안 정책 관리 실습을 원활하게 진행할 수 있습니다.

환경 설정: OPA Gatekeeper 배포

이제 Pod Security Standards(PSS)를 구현하고 확장할 Policy Engine인 OPA Gatekeeper를 Kubernetes 클러스터에 배포하겠습니다. OPA Gatekeeper는 Kubernetes Admission Controller를 활용하여 정책을 강제하는 프레임워크입니다. 먼저 Helm을 사용하여 Gatekeeper를 클러스터에 설치합니다. Gatekeeper는 별도의 네임스페이스에 설치되며, 클러스터 전반의 리소스를 감시하고 정책을 적용합니다.

아래 명령어를 통해 Gatekeeper Helm Repository를 추가하고, `gatekeeper-system` 네임스페이스에 Gatekeeper를 설치할 수 있습니다. 설치 명령어는 최신 버전을 기준으로 작성되었으며, 필요에 따라 버전을 명시할 수 있습니다.


helm repo add gatekeeper https://open-policy-agent.github.io/gatekeeper/charts
helm repo update
kubectl create namespace gatekeeper-system
helm install gatekeeper gatekeeper/gatekeeper --namespace gatekeeper-system

위 코드의 핵심은 Helm을 사용하여 Gatekeeper를 빠르고 안정적으로 배포하는 것입니다. 설치가 완료되면 Gatekeeper의 Pod들이 정상적으로 동작하는지 확인해야 합니다. 다음 명령어를 실행하여 `gatekeeper-system` 네임스페이스의 Pod 상태를 확인합니다. 모든 Pod이 `Running` 상태여야 합니다.


kubectl get pods -n gatekeeper-system

이제 Gatekeeper는 클러스터의 Admission Controller로 활성화되어 Pod 생성 및 업데이트 요청을 가로채고, 정의된 정책에 따라 유효성을 검사할 준비를 마쳤습니다. 다음 단계에서는 PSS를 네임스페이스에 적용하고, Gatekeeper를 통해 커스텀 정책을 구현하는 방법을 상세히 살펴보겠습니다.

단계별 가이드: PSS와 Gatekeeper를 활용한 보안 정책 구현

1. Pod Security Standards(PSS) 레이블 적용

먼저 PSS를 특정 네임스페이스에 적용하는 방법을 확인합니다. PSS는 Kubernetes 1.23부터 `PodSecurity` Admission Controller에 의해 기본적으로 활성화되어 있습니다. 네임스페이스에 적절한 레이블을 추가하는 것만으로 해당 네임스페이스에 PSS 프로파일을 강제할 수 있습니다. 이 가이드에서는 `restricted` 프로파일을 예시로 사용하겠습니다.

테스트용 네임스페이스를 생성하고 `restricted` PSS 프로파일을 적용해 봅니다.


kubectl create namespace pss-test
kubectl label namespace pss-test 
    pod-security.kubernetes.io/enforce=restricted 
    pod-security.kubernetes.io/warn=restricted 
    pod-security.kubernetes.io/audit=restricted

위 레이블을 적용하면 `pss-test` 네임스페이스에 `restricted` PSS가 강제(enforce)되고, 위반 시 경고(warn) 및 감사(audit) 로그가 생성됩니다. 이제 이 네임스페이스에 `privileged` 컨테이너를 가진 Pod를 배포하면, PSS 정책에 의해 거부됩니다.

2. Gatekeeper ConstraintTemplate 생성

다음으로 OPA Gatekeeper를 사용하여 PSS 외의 커스텀 보안 정책을 정의해 보겠습니다. Gatekeeper는 `ConstraintTemplate`과 `Constraint`를 통해 정책을 구현합니다. `ConstraintTemplate`은 정책의 로직을 정의하는 CRD(Custom Resource Definition)이며, 내부적으로 Rego 언어를 사용하여 정책 규칙을 작성합니다. 여기서는 컨테이너가 `root` 유저로 실행되는 것을 금지하는 `ConstraintTemplate`을 생성합니다.

disallow-root-user-template.yaml 파일을 생성합니다:


apiVersion: templates.gatekeeper.sh/v1
kind: ConstraintTemplate
metadata:
  name: k8sdisallowrootuser
spec:
  crd:
    spec:
      names:
        kind: K8sDisallowRootUser
  targets:
    - target: admission.k8s.gatekeeper.sh
      rego:
        package: k8sdisallowrootuser
        # Rego 정책 정의: 컨테이너가 root 유저(UID 0)로 실행되는 것을 금지합니다.
        # runAsNonRoot가 true로 설정되어 있거나, runAsUser가 0이 아닌 경우에만 허용합니다.
        # 보안 컨텍스트가 설정되지 않은 경우에도 거부합니다.
        violation[{"msg": msg}] {
          container := input.review.object.spec.containers[i]
          not container.securityContext.runAsNonRoot == true
          not container.securityContext.runAsUser > 0 # Allow non-zero UID
          msg := sprintf("Container '%v' must not run as root. Set runAsNonRoot to true or runAsUser to a non-zero value.", [container.name])
        }
        violation[{"msg": msg}] {
          container := input.review.object.spec.initContainers[i]
          not container.securityContext.runAsNonRoot == true
          not container.securityContext.runAsUser > 0
          msg := sprintf("Init Container '%v' must not run as root. Set runAsNonRoot to true or runAsUser to a non-zero value.", [container.name])
        }

위 YAML 파일을 클러스터에 적용합니다. 이 ConstraintTemplate은 컨테이너가 `runAsNonRoot: true`로 설정되거나 `runAsUser`가 0보다 큰 값으로 설정되지 않은 경우 이를 위반으로 간주합니다.


kubectl apply -f disallow-root-user-template.yaml

3. Gatekeeper Constraint 생성

이제 정의된 `ConstraintTemplate`을 실제 네임스페이스에 적용하는 `Constraint`를 생성합니다. `Constraint`는 어떤 리소스(Pod)에, 어떤 `ConstraintTemplate`을, 어떤 파라미터로 적용할지 명시합니다. 여기서는 앞에서 생성한 `K8sDisallowRootUser` 템플릿을 `pss-test` 네임스페이스에 적용합니다.

disallow-root-user-constraint.yaml 파일을 생성합니다:


apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sDisallowRootUser
metadata:
  name: disallow-root-user-in-pss-test
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces:
      - "pss-test" # pss-test 네임스페이스에만 이 정책을 적용합니다.

위 YAML 파일을 클러스터에 적용합니다.


kubectl apply -f disallow-root-user-constraint.yaml

이제 `pss-test` 네임스페이스에 Pod를 배포할 때, PSS `restricted` 프로파일과 더불어 root 유저 실행 금지 정책이 함께 적용됩니다. `Constraint`의 핵심은 `match.namespaces`를 통해 정책 적용 범위를 명확히 지정할 수 있다는 점입니다.

4. 정책 테스트 및 결과 확인

이제 정의된 정책이 제대로 작동하는지 테스트합니다. `pss-test` 네임스페이스에 PSS `restricted`와 Gatekeeper `K8sDisallowRootUser` 정책을 모두 위반하는 Pod를 배포해 보겠습니다. `privileged: true`와 `runAsUser: 0`을 포함한 Pod를 생성합니다.

bad-pod.yaml 파일을 생성합니다:


apiVersion: v1
kind: Pod
metadata:
  name: bad-security-pod
  namespace: pss-test
spec:
  containers:
    - name: bad-container
      image: busybox
      command: ["sleep", "3600"]
      securityContext:
        privileged: true # PSS restricted 위반
        runAsUser: 0     # Gatekeeper 정책 위반 (root 유저)

이 Pod를 배포해 봅니다.


kubectl apply -f bad-pod.yaml

명령어를 실행하면 Pod 생성 요청이 거부될 것입니다. `kubectl describe pod bad-security-pod -n pss-test` 명령어를 통해 거부 메시지를 확인하여 PSS와 Gatekeeper 정책이 모두 적용되었음을 확인할 수 있습니다.

예상 결과

앞서 진행한 단계별 가이드에 따라 성공적으로 환경을 설정하고 정책을 배포했다면, 다음과 같은 결과를 기대할 수 있습니다. 먼저 `pss-test` 네임스페이스에 레이블을 적용한 후, 해당 네임스페이스에 PSS `restricted` 프로파일을 위반하는 Pod(예: `privileged: true`)를 배포하면, Kubernetes API 서버의 `PodSecurity` Admission Controller에 의해 Pod 생성 요청이 거부될 것입니다. 오류 메시지에는 `pods "bad-security-pod" is forbidden: violates PodSecurity "restricted:latest"`와 같은 내용이 포함되어 PSS 위반임을 명확히 보여줍니다.

마찬가지로, OPA Gatekeeper를 통해 생성한 `K8sDisallowRootUser` ConstraintTemplate 및 Constraint를 적용한 후, `pss-test` 네임스페이스에 `runAsUser: 0`으로 설정된 Pod를 배포하면, Gatekeeper Admission Controller에 의해 Pod 생성이 거부됩니다. 이 경우 오류 메시지에는 Gatekeeper가 정의한 정책 위반 내용이 포함될 것입니다. 예를 들어, `Admission webhook "validation.gatekeeper.sh" denied the request: [k8sdisallowrootuser] Container 'bad-container' must not run as root.`와 같은 메시지를 확인할 수 있습니다. 이 두 가지 결과는 PSS와 Gatekeeper 기반의 커스텀 정책이 클러스터 내에서 성공적으로 동작하며 Pod의 보안 속성을 검증하고 있음을 증명합니다.

문제 해결

Kubernetes 보안 정책을 설정하고 관리하는 과정에서 몇 가지 일반적인 문제가 발생할 수 있습니다. 각 문제에 대한 해결 방법을 살펴보겠습니다.

1. Gatekeeper Pod가 Running 상태가 아닌 경우

Gatekeeper 설치 후 `kubectl get pods -n gatekeeper-system` 명령 시 Pod들이 `Pending` 또는 `CrashLoopBackOff` 상태일 수 있습니다. 이는 주로 리소스 부족, CRD(Custom Resource Definition) 설치 오류, 또는 네트워크 문제로 인해 발생합니다.

  • 해결 방법: `kubectl describe pod -n gatekeeper-system` 명령어로 이벤트 로그를 확인하여 구체적인 원인을 파악합니다. 리소스 부족이라면 클러스터의 리소스 할당량을 늘리거나, Gatekeeper Pod의 리소스 요청량을 조절해야 합니다. CRD가 제대로 설치되지 않았다면 Helm 명령어를 `helm install --skip-crds` 등으로 실행 후 CRD를 수동으로 적용해 볼 수 있습니다.

2. 정책이 적용되지 않거나 예상과 다르게 동작하는 경우

Pod를 배포했는데 정책 위반 Pod가 거부되지 않거나, 의도치 않은 Pod가 거부되는 경우가 있습니다.

  • 해결 방법:
    • 네임스페이스 레이블 확인: PSS의 경우, 대상 네임스페이스에 `pod-security.kubernetes.io/enforce` 레이블이 올바르게 적용되었는지 확인합니다.
    • Constraint/ConstraintTemplate 범위 확인: Gatekeeper Constraint의 `match.namespaces` 또는 `match.kinds`가 올바르게 설정되었는지 확인합니다.
    • Rego 정책 검토: ConstraintTemplate 내 Rego 정책 로직이 올바른지 다시 한번 검토합니다. Gatekeeper Audit 모드를 활용하여 현재 클러스터의 리소스가 정책을 위반하는지 확인할 수 있습니다.
    • Admission Controller 상태 확인: Kubernetes API 서버에 `PodSecurity` Admission Controller가 활성화되어 있는지, Gatekeeper webhook이 정상적으로 등록되었는지 확인합니다.

3. Admission Webhook Timeout 발생

Pod 생성 시 `Admission webhook "validation.gatekeeper.sh" denied the request: timed out`과 같은 오류가 발생하는 경우입니다. 이는 주로 Gatekeeper Pod의 응답이 지연되거나, 네트워크 지연으로 인해 발생합니다.

  • 해결 방법: Gatekeeper Pod의 리소스(CPU, Memory)를 충분히 할당하여 성능 병목을 해소합니다. 또한 Gatekeeper Pod와 API 서버 간의 네트워크 지연이 없는지 확인하고, 필요한 경우 Service Mesh 또는 네트워크 정책을 조정합니다. Gatekeeper `ValidatingWebhookConfiguration`의 `timeoutSeconds` 값을 늘리는 것도 임시적인 해결책이 될 수 있지만, 근본적인 성능 개선이 우선되어야 합니다.

이러한 문제 해결 팁을 통해 Kubernetes 보안 정책 관리 시 발생할 수 있는 일반적인 장애를 효과적으로 진단하고 해결할 수 있습니다.

고급 활용

Pod Security Standards(PSS)와 Policy Engine을 활용한 보안 정책 관리는 기본적인 적용을 넘어 다양한 고급 시나리오로 확장될 수 있습니다. 이러한 고급 활용을 통해 보안 아키텍처의 견고성과 효율성을 더욱 강화할 수 있습니다.

1. CI/CD 파이프라인 통합

정책 위반을 런타임에 탐지하는 것 외에도, 개발 초기 단계에서부터 정책을 검증하는 것이 효율적입니다. CI/CD 파이프라인에 정책 검증 단계를 추가하여 Kubernetes manifests가 클러스터에 배포되기 전에 정책 위반 여부를 확인할 수 있습니다. OPA Gatekeeper의 `gator` CLI 툴이나 Kyverno CLI 툴을 사용하여 로컬 환경 또는 CI/CD 파이프라인에서 Dry Run 방식으로 정책 검증을 수행할 수 있습니다. 이를 통해 개발자는 배포 전에 잠재적인 보안 문제를 조기에 파악하고 수정하여 개발 프로세스의 병목 현상을 줄일 수 있습니다.

2. GitOps와 정책 관리

ArgoCD 또는 FluxCD와 같은 GitOps 툴을 활용하여 PSS 레이블 및 Gatekeeper/Kyverno 정책을 Git Repository에 코드 형태로 관리할 수 있습니다. Policy as Code(PaC) 접근 방식은 모든 정책 변경 사항을 Git을 통해 추적하고, 검토하며, 자동으로 클러스터에 적용할 수 있게 합니다. 이는 정책 관리의 일관성, 투명성, 그리고 자동화를 크게 향상시킵니다. GitOps 툴의 Sync 기능과 Health Check 기능을 활용하여 정책 배포의 안정성을 확보하는 것이 가능합니다.

3. Audit 모드 활용 및 모니터링

새로운 정책을 클러스터에 적용하기 전에 `enforce` 모드 대신 `audit` 또는 `warn` 모드로 먼저 배포하여 실제 환경에 미치는 영향을 측정하고, 발생할 수 있는 잠재적인 문제를 미리 파악할 수 있습니다. Gatekeeper는 Audit 기능을 통해 기존 리소스가 정의된 정책을 얼마나 위반하고 있는지 스캔할 수 있습니다. 이러한 Audit 결과를 Prometheus, Grafana와 같은 모니터링 스택과 통합하여 정책 위반 현황을 시각화하고, 지속적으로 감시하는 체계를 구축할 수 있습니다. 위반이 감지되면 Slack, PagerDuty 등 알림 시스템과 연동하여 보안팀에 즉시 통보하는 자동화된 대응 체계를 마련하는 것이 바람직합니다.

4. 동적 파라미터 및 Mutating 정책

Gatekeeper는 ConstraintTemplate에서 동적 파라미터를 받아 정책의 유연성을 높일 수 있습니다. 예를 들어, 특정 이미지 레지스트리 목록을 파라미터로 받아 해당 레지스트리만 허용하는 정책을 만들 수 있습니다. Kyverno는 정책 적용 시 단순히 Pod를 거부하는 것 외에, Pod의 Manifest를 변경(mutate)하는 기능도 제공합니다. 예를 들어, 보안 컨텍스트가 없는 Pod에 자동으로 `runAsNonRoot: true`와 같은 설정을 주입하여 보안 기본값을 강제할 수 있습니다. 이러한 Mutating Webhook 정책은 개발자의 편의성을 높이면서도 보안 요구사항을 충족시키는 강력한 도구가 됩니다.

이처럼 PSS와 Policy Engine을 고급 수준으로 활용하면, Kubernetes 환경의 보안을 더욱 강력하고 유연하게 관리할 수 있는 기반을 마련할 수 있습니다.

보안 고려사항

Kubernetes Pod Security Standards와 Policy Engine을 활용하여 보안 정책을 구현할 때는 몇 가지 중요한 보안 고려사항을 염두에 두어야 합니다. 이러한 고려사항들은 클러스터의 전반적인 보안 태세를 강화하고 잠재적인 위험을 최소화하는 데 필수적입니다.

  • 최소 권한(Least Privilege) 원칙: 모든 보안 정책은 최소 권한 원칙에 따라 설계되어야 합니다. Pod는 자신이 수행해야 하는 작업에 필요한 최소한의 권한만을 가져야 합니다. 너무 광범위한 권한을 허용하는 정책은 잠재적인 공격 벡터를 증가시킬 수 있습니다.
  • 정책의 충분한 테스트: 새로운 보안 정책을 `enforce` 모드로 프로덕션 환경에 적용하기 전에, 개발 및 스테이징 환경에서 충분한 테스트를 수행해야 합니다. 이는 오작동하는 정책이 정상적인 애플리케이션의 배포 및 운영을 방해하는 것을 방지합니다. 다양한 시나리오와 엣지 케이스를 고려하여 정책의 유효성을 검증해야 합니다.
  • 정책의 정기적인 검토 및 업데이트: 클러스터의 사용 패턴, 애플리케이션 요구사항, 그리고 최신 보안 위협 동향은 끊임없이 변화합니다. 따라서 보안 정책도 이러한 변화에 맞춰 정기적으로 검토하고 업데이트해야 합니다. 오래된 정책은 새로운 취약점을 방어하지 못할 수 있습니다.
  • `break-glass` 절차 마련: 비상 상황이나 정책 오류로 인해 클러스터 운영이 중단될 경우를 대비하여, 정의된 정책을 일시적으로 비활성화하거나 우회할 수 있는 `break-glass` 절차를 반드시 마련해야 합니다. 이 절차는 엄격하게 통제되고 문서화되어야 하며, 최소한의 인원에게만 접근 권한이 부여되어야 합니다.
  • 로그 및 모니터링: Admission Controller의 정책 위반 로그와 Policy Engine의 Audit 로그를 지속적으로 수집하고 모니터링해야 합니다. 이상 징후나 반복적인 정책 위반 시도를 탐지하여 즉시 대응할 수 있는 시스템을 구축하는 것이 중요합니다. 이는 보안 이벤트에 대한 가시성을 확보하고 신속한 조치를 가능하게 합니다.

이러한 보안 고려사항을 철저히 준수함으로써, Kubernetes 환경에서 Pod Security Standards 및 Policy Engine 기반의 보안 정책을 효과적으로 운영하고, 클러스터의 전반적인 보안 상태를 지속적으로 개선할 수 있습니다.

결론

Kubernetes 환경에서 Pod Security Policies(PSP)의 폐기는 컨테이너 보안 정책 관리에 새로운 접근 방식을 요구했습니다. 이 가이드를 통해 Pod Security Standards(PSS)의 도입 배경과 세 가지 보안 프로파일의 중요성을 이해하고, OPA Gatekeeper와 같은 Policy Engine을 활용하여 PSS를 보완하며 더욱 강력하고 유연한 커스텀 보안 정책을 구현하는 방법을 단계별로 살펴보았습니다. PSS를 통한 네임스페이스 기반의 표준화된 보안 적용과 Policy Engine을 통한 세밀한 정책 제어는 Kubernetes 클러스터의 보안 수준을 한층 높이는 데 필수적인 전략이라 할 수 있겠습니다.

정리하면, 효율적인 Kubernetes 보안 정책 관리는 PSS를 기반으로 하되, OPA Gatekeeper 또는 Kyverno와 같은 Policy Engine을 함께 사용하여 조직의 특정 요구사항에 맞는 정책을 구현하고 강제하는 것으로 귀결됩니다. 개발 초기 단계에서의 정책 검증부터 GitOps 기반의 정책 관리, 그리고 지속적인 모니터링에 이르는 포괄적인 접근 방식이 중요합니다. 이러한 체계적인 보안 정책 관리는 잠재적인 보안 위협으로부터 클러스터와 애플리케이션을 보호하고, 컴플라이언스 요구사항을 충족하는 데 큰 도움이 될 것입니다. 즉, 컨테이너화된 환경에서 보안 취약점을 최소화하고 안정적인 운영을 위한 핵심적인 요소가 됩니다.

다음 학습 단계로는 더 복잡한 Rego 정책 작성법을 익히거나, Kyverno의 mutating 및 validating 정책 기능을 탐구하여 보다 정교한 보안 자동화를 구현하는 것을 추천합니다. 또한 클라우드 네이티브 보안 플랫폼(CNAPP)과 같은 통합 솔루션을 통해 Kubernetes 보안 정책 관리의 복잡성을 줄이고 효율성을 극대화하는 방안을 모색할 수 있습니다. 특히 FRIIM CNAPP은 Pod Security Standards 및 Policy Engine 기반의 정책 관리를 자동화하고, 클라우드 전반의 보안 가시성 및 컴플라이언스 준수를 통합적으로 제공함으로써 이러한 프로세스를 간소화하고 강화할 수 있습니다. FRIIM CNAPP을 활용하면 정책 정의부터 적용, 모니터링 및 위반 대응에 이르는 전 과정에서 보안 운영팀의 부담을 줄이고 클라우드 환경의 보안 태세를 효과적으로 유지하는 것이 가능해집니다.

Stay Updated

Get the latest security insights delivered to your inbox.

Tags

#Kubernetes 보안#Pod Security Standards#PSS#PSP 폐기#컨테이너 보안#Admission Controller#OPA Gatekeeper#Kyverno#FRIIM CNAPP