NIST SP 800-53 개정판 5 정책 제약조건 사용

정책 컨트롤러는 NIST SP 800-53 개정판 5 번들과 함께 사용할 수 있는 제약조건 템플릿미국 국립 표준 기술 연구소(NIST) 특별 간행물(SP) 800-53 개정판 5에 나열된 기본 라이브러리와 함께 제공됩니다. 번들은 즉시 사용 가능한 보안 및 개인정보처리방침을 구현하여 조직이 다양한 위협으로부터 시스템과 데이터를 보호하는 데 도움을 줄 수 있습니다.

이 페이지는 감사 또는 시행을 위한 자동화를 제공하고 유지하여 클라우드 플랫폼 내에서 실행되는 모든 리소스가 조직의 규정 준수 요구사항을 충족하도록 하려는 IT 관리자와 운영자를 위해 작성되었습니다. Google Cloud 콘텐츠에서 참조하는 일반적인 역할 및 예시 작업에 대해 자세히 알아보려면 일반 GKE Enterprise 사용자 역할 및 작업을 참조하세요.

NIST SP 800-53 개정판 5 정책 번들 제약조건

제약조건 이름 제약조건 설명 컨트롤 ID
nist-sp-800-53-r5-block-secrets-of-type-basic-auth 기본 인증 유형 보안 비밀을 제한합니다. AC-16 보안 및 개인 정보 보호 속성
nist-sp-800-53-r5-restrict-hostpath-volumes HostPath 볼륨의 사용을 제한합니다.
nist-sp-800-53-r5-restrict-rbac-subjects RBAC 주제에서 이름 사용을 허용된 값으로 제한합니다. AC-2 계정 관리
nist-sp-800-53-r5-restrict-rbac-subjects RBAC 주제에서 이름 사용을 허용된 값으로 제한합니다. AC-3 액세스 시행
nist-sp-800-53-r5-block-secrets-of-type-basic-auth 기본 인증 유형 보안 비밀을 제한합니다. AC-4 정보 흐름 시행
nist-sp-800-53-r5-require-binauthz 허용 웹훅 검증을 위한 Binary Authorization이 필요합니다.
nist-sp-800-53-r5-require-namespace-network-policies 클러스터에 정의된 모든 네임스페이스에 NetworkPolicy가 있어야 합니다.
nist-sp-800-53-r5-restrict-hostpath-volumes HostPath 볼륨의 사용을 제한합니다.
nist-sp-800-53-r5-require-binauthz 허용 웹훅 검증을 위한 Binary Authorization이 필요합니다. AC-6 최소 권한
nist-sp-800-53-r5-restrict-clusteradmin-rolebindings `cluster-admin` 역할 사용을 제한합니다.
nist-sp-800-53-r5-restrict-repos 컨테이너 이미지를 허용된 `repos` 목록으로 제한합니다.
nist-sp-800-53-r5-restrict-role-wildcards `Roles` 및 `ClusterRoles`에서 와일드 카드 사용을 제한합니다.
nist-sp-800-53-r5-require-binauthz 허용 웹훅 검증을 위한 Binary Authorization이 필요합니다. AU-10 부인 방지
nist-sp-800-53-r5-nodes-have-consistent-time Container-Optimized OS(COS) 또는 Ubuntu를 OS 이미지로 허용하여 노드에서 일관되고 올바른 시간을 보장합니다. AU-8 타임스탬프
nist-sp-800-53-r5-require-namespace-network-policies 클러스터에 정의된 모든 네임스페이스에 NetworkPolicy가 있어야 합니다. CA-9 내부 시스템 연결
nist-sp-800-53-r5-require-binauthz 허용 웹훅 검증을 위한 Binary Authorization이 필요합니다. CM-14 서명된 구성요소
nist-sp-800-53-r5-enforce-config-management 클러스터에 하나 이상의 `RootSync` 객체가 있는 구성 동기화가 실행 중이고 드리프트 방지가 사용 설정되어 있어야 합니다. CM-2 기준 구성
nist-sp-800-53-r5-require-managed-by-label 모든 앱에 유효한 `app.kubernetes.io/managed-by` 라벨이 있어야 합니다.
nist-sp-800-53-r5-apparmor 포드에 허용되는 AppArmor 프로필을 제한합니다. CM-3 구성 변경 제어
nist-sp-800-53-r5-block-secrets-of-type-basic-auth 기본 인증 유형 보안 비밀을 제한합니다.
nist-sp-800-53-r5-capabilities 포드에 허용되는 추가 기능을 제한합니다.
nist-sp-800-53-r5-enforce-config-management 클러스터에 하나 이상의 `RootSync` 객체가 있는 구성 동기화가 실행 중이고 드리프트 방지가 사용 설정되어 있어야 합니다.
nist-sp-800-53-r5-host-namespaces `hostPID` 또는 `hostIPC`를 `true`로 설정하여 컨테이너를 제한합니다.
nist-sp-800-53-r5-host-network `hostNetwork` 플래그를 `true`로 설정하여 컨테이너가 실행되지 않도록 제한합니다.
nist-sp-800-53-r5-privileged-containers `securityContext.privileged`를 `true`로 설정하여 컨테이너를 제한합니다.
nist-sp-800-53-r5-proc-mount-type 포드에 기본 `/proc` 마스크가 필요합니다.
nist-sp-800-53-r5-require-managed-by-label 모든 앱에 유효한 `app.kubernetes.io/managed-by` 라벨이 있어야 합니다.
nist-sp-800-53-r5-restrict-hostpath-volumes HostPath 볼륨의 사용을 제한합니다.
nist-sp-800-53-r5-restrict-volume-types 마운트 가능한 볼륨 유형을 허용 목록으로 제한합니다.
nist-sp-800-53-r5-seccomp Seccomp 프로필을 `Unconfined`로 명시적으로 설정하지 않아야 합니다.
nist-sp-800-53-r5-selinux 포드의 SELinux 구성을 제한합니다.
nist-sp-800-53-r5-sysctls 포드에 허용되는 Sysctl을 제한합니다.
nist-sp-800-53-r5-enforce-config-management 클러스터에 하나 이상의 `RootSync` 객체가 있는 구성 동기화가 실행 중이고 드리프트 방지가 사용 설정되어 있어야 합니다. CM-4 보안 영향 분석
nist-sp-800-53-r5-require-managed-by-label 모든 앱에 유효한 `app.kubernetes.io/managed-by` 라벨이 있어야 합니다.
nist-sp-800-53-r5-restrict-clusteradmin-rolebindings `cluster-admin` 역할 사용을 제한합니다.
nist-sp-800-53-r5-enforce-config-management 클러스터에 하나 이상의 `RootSync` 객체가 있는 구성 동기화가 실행 중이고 드리프트 방지가 사용 설정되어 있어야 합니다. CM-5 변경 액세스 제한
nist-sp-800-53-r5-require-managed-by-label 모든 앱에 유효한 `app.kubernetes.io/managed-by` 라벨이 있어야 합니다.
nist-sp-800-53-r5-restrict-clusteradmin-rolebindings `cluster-admin` 역할 사용을 제한합니다.
nist-sp-800-53-r5-block-secrets-of-type-basic-auth 기본 인증 유형 보안 비밀을 제한합니다. CM-6 구성 설정
nist-sp-800-53-r5-enforce-config-management 클러스터에 하나 이상의 `RootSync` 객체가 있는 구성 동기화가 실행 중이고 드리프트 방지가 사용 설정되어 있어야 합니다.
nist-sp-800-53-r5-require-binauthz 허용 웹훅 검증을 위한 Binary Authorization이 필요합니다.
nist-sp-800-53-r5-require-managed-by-label 모든 앱에 유효한 `app.kubernetes.io/managed-by` 라벨이 있어야 합니다.
nist-sp-800-53-r5-restrict-hostpath-volumes HostPath 볼륨의 사용을 제한합니다.
nist-sp-800-53-r5-restrict-volume-types 마운트 가능한 볼륨 유형을 허용 목록으로 제한합니다.
nist-sp-800-53-r5-apparmor 포드에 허용되는 AppArmor 프로필을 제한합니다. CM-7 최소 기능
nist-sp-800-53-r5-capabilities 포드에 허용되는 추가 기능을 제한합니다.
nist-sp-800-53-r5-host-namespaces `hostPID` 또는 `hostIPC`를 `true`로 설정하여 컨테이너를 제한합니다.
nist-sp-800-53-r5-host-network `hostNetwork` 플래그를 `true`로 설정하여 컨테이너가 실행되지 않도록 제한합니다.
nist-sp-800-53-r5-privileged-containers `securityContext.privileged`를 `true`로 설정하여 컨테이너를 제한합니다.
nist-sp-800-53-r5-proc-mount-type 포드에 기본 `/proc` 마스크가 필요합니다.
nist-sp-800-53-r5-restrict-clusteradmin-rolebindings `cluster-admin` 역할 사용을 제한합니다.
nist-sp-800-53-r5-restrict-hostpath-volumes HostPath 볼륨의 사용을 제한합니다.
nist-sp-800-53-r5-restrict-volume-types 마운트 가능한 볼륨 유형을 허용 목록으로 제한합니다.
nist-sp-800-53-r5-seccomp Seccomp 프로필을 `Unconfined`로 명시적으로 설정하지 않아야 합니다.
nist-sp-800-53-r5-selinux 포드의 SELinux 구성을 제한합니다.
nist-sp-800-53-r5-sysctls 포드에 허용되는 Sysctl을 제한합니다.
nist-sp-800-53-r5-enforce-config-management 클러스터에 하나 이상의 `RootSync` 객체가 있는 구성 동기화가 실행 중이고 드리프트 방지가 사용 설정되어 있어야 합니다. CP-10 정보 시스템 복구 및 재구성
nist-sp-800-53-r5-require-managed-by-label 모든 앱에 유효한 `app.kubernetes.io/managed-by` 라벨이 있어야 합니다.
nist-sp-800-53-r5-enforce-config-management 클러스터에 하나 이상의 `RootSync` 객체가 있는 구성 동기화가 실행 중이고 드리프트 방지가 사용 설정되어 있어야 합니다. CP-9 시스템 백업
nist-sp-800-53-r5-require-managed-by-label 모든 앱에 유효한 `app.kubernetes.io/managed-by` 라벨이 있어야 합니다.
nist-sp-800-53-r5-restrict-rbac-subjects RBAC 주제에서 이름 사용을 허용된 값으로 제한합니다. IA-2 식별 및 인증(조직 사용자)
nist-sp-800-53-r5-block-creation-with-default-serviceaccount 기본 서비스 계정을 사용한 리소스 생성을 제한합니다. IA-4 식별자 관리
nist-sp-800-53-r5-restrict-rbac-subjects RBAC 주제에서 이름 사용을 허용된 값으로 제한합니다.
nist-sp-800-53-r5-require-binauthz 허용 웹훅 검증을 위한 Binary Authorization이 필요합니다. IA-5 인증자 관리
nist-sp-800-53-r5-restrict-rbac-subjects RBAC 주제에서 이름 사용을 허용된 값으로 제한합니다.
nist-sp-800-53-r5-restrict-rbac-subjects RBAC 주제에서 이름 사용을 허용된 값으로 제한합니다. MA-4 로컬 외 유지보수
nist-sp-800-53-r5-enforce-config-management 클러스터에 하나 이상의 `RootSync` 객체가 있는 구성 동기화가 실행 중이고 드리프트 방지가 사용 설정되어 있어야 합니다. PL-1 정책 및 절차
nist-sp-800-53-r5-require-managed-by-label 모든 앱에 유효한 `app.kubernetes.io/managed-by` 라벨이 있어야 합니다.
nist-sp-800-53-r5-require-binauthz 허용 웹훅 검증을 위한 Binary Authorization이 필요합니다. RA-5 취약점 스캔
nist-sp-800-53-r5-enforce-config-management 클러스터에 하나 이상의 `RootSync` 객체가 있는 구성 동기화가 실행 중이고 드리프트 방지가 사용 설정되어 있어야 합니다. SA-10 개발자 구성 관리
nist-sp-800-53-r5-require-managed-by-label 모든 앱에 유효한 `app.kubernetes.io/managed-by` 라벨이 있어야 합니다.
nist-sp-800-53-r5-require-binauthz 허용 웹훅 검증을 위한 Binary Authorization이 필요합니다. SA-11 신뢰할 수 있는 경로
nist-sp-800-53-r5-require-binauthz 허용 웹훅 검증을 위한 Binary Authorization이 필요합니다. SA-3 시스템 개발 수명 주기
nist-sp-800-53-r5-block-secrets-of-type-basic-auth 기본 인증 유형 보안 비밀을 제한합니다. SA-8 보안 및 개인 정보 보호 엔지니어링 원칙
nist-sp-800-53-r5-restrict-hostpath-volumes HostPath 볼륨의 사용을 제한합니다.
nist-sp-800-53-r5-restrict-volume-types 마운트 가능한 볼륨 유형을 허용 목록으로 제한합니다.
nist-sp-800-53-r5-require-binauthz 허용 웹훅 검증을 위한 Binary Authorization이 필요합니다. SC-12 암호화 키 설정 및 관리
nist-sp-800-53-r5-restrict-storageclass `StorageClass`를 기본적으로 암호화되는 `StorageClass` 목록으로 제한합니다. SC-28 저장 중인 정보 보호
nist-sp-800-53-r5-require-namespace-network-policies 클러스터에 정의된 모든 네임스페이스에 NetworkPolicy가 있어야 합니다. 공유 리소스의 SC-4 정보
nist-sp-800-53-r5-cpu-and-memory-limits-required 포드가 CPU 및 메모리 한도를 지정해야 합니다. SC-6 리소스 가용성
nist-sp-800-53-r5-block-secrets-of-type-basic-auth 기본 인증 유형 보안 비밀을 제한합니다. SC-7 경계 보호
nist-sp-800-53-r5-enforce-config-management 클러스터에 하나 이상의 `RootSync` 객체가 있는 구성 동기화가 실행 중이고 드리프트 방지가 사용 설정되어 있어야 합니다.
nist-sp-800-53-r5-require-managed-by-label 모든 앱에 유효한 `app.kubernetes.io/managed-by` 라벨이 있어야 합니다.
nist-sp-800-53-r5-require-namespace-network-policies 클러스터에 정의된 모든 네임스페이스에 NetworkPolicy가 있어야 합니다.
nist-sp-800-53-r5-restrict-hostpath-volumes HostPath 볼륨의 사용을 제한합니다.
nist-sp-800-53-r5-restrict-volume-types 마운트 가능한 볼륨 유형을 허용 목록으로 제한합니다.
nist-sp-800-53-r5-asm-peer-authn-strict-mtls PeerAuthentications로 엄격한 mTLS를 덮어쓸 수 없습니다. SC-8 전송 기밀성 및 무결성
nist-sp-800-53-r5-require-binauthz 허용 웹훅 검증을 위한 Binary Authorization이 필요합니다. SI-12 정보 관리 및 보관
nist-sp-800-53-r5-restrict-storageclass `StorageClass`를 기본적으로 암호화되는 `StorageClass` 목록으로 제한합니다.
nist-sp-800-53-r5-require-av-daemonset 바이러스 백신 daemonset이 있어야 합니다. SI-3 악성 코드 방지
nist-sp-800-53-r5-block-secrets-of-type-basic-auth 기본 인증 유형 보안 비밀을 제한합니다. SI-7 소프트웨어, 펌웨어, 정보 무결성
nist-sp-800-53-r5-enforce-config-management 클러스터에 하나 이상의 `RootSync` 객체가 있는 구성 동기화가 실행 중이고 드리프트 방지가 사용 설정되어 있어야 합니다.
nist-sp-800-53-r5-require-binauthz 허용 웹훅 검증을 위한 Binary Authorization이 필요합니다.
nist-sp-800-53-r5-require-managed-by-label 모든 앱에 유효한 `app.kubernetes.io/managed-by` 라벨이 있어야 합니다.
nist-sp-800-53-r5-restrict-hostpath-volumes HostPath 볼륨의 사용을 제한합니다.
nist-sp-800-53-r5-require-binauthz 허용 웹훅 검증을 위한 Binary Authorization이 필요합니다. SR-4 출처

