CIS 벤치마크

이 페이지에서는 CIS Kubernetes 벤치마크를 소개하고, 평가를 제공하며, 권장사항을 해결하기 위해 Google Distributed Cloud에서 수행하는 작업을 설명합니다.

CIS 벤치마크

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

버전

다음 표에는 이 문서에서 설명하는 평가를 수행하는 데 사용된 Distributed Cloud, Kubernetes, CIS Kubernetes 벤치마크 버전이 나열되어 있습니다.

Distributed Cloud 버전 Kubernetes 버전 CIS Kubernetes 벤치마크 버전
1.4.0 - 로컬 컨트롤 플레인 1.25 1.70

벤치마크 액세스

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

권장 수준

CIS Kubernetes 벤치마크에서 권장 수준은 다음과 같습니다.

수준 설명
레벨 1

권장 수준은 다음과 같습니다.

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

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

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

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

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

    점수 설명
    자동 기술 제어 평가를 완전히 자동화하고 통과/실패 상태로 확인할 수 있는 권장사항을 나타냅니다. 권장사항에는 자동화를 구현하는 데 필요한 정보가 포함됩니다.
    수동 기술 제어 평가를 완전히 자동화할 수 없으며 구성된 상태가 예상대로 설정되었는지 확인하기 위한 전체 또는 일부 수동 단계가 필요한 권장사항을 나타냅니다. 예상 상태는 환경에 따라 다를 수 있습니다.

    Distributed Cloud 로컬 컨트롤 플레인 클러스터의 상태

    # 권장사항 수준 상태
    1 제어 영역 보안 구성
    1.1 제어 영역 노드 구성 파일
    1.1.1 API 서버 포드 사양 파일 권한이 644 또는 보다 제한적인 권한으로 설정되었는지 확인합니다(자동). L1 통과
    1.1.2 API 서버 포드 사양 파일 소유권이 root:root로 설정되었는지 확인합니다(자동). L1 통과
    1.1.3 컨트롤러 관리자 포드 사양 파일 권한이 644 또는 보다 제한적인 권한으로 설정되었는지 확인합니다(자동). L1 통과
    1.1.4 컨트롤러 관리자 포드 사양 파일 소유권이 root:root로 설정되었는지 확인합니다(자동). L1 통과
    1.1.5 스케줄러 포드 사양 파일 권한이 644 또는 보다 제한적인 권한으로 설정되었는지 확인합니다(자동). L1 통과
    1.1.6 스케줄러 포드 사양 파일 소유권이 root:root로 설정되었는지 확인합니다(자동). L1 통과
    1.1.7 etcd 포드 사양 파일 권한이 644 또는 보다 제한적인 권한으로 설정되었는지 확인합니다(자동). L1 통과
    1.1.8 etcd 포드 사양 파일 소유권이 root:root로 설정되었는지 확인합니다(자동). L1 통과
    1.1.9 컨테이너 네트워크 인터페이스 파일 권한이 644 또는 보다 제한적인 권한으로 설정되었는지 확인합니다(수동). L1 동등 제어
    1.1.10 컨테이너 네트워크 인터페이스 파일 소유권이 root:root로 설정되었는지 확인합니다(수동). L1 통과
    1.1.11 etcd 데이터 디렉터리 권한이 700 또는 보다 제한적인 권한으로 설정되었는지 확인합니다(자동). L1 동등 제어
    1.1.12 etcd 데이터 디렉터리 소유권이 etcd:etcd로 설정되었는지 확인합니다(자동). L1 동등 제어
    1.1.13 admin.conf 파일 권한이 600 또는 보다 제한적인 권한으로 설정되었는지 확인합니다 (자동). L1 통과
    1.1.14 admin.conf 파일 소유권이 root:root로 설정되었는지 확인합니다 (자동). L1 통과
    1.1.15 scheduler.conf 파일 권한이 644 또는 보다 제한적인 권한으로 설정되었는지 확인합니다 (자동). L1 통과
    1.1.16 scheduler.conf 파일 소유권이 root:root로 설정되었는지 확인합니다 (자동). L1 동등 제어
    1.1.17 controller-manager.conf 파일 권한이 644 또는 보다 제한적인 권한으로 설정되었는지 확인합니다 (자동). L1 통과
    1.1.18 controller-manager.conf 파일 소유권이 root:root로 설정되었는지 확인합니다 (자동). L1 동등 제어
    1.1.19 Kubernetes PKI 디렉터리 및 파일 소유권이 root:root로 설정되었는지 확인합니다(자동). L1 동등 제어
    1.1.20 Kubernetes PKI 인증서 파일 권한이 644 또는 보다 제한적인 권한으로 설정되었는지 확인합니다(수동). 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 PodSecurityPolicy가 사용되지 않은 경우 허용 제어 플러그인 SecurityContextDeny가 설정되었는지 확인합니다(수동). L1 주의
    1.2.13 허용 제어 플러그인 ServiceAccount가 설정되었는지 확인합니다(자동). L1 통과
    1.2.14 허용 제어 플러그인 NamespaceLifecycle이 설정되었는지 확인합니다(자동). L1 통과
    1.2.15 허용 제어 플러그인 NodeRestriction이 설정되었는지 확인합니다(자동). L1 통과
    1.2.16 --secure-port 인수가 0으로 설정되지 않았는지 확인합니다(자동). L1 통과
    1.2.17 --profiling 인수가 false로 설정되었는지 확인합니다(자동). L1 통과
    1.2.18 --audit-log-path 인수가 설정되었는지 확인합니다(자동). L1 실패
    1.2.19 --audit-log-maxage 인수가 30 또는 적합한 값으로 설정되었는지 확인합니다(자동). L1 실패
    1.2.20 --audit-log-maxbackup 인수가 10 또는 적합한 값으로 설정되었는지 확인합니다(자동). L1 실패
    1.2.21 --audit-log-maxsize 인수가 100 또는 적합한 값으로 설정되었는지 확인합니다(자동). L1 실패
    1.2.22 --request-timeout 인수가 적합한 값으로 설정되었는지 확인합니다(수동). L1 실패
    1.2.23 --service-account-lookup 인수가 true로 설정되었는지 확인합니다(자동). L1 통과
    1.2.24 --service-account-key-file 인수가 적합한 값으로 설정되었는지 확인합니다(자동). L1 통과
    1.2.25 --etcd-certfile--etcd-keyfile 인수가 적합한 값으로 설정되었는지 확인합니다(자동). L1 통과
    1.2.26 --tls-cert-file--tls-private-key-file 인수가 적합한 값으로 설정되었는지 확인합니다(자동). L1 통과
    1.2.27 --client-ca-file 인수가 적합한 값으로 설정되었는지 확인합니다(자동). L1 통과
    1.2.28 --etcd-cafile 인수가 적합한 값으로 설정되었는지 확인합니다(자동). L1 통과
    1.2.29 --encryption-provider-config 인수가 적합한 값으로 설정되었는지 확인합니다(수동). L1 통과
    1.2.30 암호화 공급자가 적합한 값으로 구성되었는지 확인합니다(수동). L1 통과
    1.2.31 API 서버는 강력한 암호화만 사용합니다(수동). L1 통과
    1.3 컨트롤러 관리자
    1.3.1 --terminated-pod-gc-threshold 인수가 적합한 값으로 설정되었는지 확인합니다(수동). L1 통과
    1.3.2 --profiling 인수가 false로 설정되었는지 확인합니다(자동). 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 통과
    2 ** etcd 노드 구성**
    2.1 --cert-file--key-file 인수가 적합한 값으로 설정되었는지 확인합니다(자동). L1 통과
    2.2 --client-cert-auth 인수가 true로 설정되었는지 확인합니다(자동). L1 통과
    2.3 --auto-tls 인수가 true로 설정되지 않았는지 확인합니다(자동). L1 통과
    2.4 --peer-cert-file--peer-key-file 인수가 적합한 값으로 설정되었는지 확인합니다(자동). L1 통과
    2.5 --peer-client-cert-auth 인수가 true로 설정되었는지 확인합니다(자동). L1 통과
    2.6 --peer-auto-tls 인수가 true로 설정되지 않았는지 확인합니다(자동). L1 통과
    2.7 고유한 인증 기관이 etcd에 사용되었는지 확인합니다(수동). L2 통과
    3 제어 영역 구성
    3.1 인증 및 승인
    3.1.1 사용자에 대해 클라이언트 인증서 인증을 사용하지 않아야 합니다(수동). L2 통과
    3.2 Logging
    3.2.1 최소 감사 정책이 생성되었는지 확인합니다(수동). L1 통과
    3.2.2 감사 정책에 주요 보안 문제가 포함되는지 확인합니다(수동). L2 실패
    4 워커 노드 보안 구성
    4.1 워커 노드 구성 파일
    4.1.1 kubelet 서비스 파일 권한이 644 또는 보다 제한적인 권한으로 설정되었는지 확인합니다(자동). L1 실패
    4.1.2 kubelet 서비스 파일 소유권이 root:root로 설정되었는지 확인합니다(자동). L1 통과
    4.1.3 프록시 kubeconfig 파일이 있는 경우 권한이 644 또는 보다 제한적인 권한으로 설정되었는지 확인합니다(수동). L1 통과
    4.1.4 프록시 kubeconfig 파일이 있는 경우 소유권이 root:root로 설정되었는지 확인합니다(수동). L1 통과
    4.1.5 --kubeconfig kubelet.conf 파일 권한이 644 또는 보다 제한적인 권한으로 설정되었는지 확인합니다 (자동). L1 통과
    4.1.6 --kubeconfig kubelet.conf 파일 소유권이 root:root로 설정되었는지 확인합니다 (자동). L1 통과
    4.1.7 인증 기관 파일 권한이 644 또는 보다 제한적인 권한으로 설정되었는지 확인합니다(수동). L1 실패
    4.1.8 클라이언트 인증 기관 파일 소유권이 root:root로 설정되었는지 확인합니다(수동). L1 통과
    4.1.9 kubelet --config 구성 파일에 644 또는 보다 제한적인 권한으로 설정된 권한이 있는지 확인합니다(자동). L1 실패
    4.1.10 kubelet --config 구성 파일 소유권이 root:root로 설정되었는지 확인합니다(자동). L1 통과
    4.2 Kubelet
    4.2.1 --anonymous-auth 인수가 false로 설정되었는지 확인합니다(자동). L1 통과
    4.2.2 --authorization-mode 인수가 AlwaysAllow로 설정되지 않았는지 확인합니다(자동). L1 통과
    4.2.3 --client-ca-file 인수가 적합한 값으로 설정되었는지 확인합니다(자동). L1 통과
    4.2.4 --read-only-port 인수가 0으로 설정되었는지 확인합니다(수동). L1 실패
    4.2.5 --streaming-connection-idle-timeout 인수가 0으로 설정되지 않았는지 확인합니다(수동). L1 통과
    4.2.6 --protect-kernel-defaults 인수가 true로 설정되었는지 확인합니다(자동). L1 통과
    4.2.7 --make-iptables-util-chains 인수가 true로 설정되었는지 확인합니다(자동). L1 통과
    4.2.8 --hostname-override 인수가 설정되지 않았는지 확인합니다(수동). L2 통과
    4.2.9 --event-qps 인수가 0 또는 적합한 이벤트 캡처를 보장하는 수준으로 설정되었는지 확인합니다(수동). L1 동등 제어
    4.2.10 --tls-cert-file--tls-private-key-file 인수가 적합한 값으로 설정되었는지 확인합니다(수동). L1 통과
    4.2.11 --rotate-certificates 인수가 false로 설정되지 않았는지 확인합니다(자동). L1 통과
    4.2.12 RotateKubeletServerCertificate 인수가 true로 설정되었는지 확인합니다(수동). L1 통과
    4.2.13 Kubelet이 강력한 암호화만 사용하는지 확인합니다(수동). L1 실패

    Distributed Cloud 로컬 컨트롤 플레인 클러스터의 오류 및 동등 제어

    # 권장사항 수준 상태 사유
    1 제어 영역 보안 구성
    1.1.9 컨테이너 네트워크 인터페이스 파일 권한이 644 또는 보다 제한적인 권한으로 설정되었는지 확인합니다(수동). L1 동등 제어 755 없음
    1.1.11 etcd 데이터 디렉터리 권한이 700 또는 보다 제한적인 권한으로 설정되었는지 확인합니다 (자동). L1 동등 제어 755 etcd 데이터 디렉터리에는 기본 755 권한이 있지만 하위 디렉터리는 700를 사용합니다.
    1.1.12 etcd 데이터 디렉터리 소유권이 etcd:etcd로 설정되었는지 확인합니다 (자동). L1 동등 제어 2003:2003 보안 강화를 위해 루트 없는 컨트롤 플레인의 결과로 etcd 데이터 디렉터리인 /var/lib/etcd2003:2003 소유입니다.
    1.1.16 scheduler.conf 파일 소유권이 root:root로 설정되었는지 확인합니다 (자동). L1 동등 제어 2002:2002 보안 강화를 위해 루트 없는 제어 영역으로 인해 scheduler.conf2002:2002 소유입니다.
    1.1.18 controller-manager.conf 파일 소유권이 root:root로 설정되었는지 확인합니다 (자동). L1 동등 제어 2001:2001 보안 강화를 위해 루트 없는 제어 영역으로 인해 controller-manager.conf2001:2001 소유입니다.
    1.1.19 Kubernetes PKI 디렉터리 및 파일 소유권이 root:root로 설정되었는지 확인합니다(자동). L1 동등 제어 다양한 가격 PKI 디렉터리 /etc/kubernetes/pki의 소유자는 root:root이고 디렉터리 내 파일의 소유자는 다양합니다. 보안 강화를 위해 루트 없는 제어 영역이 사용되기 때문입니다.
    1.1.20 Kubernetes PKI 인증서 파일 권한이 644 또는 보다 제한적인 권한으로 설정되었는지 확인합니다(수동). L1 동등 제어 644 보안 강화를 위해 루트 없는 제어 영역이 사용되기 때문입니다.
    1.2 API 서버
    1.2.3 --DenyServiceExternalIPs이 설정되지 않았는지 확인합니다(자동). L1 실패
    1.2.9 --authorization-mode 인수에 RBAC가 포함되는지 확인합니다(자동). L1 실패 이벤트 비율 제한 허용 컨트롤러는 Kubernetes 알파 기능입니다. Google Distributed Cloud는 비GA 기능을 지원하지 않습니다.
    1.2.11 허용 제어 플러그인 AlwaysAdmit이 설정되지 않았는지 확인합니다 (자동). L1 실패
    1.2.12 허용 제어 플러그인 AlwaysPullImages가 설정되었는지 확인합니다 (수동). L1 실패 AlwaysPullImages 허용 컨트롤러는 전체 클러스터에서 새 포드를 만들기 위해 컨테이너 레지스트리를 단일 장애점으로 만드는 대신 비협조적 멀티테넌트 클러스터에서 비공개 레지스트리 이미지에 대한 일부 보호를 제공합니다. Distributed Cloud 클러스터는 AlwaysPullImages 허용 컨트롤러를 사용 설정하지 않으므로 이를 절충하기 위해 허용 정책을 구현하는 것은 클러스터 관리자의 몫입니다.
    1.2.18 --audit-log-path 인수가 설정되었는지 확인합니다(자동). L1 실패 Distributed Cloud는 감사 로그를 캡처하지만 이 플래그를 감사에 사용하지 않습니다. 자세한 내용은 감사 로깅을 참고하세요.
    1.2.19 --audit-log-maxage 인수가 30 또는 적합한 값으로 설정되었는지 확인합니다(자동). L1 실패 Distributed Cloud는 감사 로그를 캡처하지만 이 플래그를 감사에 사용하지 않습니다. 자세한 내용은 감사 로깅을 참고하세요.
    1.2.20 --audit-log-maxbackup 인수가 10 또는 적합한 값으로 설정되었는지 확인합니다(자동). L1 실패 Distributed Cloud는 감사 로그를 캡처하지만 이 플래그를 감사에 사용하지 않습니다. 자세한 내용은 감사 로깅을 참고하세요.
    1.2.21 --audit-log-maxsize 인수가 100 또는 적합한 값으로 설정되었는지 확인합니다(자동). L1 실패 Distributed Cloud는 감사 로그를 캡처하지만 이 플래그를 감사에 사용하지 않습니다. 자세한 내용은 감사 로깅을 참고하세요.
    1.2.22 --request-timeout 인수가 적합한 값으로 설정되었는지 확인합니다(수동). L1 실패 Distributed Cloud는 감사 로그를 캡처하지만 이 플래그를 감사에 사용하지 않습니다. 자세한 내용은 감사 로깅을 참고하세요.
    3 제어 영역 구성
    3.2.2 감사 정책에 주요 보안 문제가 포함되는지 확인합니다(수동). L2 실패
    4 워커 노드 보안 구성
    4.1.1 kubelet 서비스 파일 권한이 644 또는 보다 제한적인 권한으로 설정되었는지 확인합니다(자동). L1 실패 755
    4.1.7 인증 기관 파일 권한이 644 또는 보다 제한적인 권한으로 설정되었는지 확인합니다(수동). L1 실패
    4.1.9 kubelet --config 구성 파일에 644 또는 보다 제한적인 권한으로 설정된 권한이 있는지 확인합니다(자동). L1 실패 644
    4.2.4 --read-only-port 인수가 0으로 설정되었는지 확인합니다(수동). L1 실패 Distributed Cloud 클러스터는 kubelet 측정항목을 수집하기 위해 --read-only-port 인수를 10255로 설정합니다.
    4.2.9 --event-qps 인수가 0 또는 적합한 이벤트 캡처를 보장하는 수준으로 설정되었는지 확인합니다(수동). L1 동등 제어 Distributed Cloud 클러스터는 –rotate-server-certificates 플래그를 사용하여 kubelet 서버 TLS를 관리합니다.
    4.2.13 Kubelet이 강력한 암호화만 사용하는지 확인합니다(수동). L1 실패