CIS Kubernetes 벤치마크

이 문서에서는 CIS Kubernetes 벤치마크를 소개하고 벤치마크로 규정 준수를 감사하는 방법과 개발자가 직접 추천을 구현할 수 없을 때 Google Distributed Cloud (GDC) 에어 갭에서 구성하는 항목을 설명합니다.

CIS 벤치마크 정보

인터넷 보안 센터(CIS)는 보안 권장 수준을 위한 벤치마크를 출시합니다. CIS Kubernetes 벤치마크는 강력한 보안 상황이 지원되도록 Kubernetes 구성 추천 집합을 제공합니다. 벤치마크는 특정 Kubernetes 출시에 연결됩니다. CIS Kubernetes 벤치마크는 오픈소스 Kubernetes 배포용으로 작성되었으며, 가능한 한 배포 간 범용 적용이 가능하도록 고안되었습니다.

벤치마크 액세스

CIS Kubernetes 벤치마크는 CIS 웹사이트에서 제공됩니다.

권장 수준

다음 표에서는 CIS Kubernetes 벤치마크의 권장 수준을 설명합니다.

수준 설명
레벨 1

권장 수준에 다음 특성 중 하나 이상이 포함되어야 합니다.

  • 실용적이고 신중해야 합니다.
  • 명확한 보안 이점을 제공해야 합니다.
  • 허용 범위를 벗어나는 기술 활용성을 제한하지 않아야 합니다.
  • 레벨 2

    수준 1 프로필을 확장합니다.

    권장 수준에 다음 특성 중 하나 이상이 포함되어야 합니다.

  • 보안이 매우 중요한 환경 또는 사용 사례에 적용됩니다.
  • 심층 방어 수단으로 사용됩니다.
  • 기술 활용성 또는 성능에 부정적 영향을 줄 수 있습니다.
  • 평가 상태

    평가 상태가 모든 권장사항에 포함됩니다. 평가 상태는 제공된 권장사항을 자동화할 수 있는지 또는 구현하려면 수동 단계가 필요한지를 나타냅니다. 두 상태 모두 동일하게 중요하며 다음 표에 정의된 대로 결정되고 지원됩니다.

    버전

    평가에서는 다음 버전을 참조합니다.

    베어메탈용 GDC 버전 Kubernetes 버전 CIS Kubernetes 벤치마크 버전
    1.30 1.30.9 v0.10.4

    GDC 오프라인 Kubernetes 클러스터의 상태

    # 권장사항 수준 상태
    1 제어 영역 보안 구성
    1.1 제어 영역 노드 구성 파일
    1.1.1 API 서버 포드 사양 파일 권한이 600 또는 보다 제한적인 권한으로 설정되었는지 확인합니다(자동). L1 통과
    1.1.2 API 서버 포드 사양 파일 소유권이 root:root로 설정되었는지 확인합니다(자동). L1 통과
    1.1.3 컨트롤러 관리자 포드 사양 파일 권한이 600 또는 보다 제한적인 권한으로 설정되었는지 확인합니다(자동). L1 통과
    1.1.4 컨트롤러 관리자 포드 사양 파일 소유권이 root:root로 설정되었는지 확인합니다(자동). L1 통과
    1.1.5 스케줄러 포드 사양 파일 권한이 600 또는 보다 제한적인 권한으로 설정되었는지 확인합니다(자동). L1 통과
    1.1.6 스케줄러 포드 사양 파일 소유권이 root:root로 설정되었는지 확인합니다(자동). L1 통과
    1.1.7 etcd 포드 사양 파일 권한이 600 또는 보다 제한적인 권한으로 설정되었는지 확인합니다(자동). L1 통과
    1.1.8 etcd 포드 사양 파일 소유권이 root:root로 설정되었는지 확인합니다(자동). L1 통과
    1.1.9 컨테이너 네트워크 인터페이스 파일 권한이 600 또는 보다 제한적인 권한으로 설정되었는지 확인합니다(수동). L1 주의
    1.1.10 컨테이너 네트워크 인터페이스 파일 소유권이 root:root로 설정되었는지 확인합니다(수동). L1 주의
    1.1.11 etcd 데이터 디렉터리 권한이 700 또는 보다 제한적인 권한으로 설정되었는지 확인합니다(자동). L1 통과
    1.1.12 etcd 데이터 디렉터리 소유권이 etcd:etcd로 설정되었는지 확인합니다(자동). L1 실패
    1.1.13 기본 관리 사용자 인증 정보 파일 권한이 600로 설정되었는지 확인합니다 (자동). L1 통과
    1.1.14 기본 관리 사용자 인증 정보 파일 소유권이 root:root로 설정되었는지 확인합니다 (자동). L1 통과
    1.1.15 scheduler.conf 파일 권한이 600 또는 보다 제한적인 권한으로 설정되었는지 확인합니다 (자동). L1 통과
    1.1.16 scheduler.conf 파일 소유권이 root:root로 설정되었는지 확인합니다 (자동). L1 실패
    1.1.17 controller-manager.conf 파일 권한이 600 또는 보다 제한적인 권한으로 설정되었는지 확인합니다 (자동). L1 통과
    1.1.18 controller-manager.conf 파일 소유권이 root:root로 설정되었는지 확인합니다 (자동). L1 실패
    1.1.19 Kubernetes PKI 디렉터리 및 파일 소유권이 root:root로 설정되었는지 확인합니다(자동). L1 실패
    1.1.20 Kubernetes PKI 인증서 파일 권한이 600 또는 보다 제한적인 권한으로 설정되었는지 확인합니다(수동). L1 주의
    1.1.21 Kubernetes PKI 키 파일 권한이 600로 설정되었는지 확인합니다(수동). L1 주의
    1.2 API 서버
    1.2.1 --anonymous-auth 인수가 false으로 설정되었는지 확인합니다(수동). L1 주의
    1.2.2 --token-auth-file 파라미터가 설정되지 않았는지 확인합니다(자동). L1 통과
    1.2.3 --DenyServiceExternalIPs 설정 여부를 확인합니다(수동). L1 주의
    1.2.4 --kubelet-client-certificate--kubelet-client-key 인수가 적합한 값으로 설정되었는지 확인합니다(자동). L1 통과
    1.2.5 --kubelet-certificate-authority 인수가 적합한 값으로 설정되었는지 확인합니다(자동). L1 통과
    1.2.6 --authorization-mode 인수가 AlwaysAllow로 설정되지 않았는지 확인합니다(자동). L1 통과
    1.2.7 --authorization-mode 인수에 노드가 포함되는지 확인합니다(자동). L1 통과
    1.2.8 --authorization-mode 인수에 RBAC가 포함되는지 확인합니다(자동). L1 통과
    1.2.9 허용 제어 플러그인 EventRateLimit가 설정되었는지 확인합니다 (수동). L1 주의
    1.2.10 허용 제어 플러그인 AlwaysAdmit이 설정되지 않았는지 확인합니다 (자동). L1 통과
    1.2.11 허용 제어 플러그인 AlwaysPullImages가 설정되었는지 확인합니다 (수동). L1 주의
    1.2.12 허용 제어 플러그인 ServiceAccount가 설정되었는지 확인합니다 (자동). L1 통과
    1.2.13 허용 제어 플러그인 NamespaceLifecycle가 설정되었는지 확인합니다 (자동). L1 통과
    1.2.14 허용 제어 플러그인 NodeRestriction가 설정되었는지 확인합니다 (자동). L1 통과
    1.2.15 --profiling 인수가 false으로 설정되었는지 확인합니다(자동). L1 통과
    1.2.16 --audit-log-path 인수가 설정되었는지 확인합니다(자동). L1 통과
    1.2.17 --audit-log-maxage 인수가 30 또는 적합한 값으로 설정되었는지 확인합니다(자동). L1 통과
    1.2.18 --audit-log-maxbackup 인수가 10 또는 적합한 값으로 설정되었는지 확인합니다(자동). L1 통과
    1.2.19 --audit-log-maxsize 인수가 100 또는 적합한 값으로 설정되었는지 확인합니다(자동). L1 통과
    1.2.20 --request-timeout 인수가 적합한 값으로 설정되었는지 확인합니다(수동). L1 주의
    1.2.21 --service-account-lookup 인수가 true으로 설정되었는지 확인합니다(자동). L1 통과
    1.2.22 --service-account-key-file 인수가 적합한 값으로 설정되었는지 확인합니다(자동). L1 통과
    1.2.23 --etcd-certfile--etcd-keyfile 인수가 적합한 값으로 설정되었는지 확인합니다(자동). L1 통과
    1.2.24 --tls-cert-file--tls-private-key-file 인수가 적합한 값으로 설정되었는지 확인합니다(자동). L1 통과
    1.2.25 --client-ca-file 인수가 적합한 값으로 설정되었는지 확인합니다(자동). L1 통과
    1.2.26 --etcd-cafile 인수가 적합한 값으로 설정되었는지 확인합니다(자동). L1 통과
    1.2.27 --encryption-provider-config 인수가 적합한 값으로 설정되었는지 확인합니다(수동). L1 통과
    1.2.28 암호화 공급자가 적합한 값으로 구성되었는지 확인합니다(수동). L1 통과
    1.2.29 API 서버는 강력한 암호화만 사용합니다(수동). L1 통과
    1.3 컨트롤러 관리자
    1.3.1 --terminated-pod-gc-threshold 인수가 적합한 값으로 설정되었는지 확인합니다(수동). L1 통과
    1.3.2 --profiling argumentfalse으로 설정되었는지 확인합니다 (자동). L1 통과
    1.3.3 --use-service-account-credentials 인수가 true으로 설정되었는지 확인합니다(자동). L1 통과
    1.3.4 --service-account-private-key-file 인수가 적합한 값으로 설정되었는지 확인합니다(자동). L1 통과
    1.3.5 --root-ca-file 인수가 적합한 값으로 설정되었는지 확인합니다(자동). L1 통과
    1.3.6 RotateKubeletServerCertificate 인수가 true으로 설정되었는지 확인합니다(자동). L2 통과
    1.3.7 --bind-address 인수가 127.0.0.1으로 설정되었는지 확인합니다(자동). L1 실패
    1.4 스케줄러
    1.4.1 --profiling 인수가 false으로 설정되었는지 확인합니다(자동). L1 통과
    1.4.2 --bind-address 인수가 127.0.0.1으로 설정되었는지 확인합니다(자동). L1 실패

    감사 벤치마크

    각 권장 수준의 감사를 위한 특정 지침은 관련 CIS 벤치마크의 일부로 제공됩니다. 하지만 해당 환경에서 이러한 제어 확인을 간소화하기 위해 이러한 검사 중 일부를 자동화해야 할 수 있습니다. 다음 도구가 도움이 될 수 있습니다.

    CIS Kubernetes 벤치마크 감사 자동화

    오픈소스 도구인 kube-bench를 사용하면 CIS Kubernetes 벤치마크에 대해 클러스터 구성을 테스트할 수 있습니다.

    적합한 버전을 지정해야 합니다. 예를 들면 다음과 같습니다.

    kube-bench --benchmark BENCHMARK_VERSION
    

    BENCHMARK_VERSION을 클러스터를 평가하는 데 사용하는 CIS Kubernetes 벤치마크 버전으로 바꿉니다.

    마스터, 노드, etcd와 같은 특정 CIS 벤치마크 섹션을 실행하려면 run --targets 명령어를 사용합니다. 예를 들면 다음과 같습니다.

    kube-bench run --targets master,node
    

    자세한 내용은 kube-bench 실행명령어 및 플래그에 관한 kube-bench 문서를 참고하세요.