시작하기 전에

  1. 이 안내에서 사용되는 gcloud, kubectl 명령어를 제공하는 Google Cloud CLI를 설치하고 초기화합니다. Cloud Shell을 사용하는 경우 Google Cloud CLI가 사전 설치됩니다.
  2. 제약조건 템플릿의 기본 라이브러리를 사용하여 클러스터에 정책 컨트롤러를 설치합니다. 이 번들에는 참조 제약조건이 포함되어 있으므로 참조 제약조건에 대한 지원을 사용 설정해야 합니다.

참조 제약조건에 맞게 정책 컨트롤러 구성

  1. 다음 YAML 매니페스트를 파일에 policycontroller-config.yaml로 저장합니다. 이 매니페스트는 특정 종류의 객체를 감시하도록 정책 컨트롤러를 구성합니다.

    apiVersion: config.gatekeeper.sh/v1alpha1
    kind: Config
    metadata:
      name: config
      namespace: "gatekeeper-system"
    spec:
      sync:
        syncOnly:
          - group: "apps"
            version: "v1"
            kind: "DaemonSet"
          - group: "networking.k8s.io"
            version: "v1"
            kind: "NetworkPolicy"
          - group: "configsync.gke.io"
            version: "v1beta1"
            kind: "RootSync"
          - group: "storage.k8s.io"
            version: "v1"
            kind: "StorageClass"
          - group: "admissionregistration.k8s.io"
            version: "v1"
            kind: "ValidatingWebhookConfiguration"
    
  2. policycontroller-config.yaml 매니페스트를 적용합니다.

    kubectl apply -f policycontroller-config.yaml
    

