네임스페이스 라벨로 Pod 보안 표준 강제하기

네임스페이스 라벨로 Pod 보안 표준 강제하기 (Enforce Pod Security Standards with Namespace Labels)

네임스페이스에 라벨을 붙여 Pod Security Standards를 강제할 수 있어요. privileged, baseline, restricted 세 가지 정책은 보안 스펙트럼을 광범위하게 다루며 Pod Security 승인 컨트롤러에 의해 구현돼요.

출처: 문서

본문

시작하기 전에 (Before you begin)

Pod Security Admission은 Kubernetes v1.23에서 베타로 기본 사용 가능했어요. 1.25 버전부터 Pod Security Admission은 일반적으로 사용 가능해요.

버전을 확인하려면 kubectl version을 입력하세요.

네임스페이스 라벨로 baseline Pod 보안 표준 요구하기 (Requiring the baseline Pod Security Standard with namespace labels)

이 매니페스트는 다음과 같은 my-baseline-namespace라는 Namespace를 정의해요.

  • baseline 정책 요구 사항을 충족하지 않는 모든 파드를 차단.
  • restricted 정책 요구 사항을 충족하지 않는 생성된 파드에 사용자 대상 경고를 생성하고 감사(audit) 어노테이션을 추가.
  • baselinerestricted 정책의 버전을 v1.37에 고정.
apiVersion: v1
kind: Namespace
metadata:
  name: my-baseline-namespace
  labels:
    pod-security.kubernetes.io/enforce: baseline
    pod-security.kubernetes.io/enforce-version: v1.37

    # 우리는 이것을 _원하는_ `enforce` 수준으로 설정하고 있습니다.
    pod-security.kubernetes.io/audit: restricted
    pod-security.kubernetes.io/audit-version: v1.37
    pod-security.kubernetes.io/warn: restricted
    pod-security.kubernetes.io/warn-version: v1.37

kubectl label로 기존 네임스페이스에 라벨 추가하기 (Add labels to existing namespaces with kubectl label)

참고: enforce 정책(또는 버전) 라벨이 추가되거나 변경되면 승인 플러그인이 새 정책에 대해 네임스페이스의 각 파드를 테스트해요. 위반 사항은 경고로 사용자에게 반환돼요.

네임스페이스의 보안 프로필 변경을 처음 평가할 때 --dry-run 플래그를 적용하는 것이 유용해요. Pod Security Standard 검사는 여전히 dry run 모드로 실행되어, 새 정책이 기존 파드를 어떻게 대할지에 대한 정보를 실제로 정책을 업데이트하지 않고 제공해 줘요.

kubectl label --dry-run=server --overwrite ns --all \
    pod-security.kubernetes.io/enforce=baseline

모든 네임스페이스에 적용하기 (Applying to all namespaces)

Pod Security Standards를 막 시작했다면, 적합한 첫 단계는 모든 네임스페이스에 baseline 같은 더 엄격한 수준에 대한 감사 어노테이션을 구성하는 것이에요.

kubectl label --overwrite ns --all \
  pod-security.kubernetes.io/audit=baseline \
  pod-security.kubernetes.io/warn=baseline

이것은 enforce 레벨을 설정하지 않으므로, 명시적으로 평가되지 않은 네임스페이스를 구분할 수 있다는 점을 주목하세요. 다음 명령으로 명시적으로 설정된 enforce 레벨이 없는 네임스페이스를 나열할 수 있어요.

kubectl get namespaces --selector='!pod-security.kubernetes.io/enforce'

단일 네임스페이스에 적용하기 (Applying to a single namespace)

특정 네임스페이스도 업데이트할 수 있어요. 이 명령은 my-existing-namespaceenforce=restricted 정책을 추가하고 restricted 정책 버전을 v1.37에 고정해요.

kubectl label --overwrite ns my-existing-namespace \
  pod-security.kubernetes.io/enforce=restricted \
  pod-security.kubernetes.io/enforce-version=v1.37

더 알아보기 (Learn more)