제약조건을 사용하여 Pod 보안 강화

이 페이지에서는 정책 적용 전 정책을 테스트할 수 있는 추가 기능과 함께 정책 컨트롤러 제약조건을 사용하여 PodSecurityPolicies와 동일한 여러 보호 기능을 이용하는 방법을 보여줍니다. 이 문서의 예시에서 모든 관련 제약조건이 설명되진 않지만, 작업을 시작할 수 있는 방법을 알 수 있습니다.

이 문서에 설명된 제약조건 및 제약조건 템플릿의 소스 코드는 Gatekeeper 프로젝트 저장소의 pod-security-policy 디렉터리에 있습니다. 각 제약조건 템플릿에는 단위 테스트도 포함됩니다.

시작하기 전에

pod가 권한이 있는 컨테이너를 실행하지 못하도록 방지

권한이 있는 컨테이너가 노드의 호스트 운영체제 또는 노드에서 실행되는 다른 워크로드에 영향을 줄 수 있으므로, Pod가 권한이 있는 컨테이너를 실행하지 못하도록 방지하는 것이 좋습니다.

이 제약조건은 K8sPSPPrivilegedContainer 제약조건 템플릿을 사용하여 Pod가 권한이 있는 컨테이너를 실행하지 못하도록 방지합니다.

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sPSPPrivilegedContainer
metadata:
  name: psp-privileged-container
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    excludedNamespaces: ["kube-system"]

컨테이너에 읽기 전용 루트 파일 시스템 필요

기본적으로 컨테이너는 루트 파일 시스템에 쓸 수 있습니다. 보안 문제 외에도 컨테이너의 쓰기 가능한 레이어의 쓰기 지연으로 인해 성능 병목 현상이 발생할 수 있습니다. PodSecurityPolicy를 사용하거나 제약조건을 사용하여 컨테이너에서 읽기 전용 루트 파일 시스템을 필수로 지정할 수 있습니다.

이 제약조건은 K8sPSPReadOnlyRootFilesystem 제약조건 템플릿을 사용합니다.

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sPSPReadOnlyRootFilesystem
metadata:
  name: psp-readonlyrootfilesystem
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]

컨테이너가 마운트할 수 있는 볼륨 유형 제한

기본적으로 컨테이너는 Kubernetes API에 등록된 모든 유형의 볼륨을 클러스터에 마운트할 수 있습니다.

이 제약조건은 K8sPSPVolumeTypes 제약조건 템플릿을 사용하여 컨테이너를 제한된 볼륨 유형 세트로 제한합니다.

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sPSPVolumeTypes
metadata:
  name: psp-volume-types
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
  parameters:
    volumes:
    # - "*" # * can be used to allow all volume types
    - configMap
    - emptyDir
    - projected
    - secret
    - downwardAPI
    - persistentVolumeClaim
    #- hostPath #required for allowedHostPaths
    - flexVolume #required for allowedFlexVolumes

결과 감사

dryrun 시행 작업을 사용하여 활성 워크로드를 중단하지 않고 제약조건의 효과를 테스트 할 수 있습니다. 이렇게 하면 적극적으로 차단하지 않고도 정책 감사 결과가 생성됩니다. 자세한 내용은 제약조건을 사용한 감사를 참조하세요.

다음 단계