클러스터 및 워크로드 구성

  1. nist-sp-800-53-r5-enforce-config-management에서는 드리프트 방지 허용 웹훅을 포함한 구성 동기화의 사용 설정 및 구성이 필요합니다.
  2. 바이러스 백신 솔루션이 필요합니다. 기본값은 clamav namespaceclamav라는 daemonset가 있지만 daemonset의 이름과 네임스페이스는 nist-sp-800-53-r5-require-av-daemonset 제약조건의 구현에 따라 맞춤설정할 수 있습니다.
  3. 컨테이너 이미지는 허용된 저장소 목록으로 제한되며, nist-sp-800-53-r5-restrict-repos에서 필요한 경우 맞춤설정할 수 있습니다.
  4. 노드는 nist-sp-800-53-r5-nodes-have-consistent-time의 이미지에 Container-Optimized OS 또는 Ubuntu를 사용해야 합니다.
  5. 스토리지 클래스 사용은 허용 목록으로 제한되며 nist-sp-800-53-r5-restrict-storageclass에서 기본 암호화를 사용하여 추가 클래스를 추가하도록 맞춤설정할 수 있습니다.
  6. nist-sp-800-53-r5-require-binauthz에서 Binary Authorization을 사용 설정하고 구성해야 합니다.

NIST SP 800-53 개정판 5 정책 번들 감사

