CIS 벤치마크


이 문서에서는 CIS Kubernetes 및 GKE 벤치마크 정의, 벤치마크로 규정 준수를 감사하는 방법, 권장 수준을 직접 감사하거나 구현할 수 없는 경우 Google Kubernetes Engine(GKE)로 구성되는 항목에 대해 설명합니다.

CIS 벤치마크 사용

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

GKE와 같은 관리형 서비스에서는 벤치마크에 관한 일부 항목을 사용자가 직접 관리할 필요가 없으며, 사용자가 직접 감사하거나 조정할 수 없는 권장 수준도 존재합니다. GKE로 실행 중이면, GKE 배포에 적용되도록 의도된 CIS Kubernetes 벤치마크의 하위 벤치마크인 CIS GKE 벤치마크를 사용합니다. 이 방법은 기존 CIS 벤치마크에서 가져온 것이지만, 사용자가 구성할 수 없거나 관리하지 않는 항목을 삭제하고 Google Cloud와 관련된 추가적인 제어 기능을 더해줍니다.

여러 벤치마크 집합

GKE에서는 GKE, Kubernetes, Docker, Container-Optimized OS, Linux용 CIS 벤치마크를 사용할 수 있습니다. 이러한 제품에 대한 최신 벤치마크를 다운로드하려면 CIS 벤치마크 웹사이트를 방문하세요.

기본 컨테이너 런타임 containerd에는 CIS 벤치마크가 없습니다.

Windows Server CIS 벤치마크가 Kubernetes 사용을 특별히 허용하지 않으며 Kubernetes CIS 벤치마크는 현재 Windows 노드를 수용할 수 없기 때문에 GKE에서 사용되는 Windows Server 노드는 적절한 CIS 벤치마크에 따라 점수가 매겨지지 않습니다.

일부 도구는 여러 CIS 벤치마크에 대해 Kubernetes 노드 분석을 시도하고(예시: Linux, Docker, Kubernetes) 결과를 조합합니다. 이러한 벤치마크는 Kubernetes 환경에서 조합 및 적용되도록 설계되지 않았기 때문에 결과 조언이 혼동되고 모순될 수도 있습니다.

공유 책임 모델

GKE의 공유 책임 모델에 따라 Google은 다음 Kubernetes 구성요소를 관리합니다.

  • 제어 영역 VM, API 서버, VM의 기타 구성요소, etcd를 포함하는 제어 영역
  • Kubernetes 배포
  • 노드 운영체제

이러한 항목과 관련된 구성은 일반적으로 GKE에서 감사 또는 수정할 수 없습니다.

워크로드를 실행하는 노드 및 워크로드 자체에 대한 업그레이드는 여전히 사용자의 책임입니다. 일반적으로 이러한 구성요소에 대해서는 모든 권장 수준을 감사하고 조정할 수 있습니다.

감사 및 조정 기능

CIS GKE 벤치마크는 기존 CIS Kubernetes 벤치마크에서 가져온 것이지만, 사용자가 구성할 수 없거나 관리하지 않는 항목을 삭제하고 Google Cloud와 관련된 추가적인 제어 기능을 더해줍니다.

CIS GKE 벤치마크 섹션은 다음과 같습니다.

  • 제어 영역 구성요소, etcd, 제어 영역 구성(섹션 1, 2, 3)은 CIS Kubernetes 벤치마크에서 가져오지만, 일반적으로 GKE에서 감사 또는 조정이 불가능합니다.
  • 워커 노드(섹션 4)는 CIS Kubernetes 벤치마크에서 가져옵니다. 이러한 항목 중 일부는 GKE에서 감사 또는 조정이 가능하지만, 지침이 다를 수 있습니다.
  • 정책(섹션 5)도 CIS Kubernetes 벤치마크에서 가져오는데 일반적으로 지침 변경사항 없이 GKE에 직접 적용될 수 있습니다.
  • CIS GKE 벤치마크의 관리형 서비스(섹션 6)는 특히 GKE에서 완전히 새로운 콘텐츠입니다. 이 섹션에는 Google Cloud 제어에 해당하는 모든 권장 수준이 포함되어 있습니다. 이러한 권장 수준은 GKE에서 감사 및 조정할 수 있습니다.

GKE에서 감사 또는 조정이 불가능한 항목에 대해서는 기본값 섹션을 참조하여 GKE에서 생성된 기본 클러스터가 CIS Kubernetes 벤치마크로 작동하는 방법을 확인합니다.

버전

여러 벤치마크는 버전 번호가 동일하지 않을 수 있습니다.

이 문서에서는 다음과 같은 버전이 사용됩니다.

Kubernetes 버전 CIS Kubernetes 벤치마크 버전 CIS GKE 벤치마크 버전
1.15 1.5.0 1.0.0

CIS Kubernetes 벤치마크

벤치마크 액세스

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

권장 수준

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

