이 페이지에서는 정책 적용 전 정책을 테스트할 수 있는 추가 기능과 함께 정책 컨트롤러 제약조건을 사용하여 PodSecurityPolicies와 동일한 여러 보호 기능을 이용하는 방법을 보여줍니다. 이 문서의 예시에서 모든 관련 제약조건이 설명되진 않지만, 작업을 시작할 수 있는 방법을 알 수 있습니다.
이 문서에 설명된 제약조건 및 제약조건 템플릿의 소스 코드는 Gatekeeper 프로젝트 저장소의 pod-security-policy 디렉터리에 있습니다. 각 제약조건 템플릿에는 단위 테스트도 포함됩니다.
시작하기 전에
Anthos Config Management에 등록된 클러스터 중 하나에 Policy Controller 설치합니다. 제약조건 템플릿 라이브러리를 사용 설정된 상태로 두어야 합니다.
제약조건 만들기 및 제약조건 템플릿 작성을 숙지합니다.
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
시행 작업을 사용하여 활성 워크로드를 중단하지 않고 제약조건의 효과를 테스트 할 수 있습니다. 이렇게 하면 적극적으로 차단하지 않고도 정책 감사 결과가 생성됩니다. 자세한 내용은 제약조건을 사용한 감사를 참조하세요.
다음 단계
- 제약조건 템플릿 라이브러리 사용
- 제약조건 만들기 및 제약조건 템플릿 만들기 자세히 알아보기