정책 컨트롤러를 사용하면 Kubernetes 클러스터에 정책을 적용할 수 있습니다. 앞의 테이블에서 설명된 NIST SP 800-53 정책과 관련하여 워크로드 및 규정 준수를 테스트하는 데 도움이 되도록, '감사' 모드에서 이러한 제약조건을 배포하여 위반 사항을 표시할 수 있고 더 중요하게는 Kubernetes 클러스터에 적용하기 전에 문제를 해결할 기회를 가질 수 있습니다.

kubectl, kpt 또는 구성 동기화를 사용하여 dryrun으로 설정된 spec.enforcementAction으로 이러한 정책을 적용할 수 있습니다.

kubectl

  1. (선택사항) kubectl을 사용하여 정책 제약조건을 미리 봅니다.

    kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/nist-sp-800-53-r5
    
  2. kubectl을 사용하여 정책 제약조건을 적용합니다.

    kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/nist-sp-800-53-r5
    

    출력은 다음과 같습니다.

    asmpeerauthnstrictmtls.constraints.gatekeeper.sh/nist-sp-800-53-r5-asm-peer-authn-strict-mtls created
    k8sallowedrepos.constraints.gatekeeper.sh/nist-sp-800-53-r5-restrict-repos created
    k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/nist-sp-800-53-r5-block-creation-with-default-serviceaccount created
    k8sblockobjectsoftype.constraints.gatekeeper.sh/nist-sp-800-53-r5-block-secrets-of-type-basic-auth created
    k8senforceconfigmanagement.constraints.gatekeeper.sh/nist-sp-800-53-r5-enforce-config-management created
    k8spspapparmor.constraints.gatekeeper.sh/nist-sp-800-53-r5-apparmor created
    k8spspcapabilities.constraints.gatekeeper.sh/nist-sp-800-53-r5-capabilities created
    k8spspforbiddensysctls.constraints.gatekeeper.sh/nist-sp-800-53-r5-sysctls created
    k8spsphostfilesystem.constraints.gatekeeper.sh/nist-sp-800-53-r5-restrict-hostpath-volumes created
    k8spsphostnamespace.constraints.gatekeeper.sh/nist-sp-800-53-r5-host-namespaces created
    k8spsphostnetworkingports.constraints.gatekeeper.sh/nist-sp-800-53-r5-host-network created
    k8spspprivilegedcontainer.constraints.gatekeeper.sh/nist-sp-800-53-r5-privileged-containers created
    k8spspprocmount.constraints.gatekeeper.sh/nist-sp-800-53-r5-proc-mount-type created
    k8spspselinuxv2.constraints.gatekeeper.sh/nist-sp-800-53-r5-selinux created
    k8spspseccomp.constraints.gatekeeper.sh/nist-sp-800-53-r5-seccomp created
    k8spspvolumetypes.constraints.gatekeeper.sh/nist-sp-800-53-r5-restrict-volume-types created
    k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/nist-sp-800-53-r5-restrict-role-wildcards created
    k8srequirebinauthz.constraints.gatekeeper.sh/nist-sp-800-53-r5-require-binauthz created
    k8srequirecosnodeimage.constraints.gatekeeper.sh/nist-sp-800-53-r5-nodes-have-consistent-time created
    k8srequiredaemonsets.constraints.gatekeeper.sh/nist-sp-800-53-r5-require-av-daemonset created
    k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/nist-sp-800-53-r5-require-namespace-network-policies created
    k8srequiredlabels.constraints.gatekeeper.sh/nist-sp-800-53-r5-require-managed-by-label created
    k8srequiredresources.constraints.gatekeeper.sh/nist-sp-800-53-r5-cpu-and-memory-limits-required created
    k8srestrictrbacsubjects.constraints.gatekeeper.sh/nist-sp-800-53-r5-restrict-rbac-subjects created
    k8srestrictrolebindings.constraints.gatekeeper.sh/nist-sp-800-53-r5-restrict-clusteradmin-rolebindings created
    k8sstorageclass.constraints.gatekeeper.sh/nist-sp-800-53-r5-restrict-storageclass created
    
  3. 정책 제약조건이 설치되었는지 확인하고 클러스터 전체에 위반 사항이 있는지 확인합니다.

    kubectl get constraints -l policycontroller.gke.io/bundleName=nist-sp-800-53-r5
    

    출력은 다음과 비슷합니다.

    NAME                                                            ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspapparmor.constraints.gatekeeper.sh/nist-sp-800-53-r5-apparmor   dryrun               0
    
    NAME                                                                        ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequirebinauthz.constraints.gatekeeper.sh/nist-sp-800-53-r5-require-binauthz   dryrun               0
    
    NAME                                                                                   ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srestrictrbacsubjects.constraints.gatekeeper.sh/nist-sp-800-53-r5-restrict-rbac-subjects   dryrun               0
    
    NAME                                                                   ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspforbiddensysctls.constraints.gatekeeper.sh/nist-sp-800-53-r5-sysctls   dryrun               0
    
    NAME                                                                            ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspvolumetypes.constraints.gatekeeper.sh/nist-sp-800-53-r5-restrict-volume-types   dryrun               0
    
    NAME                                                                           ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spsphostnetworkingports.constraints.gatekeeper.sh/nist-sp-800-53-r5-host-network   dryrun               0
    
    NAME                                                                        ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spsphostnamespace.constraints.gatekeeper.sh/nist-sp-800-53-r5-host-namespaces   dryrun               0
    
    NAME                                                                              ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequiredaemonsets.constraints.gatekeeper.sh/nist-sp-800-53-r5-require-av-daemonset   dryrun               0
    
    NAME                                                                                          ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8sprohibitrolewildcardaccess.constraints.gatekeeper.sh/nist-sp-800-53-r5-restrict-role-wildcards   dryrun               0
    
    NAME                                                                                                                         ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/nist-sp-800-53-r5-block-creation-with-default-serviceaccount   dryrun               0
    
    NAME                                                                                   ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spsphostfilesystem.constraints.gatekeeper.sh/nist-sp-800-53-r5-restrict-hostpath-volumes   dryrun               0
    
    NAME                                                          ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspseccomp.constraints.gatekeeper.sh/nist-sp-800-53-r5-seccomp   dryrun               0
    
    NAME                                                                                      ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    asmpeerauthnstrictmtls.constraints.gatekeeper.sh/nist-sp-800-53-r5-asm-peer-authn-strict-mtls   dryrun               0
    
    NAME                                                                                        ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequiredresources.constraints.gatekeeper.sh/nist-sp-800-53-r5-cpu-and-memory-limits-required   dryrun               0
    
    NAME                                                                    ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspprocmount.constraints.gatekeeper.sh/nist-sp-800-53-r5-proc-mount-type   dryrun               0
    
    NAME                                                                                           ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8sblockobjectsoftype.constraints.gatekeeper.sh/nist-sp-800-53-r5-block-secrets-of-type-basic-auth   dryrun               0
    
    NAME                                                                                                          ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/nist-sp-800-53-r5-require-namespace-network-policies   dryrun               0
    
    NAME                                                                    ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspcapabilities.constraints.gatekeeper.sh/nist-sp-800-53-r5-capabilities   dryrun               0
    
    NAME                                                                          ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8sstorageclass.constraints.gatekeeper.sh/nist-sp-800-53-r5-restrict-storageclass   dryrun               0
    
    NAME                                                                               ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequiredlabels.constraints.gatekeeper.sh/nist-sp-800-53-r5-require-managed-by-label   dryrun               0
    
    NAME                                                                                    ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspprivilegedcontainer.constraints.gatekeeper.sh/nist-sp-800-53-r5-privileged-containers   dryrun               0
    
    NAME                                                                   ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8sallowedrepos.constraints.gatekeeper.sh/nist-sp-800-53-r5-restrict-repos   dryrun               0
    
    NAME                                                            ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspselinuxv2.constraints.gatekeeper.sh/nist-sp-800-53-r5-selinux   dryrun               0
    
    NAME                                                                                         ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8senforceconfigmanagement.constraints.gatekeeper.sh/nist-sp-800-53-r5-enforce-config-management   dryrun               0
    
    NAME                                                                                               ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srestrictrolebindings.constraints.gatekeeper.sh/nist-sp-800-53-r5-restrict-clusteradmin-rolebindings   dryrun               0
    
    NAME                                                                                      ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8srequirecosnodeimage.constraints.gatekeeper.sh/nist-sp-800-53-r5-nodes-have-consistent-time   dryrun               0
    