수준 설명
수준 1

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

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

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

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

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

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

    점수 설명
    점수 있음 이 권장 수준을 준수하지 못하면 최종 벤치마크 점수가 줄어듭니다.
    점수 없음 이 권장 수준을 준수하지 못해도 최종 벤치마크 점수가 줄어들지 않습니다.

    GKE에서 평가

    GKE에서 Kubernetes 권장 수준 상태를 지정하기 위해 사용되는 값은 다음과 같습니다.

    상태 설명
    통과 벤치마크 권장 수준을 준수합니다.
    실패 벤치마크 권장 수준을 준수하지 않습니다.
    동등 제어 벤치마크 권장 수준의 조항을 정확하게 준수하지 않지만, 동등한 보안 제어를 제공하기 위한 다른 메커니즘이 GKE에 존재합니다.
    환경에 따라 다름 이 권장 수준과 관련된 항목이 GKE에서 구성되지 않습니다. 해당 환경이 벤치마크 권장 수준을 준수하는지 여부는 사용자 구성에 따라 결정됩니다.

    GKE의 상태

    지정된 버전으로 새 GKE 클러스터를 만들 때 CIS Kubernetes 벤치마크에 대해 작업을 수행하는 방법은 다음과 같습니다.

    기본 GKE 클러스터의 상태:

    # 권장 수준 점수 있음/점수 없음 수준 기본 상태
    1 제어 영역 구성요소
    1.1 제어 영역 노드 구성 파일
    1.1.1 API 서버 Pod 사양 파일 권한이 644 또는 보다 제한적인 권한으로 설정되었는지 확인합니다. 점수 있음 L1 통과
    1.1.2 API 서버 Pod 사양 파일 소유권이 root:root로 설정되었는지 확인합니다. 점수 있음 L1 통과
    1.1.3 컨트롤러 관리자 Pod 사양 파일 권한이 644 또는 보다 제한적인 권한으로 설정되었는지 확인합니다. 점수 있음 L1 통과
    1.1.4 컨트롤러 관리자 Pod 사양 파일 소유권이 root:root로 설정되었는지 확인합니다. 점수 있음 L1 통과
    1.1.5 스케줄러 Pod 사양 파일 권한이 644 또는 보다 제한적인 권한으로 설정되었는지 확인합니다. 점수 있음 L1 통과
    1.1.6 스케줄러 Pod 사양 파일 소유권이 root:root로 설정되었는지 확인합니다. 점수 있음 L1 통과
    1.1.7 etcd Pod 사양 파일 권한이 644 또는 보다 제한적인 권한으로 설정되었는지 확인합니다. 점수 있음 L1 통과
    1.1.8 etcd Pod 사양 파일 소유권이 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 파일 권한이 644 또는 보다 제한적인 권한으로 설정되었는지 확인합니다. 점수 있음 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 --basic-auth-file 인수가 설정되지 않았는지 확인합니다. 점수 있음 L1 통과
    1.2.3 --token-auth-file 매개변수가 설정되지 않았는지 확인합니다. 점수 있음 L1 실패
    1.2.4 --kubelet-https 인수가 true로 설정되었는지 확인합니다. 점수 있음 L1 통과
    1.2.5 --kubelet-client-certificate 및 --kubelet-client-key 인수가 적합한 값으로 설정되었는지 확인합니다. 점수 있음 L1 통과
    1.2.6 --kubelet-certificate-authority 인수가 적합한 값으로 설정되었는지 확인합니다. 점수 있음 L1 통과
    1.2.7 --authorization-mode 인수가 AlwaysAllow로 설정되지 않았는지 확인합니다. 점수 있음 L1 통과
    1.2.8 --authorization-mode 인수에 노드가 포함되는지 확인합니다. 점수 있음 L1 통과
    1.2.9 --authorization-mode 인수에 RBAC가 포함되는지 확인합니다. 점수 있음 L1 통과
    1.2.10 허용 제어 플러그인 EventRateLimit가 설정되었는지 확인합니다. 점수 없음 L1 실패
    1.2.11 허용 제어 플러그인 AlwaysAdmit가 설정되지 않았는지 확인합니다. 점수 있음 L1 통과
    1.2.12 허용 제어 플러그인 AlwaysPullImages가 설정되었는지 확인합니다. 점수 없음 L1 실패
    1.2.13 PodSecurityPolicy가 사용되지 않은 경우 허용 제어 플러그인 SecurityContextDeny가 설정되었는지 확인합니다. 점수 없음 L1 실패
    1.2.14 허용 제어 플러그인 ServiceAccount가 설정되었는지 확인합니다. 점수 있음 L1 통과
    1.2.15 허용 제어 플러그인 NamespaceLifecycle이 설정되었는지 확인합니다. 점수 있음 L1 통과
    1.2.16 허용 제어 플러그인 PodSecurityPolicy가 설정되었는지 확인합니다. 점수 있음 L1 실패
    1.2.17 허용 제어 플러그인 NodeRestriction이 설정되었는지 확인합니다. 점수 있음 L1 통과
    1.2.18 --insecure-bind-address 인수가 설정되지 않았는지 확인합니다. 점수 있음 L1 통과
    1.2.19 --insecure-port 인수가 0으로 설정되었는지 확인합니다. 점수 있음 L1 통과
    1.2.20 --secure-port 인수가 0으로 설정되지 않았는지 확인합니다. 점수 있음 L1 통과
    1.2.21 --profiling 인수가 false로 설정되었는지 확인합니다. 점수 있음 L1 실패
    1.2.22 --audit-log-path 인수가 설정되었는지 확인합니다. 점수 있음 L1 동등 제어
    1.2.23 --audit-log-maxage 인수가 30으로 또는 적합한 값으로 설정되었는지 확인합니다. 점수 있음 L1 동등 제어
    1.2.24 --audit-log-maxbackup 인수가 10으로 또는 적합한 값으로 설정되었는지 확인합니다. 점수 있음 L1 동등 제어
    1.2.25 --audit-log-maxsize 인수가 100 또는 적합한 값으로 설정되었는지 확인합니다. 점수 있음 L1 동등 제어
    1.2.26 --request-timeout 인수가 적합한 값으로 설정되었는지 확인합니다. 점수 있음 L1 통과
    1.2.27 --service-account-lookup 조회가 true로 설정되었는지 확인합니다. 점수 있음 L1 통과
    1.2.28 --service-account-key-file 인수가 적합한 값으로 설정되었는지 확인합니다. 점수 있음 L1 통과
    1.2.29 --etcd-certfile 및 --etcd-keyfile 인수가 적합한 값으로 설정되었는지 확인합니다. 점수 있음 L1 실패
    1.2.30 --tls-cert-file 및 --tls-private-key-file 인수가 적합한 값으로 설정되었는지 확인합니다. 점수 있음 L1 통과
    1.2.31 --client-ca-file 인수가 적합한 값으로 설정되었는지 확인합니다. 점수 있음 L1 통과
    1.2.32 --etcd-cafile 인수가 적합한 값으로 설정되었는지 확인합니다. 점수 있음 L1 실패
    1.2.33 --encryption-provider-config 인수가 적합한 값으로 설정되었는지 확인합니다. 점수 있음 L1 통과
    1.2.34 암호화 공급자 적합한 값으로 구성되었는지 확인합니다. 점수 있음 L1 실패
    1.2.35 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 kubelet.conf 파일 권한이 644 또는 보다 제한적인 권한으로 설정되었는지 확인합니다. 점수 있음 L1 통과
    4.1.6 kubelet.conf 서비스 파일 소유권이 root:root로 설정되었는지 확인합니다. 점수 있음 L1 통과
    4.1.7 인증 기관 파일 권한이 644 또는 보다 제한적인 권한으로 설정되었는지 확인합니다. 점수 있음 L1 통과
    4.1.8 클라이언트 인증 기관 파일 소유권이 root:root로 설정되었는지 확인합니다. 점수 있음 L1 통과
    4.1.9 kubelet 구성 파일에 644 또는 보다 제한적인 권한으로 설정된 권한이 있는지 확인합니다. 점수 있음 L1 통과
    4.1.10 kubelet 구성 파일 소유권이 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 인수가 설정되지 않았는지 확인합니다. 점수 없음 L1 통과
    4.2.9 --event-qps 인수가 0 또는 적합한 이벤트 캡처를 보장하는 수준으로 설정되었는지 확인합니다. 점수 없음 L2 실패
    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 실패
    5 정책
    5.1 RBAC 및 서비스 계정
    5.1.1 cluster-admin 역할이 필요한 위치에서만 사용되는지 확인합니다. 점수 없음 L1 환경에 따라 다름
    5.1.2 보안 비밀 액세스를 최소화합니다. 점수 없음 L1 환경에 따라 다름
    5.1.3 Roles 및 ClusterRoles에서 와일드 카드 사용을 최소화합니다. 점수 없음 L1 환경에 따라 다름
    5.1.4 Pod 만들기 액세스 권한을 최소화합니다. 점수 없음 L1 환경에 따라 다름
    5.1.5 기본 서비스 계정이 현재 사용되지 않는지 확인합니다. 점수 있음 L1 환경에 따라 다름
    5.1.6 서비스 계정 토큰이 필요한 위치에서만 마운트되었는지 확인합니다. 점수 없음 L1 환경에 따라 다름
    5.2 Pod 보안 정책
    5.2.1 권한이 있는 컨테이너 허용을 최소화합니다. 점수 없음 L1 환경에 따라 다름
    5.2.2 호스트 프로세스 ID 네임스페이스를 공유하려는 컨테이너 허용을 최소화합니다. 점수 있음 L1 환경에 따라 다름
    5.2.3 호스트 IPC 네임스페이스를 공유하려는 컨테이너 허용을 최소화합니다. 점수 있음 L1 환경에 따라 다름
    5.2.4 호스트 네트워크 네임스페이스를 공유하려는 컨테이너 허용을 최소화합니다. 점수 있음 L1 환경에 따라 다름
    5.2.5 allowPrivilegeEscalation으로 컨테이너 허용을 최소화합니다. 점수 있음 L1 환경에 따라 다름
    5.2.6 루트 컨테이너 허용을 최소화합니다. 점수 없음 L2 환경에 따라 다름
    5.2.7 NET_RAW 기능으로 컨테이너 허용을 최소화합니다. 점수 없음 L1 환경에 따라 다름
    5.2.8 추가된 기능으로 컨테이너 허용을 최소화합니다. 점수 없음 L1 환경에 따라 다름
    5.2.9 할당된 기능으로 컨테이너 허용을 최소화합니다. 점수 없음 L2 환경에 따라 다름
    5.3 네트워크 정책 및 CNI
    5.3.1 사용 중인 CNI가 네트워크 정책을 지원하는지 확인합니다. 점수 없음 L1 통과
    5.3.2 모든 네임스페이스에 네트워크 정책이 정의되어 있는지 확인합니다. 점수 있음 L2 환경에 따라 다름
    5.4 보안 비밀 관리
    5.4.1 보안 비밀을 환경 변수로 사용하는 대신 보안 비밀을 파일로 사용하는 것을 선호합니다. 점수 없음 L1 환경에 따라 다름
    5.4.2 외부 보안 비밀 스토리지를 고려합니다. 점수 없음 L2 환경에 따라 다름
    5.5 확장 가능한 허용 제어
    5.5.1 ImagePolicyWebhook 허용 컨트롤러를 사용하여 이미지 출처를 구성합니다. 점수 없음 L2 환경에 따라 다름
    5.6 일반 정책
    5.6.1 네임스페이스를 사용하여 리소스 간 관리 경계를 만듭니다. 점수 없음 L1 환경에 따라 다름
    5.6.2 Pod 정의에서 seccomp 프로필이 docker/default로 설정되었는지 확인합니다. 점수 없음 L2 환경에 따라 다름
    5.6.3 Pod 및 컨테이너에 보안 컨텍스트를 적용합니다. 점수 없음 L2 환경에 따라 다름
    5.6.4 기본 네임스페이스를 사용하지 않아야 합니다. 점수 있음 L2 환경에 따라 다름

    GKE의 기본값

    새 GKE 클러스터의 기본값에 CIS Kubernetes 벤치마크의 권장 수준이 전달되지 않은 경우 GKE에 사용되는 기본값과 해당 설명은 다음과 같습니다. 이러한 권장 수준 중 일부는 조정이 가능하며, CIS GKE 벤치마크에서 조정 절차가 수행될 수 있습니다. 자동으로 감사 가능한 항목은 CIS GKE 벤치마크에서 점수 있음으로 표시됩니다.

    기본 GKE 클러스터에서 실패 또는 환경에 따라 다름으로 표시되는 권장 수준의 기본값은 다음과 같습니다.

    # 권장 수준 점수 있음/점수 없음
    CIS Kubernetes 벤치마크
    수준 기본 상태 기본값 근거 점수 있음/점수 없음
    CIS GKE 벤치마크
    1 제어 영역 구성요소
    1.2 API 서버
    1.2.1 --anonymous-auth 인수가 false로 설정되었는지 확인합니다. 점수 없음 L1 실패 true 일부 GKE 모니터링 구성요소에는 측정항목을 얻기 위해 익명 인증이 사용됩니다. GKE에서는 kubelet에 대해 익명 인증이 허용되지만 GKE에서 추가 디버깅 핸들러가 사용 중지되므로 노출이 읽기 전용 포트와 동일합니다. 점수 없음
    1.2.3 --token-auth-file 매개변수가 설정되지 않았는지 확인합니다. 점수 있음 L1 실패 세트 일부 제어 영역 구성요소는 정적 토큰을 사용하여 부트스트랩된 후 API 서버 인증을 위해 사용됩니다. 점수 없음
    1.2.10 허용 제어 플러그인 EventRateLimit가 설정되었는지 확인합니다. 점수 없음 L1 실패 설정되지 않음 GKE는 Kubernetes 알파 기능이므로 이벤트 비율 한도 허용 컨트롤러를 지원하지 않습니다. 점수 없음
    1.2.12 허용 제어 플러그인 AlwaysPullImages가 설정되었는지 확인합니다. 점수 없음 L1 실패 설정되지 않음 AlwaysPullImages 허용 컨트롤러는 전체 클러스터에서 새 pod를 만들기 위해 Container Registry를 단일 장애점으로 만드는 대신, 비협업 멀티테넌트 클러스터에서 비공개 레지스트리 이미지에 대한 보호 조치를 일부 제공합니다. GKE는 AlwaysPullImages 허용 컨트롤러를 사용 설정하지 않고 클러스터 관리자가 이 상충 관계를 판단하여 허용 정책을 구현할 수 있도록 합니다. 점수 없음
    1.2.13 PodSecurityPolicy가 사용되지 않은 경우 허용 제어 플러그인 SecurityContextDeny가 설정되었는지 확인합니다. 점수 없음 L1 실패 설정되지 않음 GKE는 기본적으로 보안 컨텍스트 허용 컨트롤러를 사용 설정하지 않습니다. Pod 보안 정책 사용은 더 많은 제어를 허용하며, 선호됩니다. 점수 없음
    1.2.16 허용 제어 플러그인 PodSecurityPolicy가 설정되었는지 확인합니다. 점수 있음 L1 실패 설정되지 않음 GKE는 정책 설정이 필요하기 때문에 기본적으로 Pod 보안 정책 허용 컨트롤러를 사용 설정하지 않습니다. GKE 고객은 PodSecurityPolicy를 사용 설정할 수 있습니다. 점수 없음, 또한 6.10.3 참조
    1.2.21 --profiling 인수가 false로 설정되었는지 확인합니다. 점수 있음 L1 실패 설정되지 않음 GKE는 디버깅용 프로파일링을 사용합니다. 점수 없음
    1.2.22 --audit-log-path 인수가 설정되었는지 확인합니다. 점수 있음 L1 동등 제어 설정되지 않음 GKE는 감사 로그를 캡처하지만 이러한 플래그를 감사에 사용하지 않습니다. 자세한 내용은 GKE 감사 정책을 참조하세요. 점수 없음
    1.2.23 --audit-log-maxage 인수가 30으로 또는 적합한 값으로 설정되었는지 확인합니다. 점수 있음 L1 동등 제어 설정되지 않음 GKE는 감사 로그를 캡처하지만 이러한 플래그를 감사에 사용하지 않습니다. 자세한 내용은 GKE 감사 정책을 참조하세요. 점수 없음
    1.2.24 --audit-log-maxbackup 인수가 10으로 또는 적합한 값으로 설정되었는지 확인합니다. 점수 있음 L1 동등 제어 설정되지 않음 GKE는 감사 로그를 캡처하지만 이러한 플래그를 감사에 사용하지 않습니다. 자세한 내용은 GKE 감사 정책을 참조하세요. 점수 없음
    1.2.25 --audit-log-maxsize 인수가 100 또는 적합한 값으로 설정되었는지 확인합니다. 점수 있음 L1 동등 제어 설정되지 않음 GKE는 감사 로그를 캡처하지만 이러한 플래그를 감사에 사용하지 않습니다. 자세한 내용은 GKE 감사 정책을 참조하세요. 점수 없음
    1.2.29 --etcd-certfile 및 --etcd-keyfile 인수가 적합한 값으로 설정되었는지 확인합니다. 점수 있음 L1 실패 설정되지 않음 GKE는 현재 API 서버와 etcd 사이의 연결 보호를 위해 mTLS를 사용하지 않습니다. etcd는 localhost에서 수신 대기합니다. 자세한 내용은 클러스터 신뢰를 참조하세요. 점수 없음
    1.2.32 --etcd-cafile 인수가 적합한 값으로 설정되었는지 확인합니다. 점수 있음 L1 실패 설정되지 않음 GKE는 현재 API 서버와 etcd 사이의 연결 보호를 위해 mTLS를 사용하지 않습니다. etcd는 localhost에서 수신 대기합니다. 자세한 내용은 클러스터 신뢰를 참조하세요. 점수 없음
    1.2.34 암호화 공급자 적합한 값으로 구성되었는지 확인합니다. 점수 있음 L1 실패 identity 기본적으로 GKE는 저장된 고객 콘텐츠를 암호화합니다. 보안 비밀을 더 암호화하려면 애플리케이션 레이어 보안 비밀 암호화를 사용합니다. 점수 없음, 또한 6.3.1 참조
    1.3 컨트롤러 관리자
    1.3.2 --profiling 인수가 false로 설정되었는지 확인합니다. 점수 있음 L1 실패 true GKE는 디버깅용 프로파일링을 사용합니다. 점수 없음
    1.3.6 RotateKubeletServerCertificate 인수가 true로 설정되었는지 확인합니다. 점수 있음 L2 동등 제어 false GKE는 kubelet 인증서를 순환하지만 이 플래그를 사용하지 않습니다. 점수 없음
    1.4 스케줄러
    1.4.1 --profiling 인수가 false로 설정되었는지 확인합니다. 점수 있음 L1 실패 true GKE는 디버깅용 프로파일링을 사용합니다. 점수 없음
    2 etcd
    2.1 --cert-file 및 --key-file 인수가 적합한 값으로 설정되었는지 확인합니다. 점수 있음 L1 실패 설정되지 않음 GKE는 현재 API 서버와 etcd 사이의 연결 보호를 위해 mTLS를 사용하지 않습니다. etcd는 localhost에서 수신 대기합니다. 자세한 내용은 클러스터 신뢰를 참조하세요. 점수 없음
    2.2 --client-cert-auth 인수가 true로 설정되었는지 확인합니다. 점수 있음 L1 실패 설정되지 않음 GKE는 현재 API 서버와 etcd 사이의 연결 보호를 위해 mTLS를 사용하지 않습니다. etcd는 localhost에서 수신 대기합니다. 자세한 내용은 클러스터 신뢰를 참조하세요. 점수 없음
    2.4 --peer-cert-file 및 --peer-key-file 인수가 적합한 값으로 설정되었는지 확인합니다. 점수 있음 L1 동등 제어 설정되지 않음 GKE는 etcd 인스턴스 간 피어 트래픽에 mTLS를 사용합니다. 이러한 플래그는 리전별 클러스터에 사용되지만 영역별 클러스터에 etcd 인스턴스가 하나만 있기 때문에 영역별 클러스터에 사용되지 않습니다. 자세한 내용은 클러스터 신뢰를 참조하세요. 점수 없음
    2.5 --peer-client-cert-auth 인수가 true로 설정되었는지 확인합니다. 점수 있음 L1 동등 제어 설정되지 않음 GKE는 etcd 인스턴스 간 피어 트래픽에 mTLS를 사용합니다. 이러한 플래그는 리전별 클러스터에 사용되지만 영역별 클러스터에 etcd 인스턴스가 하나만 있기 때문에 영역별 클러스터에 사용되지 않습니다. 자세한 내용은 클러스터 신뢰를 참조하세요. 점수 없음
    2.6 --peer-auto-tls 인수가 true로 설정되지 않았는지 확인합니다. 점수 있음 L1 동등 제어 설정되지 않음 GKE는 etcd 인스턴스 간 피어 트래픽에 mTLS를 사용합니다. 이러한 플래그는 리전별 클러스터에 사용되지만 영역별 클러스터에 etcd 인스턴스가 하나만 있기 때문에 영역별 클러스터에 사용되지 않습니다. 자세한 내용은 클러스터 신뢰를 참조하세요. 점수 없음
    4 워커 노드
    4.2 Kubelet
    4.2.4 --read-only-port 인수가 0으로 설정되었는지 확인합니다. 점수 있음 L1 실패 10255 일부 GKE 모니터링 구성요소는 kubelet 읽기 전용 포트를 사용하여 측정항목을 가져옵니다. 점수 있음
    4.2.6 --protect-kernel-defaults 인수가 true로 설정되었는지 확인합니다. 점수 있음 L1 실패 false GKE는 고객 워크로드에 수정이 요구되지 않을 수 있기 때문에 Kubernetes의 커널 기본값을 보호하지 않습니다. 점수 있음
    4.2.9 --event-qps 인수가 0 또는 적합한 이벤트 캡처를 보장하는 수준으로 설정되었는지 확인합니다. 점수 없음 L2 실패 5 이벤트는 etcd에 저장된 Kubernetes 객체입니다. 과도한 etcd를 방지하기 위해 한 시간 동안만 보존되며, 적합한 보안 감사 메커니즘이 아닙니다. 이 제어에 제안된 대로 무제한 이벤트를 허용하면 클러스터가 불필요한 DoS 위험에 노출되고 허용EventRateLimits 사용 권장 수준과 모순됩니다. 영구 스토리지가 필요한 보안 관련 이벤트는 로그에 전송되어야 합니다. 점수 있음
    4.2.10 --tls-cert-file 및 --tls-private-key-file 인수가 적합한 값으로 설정되었는지 확인합니다. 점수 있음 L1 동등 제어 설정되지 않음 GKE는 API 서버 트래픽에 kubelet용 mTLS를 사용합니다. GKE는 GKE v1.12+ 클러스터에 대해 인증된 kubelet 트래픽에 API 서버용 TLS를 사용합니다. GKE는 이러한 플래그를 사용하지 않지만 kubelet 구성 파일에 지정되어 있습니다. 자세한 내용은 클러스터 신뢰를 참조하세요. 점수 있음
    4.2.11 --rotate-certificates 인수가 false로 설정되지 않았는지 확인합니다. 점수 있음 L1 동등 제어 설정되지 않음 GKE는 GKE v1.12+ 클러스터에 대해 서버 인증서를 순환합니다. GKE는 이러한 플래그를 사용하지 않지만 kubelet 구성 파일에 지정되어 있습니다. GKE는 보안 GKE 노드가 사용 설정되어 있지 않으면 클라이언트 인증서를 순환하지 않습니다. 이 경우 GKE는 이러한 플래그를 사용하지 않지만 인증서 순환을 위한 별도 프로세스를 실행합니다. 자세한 내용은 클러스터 신뢰를 참조하세요. 점수 있음
    4.2.12 RotateKubeletServerCertificate 인수가 true로 설정되었는지 확인합니다. 점수 있음 L1 동등 제어 설정되지 않음 GKE는 GKE v1.12+ 클러스터에 대해 서버 인증서를 순환합니다. GKE는 이러한 플래그를 사용하지 않지만 kubelet 구성 파일에 지정되어 있습니다. 자세한 내용은 클러스터 신뢰를 참조하세요. 점수 있음
    4.2.13 Kubelet이 강력한 암호화만 사용하는지 확인합니다. 점수 없음 실패 설정되지 않음 GKE는 golang 암호화 전문가들이 사용하기 안전하다고 여기는 golang 기본 허용 암호화 세트를 사용하며, Kubernetes의 기본값이기도 합니다. 점수 없음
    5 정책
    5.1 RBAC 및 서비스 계정
    5.1.1 cluster-admin 역할이 필요한 위치에서만 사용되는지 확인합니다. 점수 없음 L1 환경에 따라 다름 해당 없음 점수 없음
    5.1.2 보안 비밀 액세스를 최소화합니다. 점수 없음 L1 환경에 따라 다름 해당 없음 점수 없음
    5.1.3 Roles 및 ClusterRoles에서 와일드 카드 사용을 최소화합니다. 점수 없음 L1 환경에 따라 다름 해당 없음 점수 없음
    5.1.4 Pod 만들기 액세스 권한을 최소화합니다. 점수 없음 L1 환경에 따라 다름 해당 없음 점수 없음
    5.1.5 기본 서비스 계정이 현재 사용되지 않는지 확인합니다. 점수 있음 L1 환경에 따라 다름 해당 없음 점수 있음
    5.1.6 서비스 계정 토큰이 필요한 위치에서만 마운트되었는지 확인합니다. 점수 없음 L1 환경에 따라 다름 해당 없음 점수 없음
    5.2 Pod 보안 정책
    5.2.1 권한이 있는 컨테이너 허용을 최소화합니다. 점수 없음 L1 환경에 따라 다름 해당 없음 Pod 보안 정책은 기본적으로 설정되지 않습니다. 점수 있음
    5.2.2 호스트 프로세스 ID 네임스페이스를 공유하려는 컨테이너 허용을 최소화합니다. 점수 있음 L1 환경에 따라 다름 해당 없음 Pod 보안 정책은 기본적으로 설정되지 않습니다. 점수 있음
    5.2.3 호스트 IPC 네임스페이스를 공유하려는 컨테이너 허용을 최소화합니다. 점수 있음 L1 환경에 따라 다름 해당 없음 Pod 보안 정책은 기본적으로 설정되지 않습니다. 점수 있음
    5.2.4 호스트 네트워크 네임스페이스를 공유하려는 컨테이너 허용을 최소화합니다. 점수 있음 L1 환경에 따라 다름 해당 없음 Pod 보안 정책은 기본적으로 설정되지 않습니다. 점수 있음
    5.2.5 allowPrivilegeEscalation으로 컨테이너 허용을 최소화합니다. 점수 있음 L1 환경에 따라 다름 해당 없음 Pod 보안 정책은 기본적으로 설정되지 않습니다. 점수 있음
    5.2.6 루트 컨테이너 허용을 최소화합니다. 점수 없음 L2 환경에 따라 다름 해당 없음 Pod 보안 정책은 기본적으로 설정되지 않습니다. 점수 있음
    5.2.7 NET_RAW 기능으로 컨테이너 허용을 최소화합니다. 점수 없음 L1 환경에 따라 다름 해당 없음 Pod 보안 정책은 기본적으로 설정되지 않습니다. 점수 있음
    5.2.8 추가된 기능으로 컨테이너 허용을 최소화합니다. 점수 없음 L1 환경에 따라 다름 해당 없음 Pod 보안 정책은 기본적으로 설정되지 않습니다. 점수 있음
    5.2.9 할당된 기능으로 컨테이너 허용을 최소화합니다. 점수 없음 L2 환경에 따라 다름 해당 없음 Pod 보안 정책은 기본적으로 설정되지 않습니다. 점수 있음
    5.3 네트워크 정책 및 CNI
    5.3.2 모든 네임스페이스에 네트워크 정책이 정의되어 있는지 확인합니다. 점수 있음 L2 환경에 따라 다름 해당 없음 점수 있음
    5.4 보안 비밀 관리
    5.4.1 보안 비밀을 환경 변수로 사용하는 대신 보안 비밀을 파일로 사용하는 것을 선호합니다. 점수 없음 L1 환경에 따라 다름 해당 없음 점수 없음
    5.4.2 외부 보안 비밀 스토리지를 고려합니다. 점수 없음 L2 환경에 따라 다름 해당 없음 점수 없음
    5.5 확장 가능한 허용 제어
    5.5.1 ImagePolicyWebhook 허용 컨트롤러를 사용하여 이미지 출처를 구성합니다. 점수 없음 L2 환경에 따라 다름 사용 설정되지 않음 GKE는 기본적으로 이미지 정책 웹훅 허용 컨트롤러를 사용 설정하지 않습니다. Binary Authorization을 사용한 이미지 출처는 정책 설정이 필요하기 때문에 기본적으로 설정되지 않습니다. 점수 없음, 또한 6.10.5 참조
    5.6 일반 정책
    5.6.1 네임스페이스를 사용하여 리소스 간 관리 경계를 만듭니다. 점수 없음 L1 환경에 따라 다름 해당 없음 점수 없음
    5.6.2 Pod 정의에서 seccomp 프로필이 docker/default로 설정되었는지 확인합니다. 점수 없음 L2 환경에 따라 다름 해당 없음 seccomp 프로필은 기본적으로 설정되지 않습니다. 점수 없음
    5.6.3 Pod 및 컨테이너에 보안 컨텍스트를 적용합니다. 점수 없음 L2 환경에 따라 다름 해당 없음 보안 컨텍스트는 기본적으로 설정되지 않습니다. 점수 없음
    5.6.4 기본 네임스페이스를 사용하지 않아야 합니다. 점수 있음 L2 환경에 따라 다름 해당 없음 점수 있음

    CIS GKE 벤치마크

    벤치마크 액세스

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

    • CIS 벤치마크 전체 목록으로 이동합니다.
    • Kubernetes 제목 아래에서 관련 콘텐츠를 보려면 확장을 클릭합니다.
    • CIS GKE 벤치마크가 다운로드할 수 있도록 나열됩니다.

    권장 수준

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

    수준 설명
    수준 1

    권장 수준이 광범위하게 적용될 수 있습니다. 권장 수준이 거의 모든 환경에 적용되어야 합니다.

    수준 2

    권장 수준으로 인해 더 엄격한 보안 환경을 얻을 수 있지만 반드시 모든 사례에 적용될 수 있는 것은 아닙니다. 성능에 영향을 주거나 다른 권장 수준과 함께 적용되지 않을 수 있습니다. 이 수준은 적용 전 해당 환경에서 평가를 거쳐야 합니다.

    예를 들어 멀티 테넌트 워크로드의 일부 사례에서는 이러한 권장 수준이 보다 관련이 높을 수 있습니다.

    권장 수준 점수

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

    점수 설명
    점수 있음

    자동화된 방법을 사용해서 권장 수준을 쉽게 테스트할 수 있으며, 명확하게 평가될 수 있는 값을 포함합니다.

    이 권장 수준에는 일반 안정화 버전 제품 또는 기능만 포함됩니다.

    점수 없음

    자동화를 사용해서 권장 수준을 쉽게 평가할 수 없으며, 해당 워크로드에 적합한 정확한 구현을 결정하기 위한 평가가 필요합니다. 이 권장 수준에는 베타 제품 또는 기능이 사용될 수 있습니다.

    예를 들어 pod 보안 정책은 워크로드와 관련된 정책 사용이 필요하며, 베타 기능이므로 점수가 적용되지 않습니다.

    GKE에서 평가

    GKE 특정 권장 수준(섹션 6)의 경우 모두 구성 가능하여, 해당 환경에서 통과로 구성될 수 있으므로 여기에서는 다음 값을 사용하여 기본값을 지정합니다.

    상태 설명
    기본 새 클러스터가 기본적으로 벤치마크 권장 수준을 준수합니다.
    기본이 아님 새 클러스터가 기본적으로 벤치마크 권장 수준을 준수하지 않습니다.
    환경에 따라 다름 이 권장 수준과 관련된 항목이 GKE에서 구성되지 않습니다. 해당 환경이 벤치마크 권장 수준을 준수하는지 여부는 사용자 구성에 따라 결정됩니다.

    GKE의 기본값

    지정된 버전으로 새 GKE 클러스터를 만들 때 CIS Kubernetes 벤치마크에 대해 작업을 수행하는 방법은 다음과 같습니다.

    기본 GKE 클러스터의 상태:

    # 권장 수준 점수 있음/점수 없음 수준 기본 상태
    6 관리형 서비스
    6.1 이미지 레지스트리 및 이미지 스캔
    6.1.1 GCR 컨테이너 분석 또는 타사 공급업체를 사용하여 이미지 취약점 스캔을 확인합니다. 점수 있음 L1 기본이 아님
    6.1.2 GCR에 대한 사용자 액세스를 최소화합니다. 점수 있음 L1 환경에 따라 다름
    6.1.3 GCR에 대한 읽기 전용 클러스터 액세스를 최소화합니다. 점수 있음 L1 기본이 아님
    6.1.4 승인된 항목으로만 컨테이너 레지스트리를 최소화합니다. 점수 없음 L2 기본이 아님
    6.2 Identity and Access Management(IAM)
    6.2.1 Compute Engine 기본 서비스 계정을 사용하여 GKE 클러스터를 실행하지 않는 것을 선호합니다. 점수 있음 L2 기본이 아님
    6.2.2 전용 Google Cloud 서비스 계정 및 워크로드 아이덴티티 사용 선호 점수 없음 L1 기본이 아님
    6.3 Cloud Key Management Service(Cloud KMS)
    6.3.1 Cloud KMS에서 관리되는 키를 사용하여 Kubernetes 보안 비밀 암호화를 고려합니다. 점수 있음 L1 기본이 아님
    6.4 노드 메타데이터
    6.4.1 이전 Compute Engine 인스턴스 메타데이터 API가 사용 중지되었는지 확인합니다. 점수 있음 L1 기본
    6.4.2 GKE 메타데이터 서버가 사용 설정되어 있는지 확인합니다. 점수 없음 L2 기본이 아님
    6.5 노드 구성 및 유지보수
    6.5.1 Container-Optimized OS(COS)가 GKE 노드 이미지에 사용되었는지 확인합니다. 점수 있음 L2 기본
    6.5.2 노드 자동 업그레이드가 GKE 노드에 사용 설정되어 있는지 확인합니다. 점수 있음 L1 기본
    6.5.3 노드 자동 업그레이드가 GKE 노드에 사용 설정되어 있는지 확인합니다. 점수 있음 L1 기본
    6.5.4 출시 채널을 사용하여 GKE 버전 관리 자동화를 고려합니다. 점수 없음 L1 기본이 아님
    6.5.5 보안 GKE 노드가 사용 설정되어 있는지 확인합니다. 점수 없음 L1 기본이 아님
    6.5.6 보안 GKE 노드의 통합 모니터링이 사용 설정되었는지 확인합니다. 점수 없음 L1 기본이 아님
    6.5.7 보안 GKE 노드의 보안 부팅이 사용 설정되었는지 확인합니다. 점수 없음 L2 기본이 아님
    6.6 클러스터 네트워킹
    6.6.1 VPC 흐름 로그 및 노드 내 공개 상태 사용 설정을 고려합니다. 점수 없음 L2 기본이 아님
    6.6.2 VPC 기반 클러스터를 선호합니다. 점수 있음 L1 기본이 아님
    6.6.3 마스터 승인 네트워크가 사용 설정되어 있는지 확인합니다. 점수 있음 L1 기본이 아님
    6.6.4 비공개 엔드포인트는 사용 설정되고 공개 액세스는 중지된 상태로 클러스터가 생성되었는지 확인합니다. 점수 있음 L2 기본이 아님
    6.6.5 클러스터가 비공개 노드로 생성되었는지 확인합니다. 점수 있음 L1 기본이 아님
    6.6.6 GKE 워커 노드의 방화벽 사용을 고려합니다. 점수 없음 L1 기본이 아님
    6.6.7 네트워크 정책이 사용 설정되어 있고 적절하게 설정되어 있는지 확인합니다. 점수 없음 L1 기본이 아님
    6.6.8 Google 관리형 SSL 인증서 사용을 고려합니다. 점수 없음 L2 환경에 따라 다름
    6.7 Logging
    6.7.1 Stackdriver Kubernetes Logging 및 Monitoring이 사용 설정되어 있는지 확인합니다. 점수 있음 L1 기본
    6.7.2 Linux 감사 로깅 사용 설정을 고려합니다. 점수 없음 L2 기본이 아님
    6.8 인증 및 승인
    6.8.1 정적 비밀번호를 사용하는 기본 인증이 중지되어 있는지 확인합니다. 점수 있음 L1 기본
    6.8.2 클라이언트 인증서를 사용한 인증이 중지되어 있는지 확인합니다. 점수 있음 L1 기본
    6.8.3 RBAC용 Google 그룹스로 Kubernetes RBAC 사용자 관리를 고려합니다. 점수 없음 L2 기본이 아님
    6.8.4 기존 승인(ABAC)이 중지되어 있는지 확인합니다. 점수 있음 L1 기본
    6.9 스토리지
    6.9.1 GKE 영구 디스크(PD)용 고객 관리 암호화 키(CMEK) 사용 설정을 고려합니다. 점수 없음 L1 기본이 아님
    6.10 기타 클러스터 구성
    6.10.1 Kubernetes 웹 UI가 중지되어 있는지 확인합니다. 점수 있음 L1 기본
    6.10.2 알파 클러스터가 프로덕션 워크로드에 사용되지 않았는지 확인합니다. 점수 있음 L1 기본
    6.10.3 Pod 보안 정책이 사용 설정되어 있고 적절하게 설정되어 있는지 확인합니다. 점수 없음 L1 기본이 아님
    6.10.4 신뢰할 수 없는 워크로드 실행을 위해 GKE Sandbox를 고려합니다. 점수 없음 L2 기본이 아님
    6.10.5 Binary Authorization 사용 설정과 적절한 정책 구성을 선호합니다. 점수 없음 L2 기본이 아님
    6.10.6 Cloud Security Command Center(Cloud SCC) 사용 설정을 선호합니다. 점수 없음 L1 기본이 아님

    벤치마크 감사 방법

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

    이를 사용해서는 GKE에서 감사될 수 없는 Kubernetes CIS 벤치마크의 권장 수준을 감사할 수 없습니다. 사용자가 직접 감사할 수 없는 구성요소에 대해서는 기본값을 참조하여 GKE에서 사용자 환경이 미리 구성되는 방식을 확인하세요.

    CIS Kubernetes 벤치마크 감사 자동화

    오픈소스 도구인 kube-bench를 사용하면 CIS Kubernetes 벤치마크에 대해 클러스터 구성을 테스트할 수 있습니다. 사용자는 제어 영역 노드에 대한 직접 액세스 권한이 없기 때문에 GKE 워크로드에 대해 kube-bench master 테스트를 실행할 수 없으며, kube-bench node 테스트만 실행할 수 있습니다.

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

    kube-bench node --benchmark cis-1.5
    

    CIS GKE 벤치마크 감사 자동화

    Security Health Analytics는 열려 있는 방화벽이나 공개 버킷 등의 환경에서 일반적인 구성 오류를 식별합니다. 여기에는 GKE 보안 권장 수준이 포함됩니다. Security Health Analytics를 사용 설정하면 Cloud Security Command Center에 있을 수 있는 클러스터 구성 오류에 대한 알림이 제공됩니다.

    Security Health Analytics의 검색 결과에는 수준 1의 점수 있음 권장사항이 여러 개 포함됩니다.

    # 권장 수준 점수 있음/점수 없음 수준 Security Health Analytics 검색 결과
    6.1 이미지 레지스트리 및 이미지 스캔
    6.1.1 GCR 컨테이너 분석 또는 타사 공급업체를 사용하여 이미지 취약점 스캔을 확인합니다. 점수 있음 L1 해당 없음
    6.1.2 GCR에 대한 사용자 액세스를 최소화합니다. 점수 있음 L1 해당 없음
    6.1.3 GCR에 대한 읽기 전용 클러스터 액세스를 최소화합니다. 점수 있음 L1 해당 없음
    6.1.4 승인된 항목으로만 컨테이너 레지스트리를 최소화합니다. 점수 없음 L2 해당 없음
    6.2 Identity and Access Management(IAM)
    6.2.1 Compute Engine 기본 서비스 계정을 사용하여 GKE 클러스터를 실행하지 않는 것을 선호합니다. 점수 있음 L2 OVER_PRIVILEGED_ACCOUNTOVER_PRIVILEGED_SCOPES
    6.2.2 전용 Google Cloud 서비스 계정 및 워크로드 아이덴티티 사용 선호 점수 없음 L1 WORKLOAD_IDENTITY_DISABLED
    6.3 Cloud Key Management Service(Cloud KMS)
    6.3.1 Cloud KMS에서 관리되는 키를 사용하여 Kubernetes 보안 비밀 암호화를 고려합니다. 점수 있음 L1 해당 없음
    6.4 노드 메타데이터
    6.4.1 이전 Compute Engine 인스턴스 메타데이터 API가 사용 중지되었는지 확인합니다. 점수 있음 L1 LEGACY_METADATA_ENABLED
    6.4.2 GKE 메타데이터 서버가 사용 설정되어 있는지 확인합니다. 점수 없음 L2 해당 없음
    6.5 노드 구성 및 유지보수
    6.5.1 Container-Optimized OS(COS)가 GKE 노드 이미지에 사용되었는지 확인합니다. 점수 있음 L2 COS_NOT_USED
    6.5.2 노드 자동 업그레이드가 GKE 노드에 사용 설정되어 있는지 확인합니다. 점수 있음 L1 AUTO_REPAIR_DISABLED
    6.5.3 노드 자동 업그레이드가 GKE 노드에 사용 설정되어 있는지 확인합니다. 점수 있음 L1 AUTO_UPGRADE_DISABLED
    6.5.4 출시 채널을 사용하여 GKE 버전 관리 자동화를 고려합니다. 점수 없음 L1 해당 없음
    6.5.5 보안 GKE 노드가 사용 설정되어 있는지 확인합니다. 점수 없음 L1 해당 없음
    6.5.6 보안 GKE 노드의 통합 모니터링이 사용 설정되었는지 확인합니다. 점수 없음 L1 해당 없음
    6.5.7 보안 GKE 노드의 보안 부팅이 사용 설정되었는지 확인합니다. 점수 없음 L2 해당 없음
    6.6 클러스터 네트워킹
    6.6.1 VPC 흐름 로그 및 노드 내 공개 상태 사용 설정을 고려합니다. 점수 없음 L2 FLOW_LOGS_DISABLED
    6.6.2 VPC 기반 클러스터를 선호합니다. 점수 있음 L1 IP_ALIAS_DISABLED
    6.6.3 마스터 승인 네트워크가 사용 설정되어 있는지 확인합니다. 점수 있음 L1 MASTER_AUTHORIZED_NETWORKS_DISABLED
    6.6.4 비공개 엔드포인트는 사용 설정되고 공개 액세스는 중지된 상태로 클러스터가 생성되었는지 확인합니다. 점수 있음 L2 해당 없음
    6.6.5 클러스터가 비공개 노드로 생성되었는지 확인합니다. 점수 있음 L1 PRIVATE_CLUSTER_DISABLED
    6.6.6 GKE 워커 노드의 방화벽 사용을 고려합니다. 점수 없음 L1 해당 없음
    6.6.7 네트워크 정책이 사용 설정되어 있고 적절하게 설정되어 있는지 확인합니다. 점수 없음 L1 NETWORK_POLICY_DISABLED
    6.6.8 Google 관리형 SSL 인증서 사용을 고려합니다. 점수 없음 L2 해당 없음
    6.7 Logging
    6.7.1 Stackdriver Kubernetes Logging 및 Monitoring이 사용 설정되어 있는지 확인합니다. 점수 있음 L1 CLUSTER_LOGGING_DISABLEDCLUSTER_MONITORING_DISABLED
    6.7.2 Linux 감사 로깅 사용 설정을 고려합니다. 점수 없음 L2 해당 없음
    6.8 인증 및 승인
    6.8.1 정적 비밀번호를 사용하는 기본 인증이 중지되어 있는지 확인합니다. 점수 있음 L1 해당 없음
    6.8.2 클라이언트 인증서를 사용한 인증이 중지되어 있는지 확인합니다. 점수 있음 L1 해당 없음
    6.8.3 RBAC용 Google 그룹스로 Kubernetes RBAC 사용자 관리를 고려합니다. 점수 없음 L2 해당 없음
    6.8.4 기존 승인(ABAC)이 중지되어 있는지 확인합니다. 점수 있음 L1 LEGACY_AUTHORIZATION_ENABLED
    6.9 스토리지
    6.9.1 GKE 영구 디스크(PD)용 고객 관리 암호화 키(CMEK) 사용 설정을 고려합니다. 점수 없음 L1 해당 없음
    6.10 기타 클러스터 구성
    6.10.1 Kubernetes 웹 UI가 중지되어 있는지 확인합니다. 점수 있음 L1 WEB_UI_ENABLED
    6.10.2 알파 클러스터가 프로덕션 워크로드에 사용되지 않았는지 확인합니다. 점수 있음 L1 해당 없음
    6.10.3 Pod 보안 정책이 사용 설정되어 있고 적절하게 설정되어 있는지 확인합니다. 점수 없음 L1 POD_SECURITY_POLICY_DISABLED
    6.10.4 신뢰할 수 없는 워크로드 실행을 위해 GKE Sandbox를 고려합니다. 점수 없음 L2 해당 없음
    6.10.5 Binary Authorization 사용 설정과 적절한 정책 구성을 선호합니다. 점수 없음 L2 해당 없음
    6.10.6 Cloud Security Command Center(Cloud SCC) 사용 설정을 선호합니다. 점수 없음 L1 해당 없음

    다음 단계