kpt

  1. kpt를 설치하고 설정합니다.

    이 안내에서는 kpt를 사용하여 Kubernetes 리소스를 맞춤설정하고 배포합니다.

  2. kpt를 사용하여 GitHub에서 NIST SP 800-53 개정판 5 정책 번들을 다운로드합니다.

    kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/nist-sp-800-53-r5
    
  3. set-enforcement-action kpt 함수를 실행하여 정책의 시정 조치를 dryrun으로 설정합니다.

    kpt fn eval nist-sp-800-53-r5 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \
    -- enforcementAction=dryrun
    
  4. 변경사항을 추적하는 리소스를 만드는 kpt로 작업 디렉터리를 초기화합니다.

    cd nist-sp-800-53-r5 kpt live init
    
  5. kpt로 정책 제약조건을 적용합니다.

    kpt live apply
    
  6. 정책 제약조건이 설치되었는지 확인하고 클러스터 전체에 위반 사항이 있는지 확인합니다.

    kpt live status --output table --poll-until current
    

    CURRENT 상태는 제약조건이 성공적으로 설치되었음을 확인합니다.

구성 동기화

  1. kpt를 설치하고 설정합니다.

    이 안내에서는 kpt를 사용하여 Kubernetes 리소스를 맞춤설정하고 배포합니다.

    구성 동기화를 사용하여 클러스터에 정책을 배포하는 운영자는 다음 안내를 따르세요.

  2. 구성 동기화의 동기화 디렉터리로 변경합니다.

    cd SYNC_ROOT_DIR
    

    resourcegroup.yaml.gitignore를 만들거나 추가하려면 다음 안내를 따르세요.

    echo resourcegroup.yaml >> .gitignore
    
  3. 전용 policies 디렉터리를 만듭니다.

    mkdir -p policies
    
  4. kpt를 사용하여 GitHub에서 NIST SP 800-53 개정판 5 정책 번들을 다운로드합니다.

    kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/nist-sp-800-53-r5 policies/nist-sp-800-53-r5
    
  5. set-enforcement-action kpt 함수를 실행하여 정책의 시정 조치를 dryrun으로 설정합니다.

    kpt fn eval policies/nist-sp-800-53-r5 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
    
  6. (선택사항) 생성될 정책 제약조건을 미리 봅니다.

    kpt live init policies/nist-sp-800-53-r5 kpt live apply --dry-run policies/nist-sp-800-53-r5
    
  7. 구성 동기화의 동기화 디렉터리에 Kustomize가 사용되는 경우 루트 kustomization.yamlpolicies/nist-sp-800-53-r5을 추가합니다. 그렇지 않으면 policies/nist-sp-800-53-r5/kustomization.yaml 파일을 삭제합니다.

    rm SYNC_ROOT_DIR/policies/nist-sp-800-53-r5/kustomization.yaml
    
  8. 구성 동기화 저장소에 변경사항을 푸시합니다.

    git add SYNC_ROOT_DIR/policies/nist-sp-800-53-r5 git commit -m 'Adding NIST SP 800-53 Rev. 5 policy audit enforcement'
    git push
    
  9. 설치 상태를 확인합니다.

    watch gcloud beta container fleet config-management status --project PROJECT_ID
    

    SYNCED 상태는 정책 설치를 확인합니다.

정책 위반 보기

정책 제약조건이 감사 모드로 설치되면 정책 컨트롤러 대시보드를 사용하여 UI에서 클러스터 위반을 볼 수 있습니다.

  1. 또한 kubectl을 사용하여 다음 명령어로 클러스터에서 위반 항목을 볼 수 있습니다.

    kubectl get constraint -l policycontroller.gke.io/bundleName=nist-sp-800-53-r5 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'
    
  2. 위반이 있는 경우 제약조건당 위반 메시지 목록을 다음에서 볼 수 있습니다.

    kubectl get constraint -l policycontroller.gke.io/bundleName=nist-sp-800-53-r5 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'
    

NIST SP 800-53 개정판 5 정책 번들 시정 조치 변경

클러스터에서 정책 위반을 검토한 후에는 허용 컨트롤러가 호환되지 않는 리소스가 클러스터에 적용되지 않도록 warn 또는 deny를 수행할 수 있도록 시행 모드 변경을 고려할 수 있습니다.

kubectl

  1. kubectl을 사용하여 정책의 시행 작업을 warn로 설정합니다.

    kubectl get constraints -l policycontroller.gke.io/bundleName=nist-sp-800-53-r5 -o name | xargs -I {} kubectl patch {} --type='json' -p='[{"op":"replace","path":"/spec/enforcementAction","value":"warn"}]'
    
  2. 정책 제약조건 시행 작업이 업데이트되었는지 확인합니다.

    kubectl get constraints -l policycontroller.gke.io/bundleName=nist-sp-800-53-r5
    

kpt

  1. set-enforcement-action kpt 함수를 실행하여 정책의 시정 조치를 warn으로 설정합니다.

    kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
    
  2. 정책 제약조건을 적용합니다.

    kpt live apply
    

구성 동기화

구성 동기화를 사용하여 클러스터에 정책을 배포하는 운영자는 다음 안내를 따르세요.

  1. 구성 동기화의 동기화 디렉터리로 변경합니다.

    cd SYNC_ROOT_DIR
    
  2. set-enforcement-action kpt 함수를 실행하여 정책의 시정 조치를 warn으로 설정합니다.

    kpt fn eval policies/nist-sp-800-53-r5 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
    
  3. 구성 동기화 저장소에 변경사항을 푸시합니다.

    git add SYNC_ROOT_DIR/policies/nist-sp-800-53-r5
    git commit -m 'Adding NIST SP 800-53 Rev. 5 policy warn enforcement'
    git push
    
  4. 설치 상태를 확인합니다.

    gcloud alpha anthos config sync repo list --project PROJECT_ID
    

    SYNCED 열에 표시된 저장소는 정책 설치를 확인합니다.

테스트 정책 시행

다음 명령어를 사용하여 클러스터에 정책을 준수하지 않는 리소스를 만듭니다.

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: wp-non-compliant
spec:
  containers:
    ‐ image: wordpress
      name: wordpress
EOF

다음 예시와 같이 허용 컨트롤러는 이 리소스가 위반하는 정책 위반을 나열하는 경고를 생성해야 합니다.

Warning: [nist-sp-800-53-r5-cpu-and-memory-limits-required] container <wordpress> does not have <{"cpu", "memory"}> limits defined
Warning: [nist-sp-800-53-r5-restrict-repos] container <wordpress> has an invalid image repo <wordpress>, allowed repos are ["gcr.io/gke-release/", "gcr.io/anthos-baremetal-release/", "gcr.io/config-management-release/", "gcr.io/kubebuilder/", "gcr.io/gkeconnect/", "gke.gcr.io/"]
pod/wp-non-compliant created

NIST SP 800-53 개정판 5 정책 번들 삭제

필요한 경우 클러스터에서 NIST SP 800-53 개정판 5 정책 번들을 삭제할 수 있습니다.

kubectl

  • kubectl을 사용하여 정책을 삭제합니다.

    kubectl delete constraint -l policycontroller.gke.io/bundleName=nist-sp-800-53-r5
    

kpt

  • 정책을 삭제합니다.

    kpt live destroy
    

구성 동기화

구성 동기화를 사용하여 클러스터에 정책을 배포하는 운영자는 다음 안내를 따르세요.

  1. 구성 동기화 저장소에 변경사항을 푸시합니다.

    git rm -r SYNC_ROOT_DIR/policies/nist-sp-800-53-r5
    git commit -m 'Removing NIST SP 800-53 Rev. 5 policies'
    git push
    
  2. 상태를 확인합니다.

    gcloud alpha anthos config sync repo list --project PROJECT_ID
    

    SYNCED 열에 표시된 저장소는 정책 삭제를 확인합니다.