다음을 통해 공유


CIS(인터넷 보안 센터) Kubernetes 벤치마크

보안 서비스인 AKS(Azure Kubernetes Service)는 SOC, ISO, PCI DSS 및 HIPAA 표준을 준수합니다. 이 문서에서는 CIS Kubernetes 벤치마크를 기반으로 AKS에 적용되는 보안 강화에 대해 설명합니다. AKS 보안에 대한 자세한 내용은 AKS(Azure Kubernetes Service)의 애플리케이션 및 클러스터에 대한 보안 개념을 참조하세요. CIS 벤치마크에 대한 자세한 내용은 CIS(인터넷 보안 센터) 벤치마크를 참조하세요.

Kubernetes CIS 벤치마크

다음은 AKS에 대한 CIS Kubernetes V1.27 벤치마크 v1.8.0 권장 사항의 결과입니다. 결과는 AKS 1.21.x~AKS 1.27.x에 적용할 수 있습니다.

점수가 매겨진 권장 사항은 적용되지 않은 경우 벤치마크 점수에 영향을 주지만 점수가 매겨지지 않은 권장 사항은 영향을 주지 않습니다.

CIS 벤치마크는 다음 두 가지 수준의 보안 설정을 제공합니다.

  • L1 또는 수준 1은 모든 시스템에서 구성할 수 있는 필수 기본 보안 요구 사항을 권장하며 서비스 중단 또는 기능 감소를 거의 또는 전혀 유발하지 않아야 합니다.
  • L2 또는 수준 2는 일부 기능이 저하될 수 있는 더 큰 보안이 필요한 환경에 대한 보안 설정을 권장합니다.

권장 사항은 다음 상태 중 하나를 가질 수 있습니다.

  • 패스 - 권장 사항이 적용되었습니다.
  • 실패 - 권장 사항이 적용되지 않았습니다.
  • 해당 없음 - 권장 사항은 AKS와 관련이 없는 매니페스트 파일 권한 요구 사항과 관련이 있습니다. Kubernetes 클러스터는 기본값으로 매니페스트 모델을 사용하여 노드 VM의 파일을 사용하는 컨트롤 플레인 Pod를 배포합니다. CIS Kubernetes 벤치마크는 이러한 파일에 특정 사용 권한 요구 사항이 있어야 한다고 권장합니다. AKS 클러스터는 Helm 차트를 사용하여 컨트롤 플레인 Pod를 배포하고 노드 VM의 파일에 의존하지 않습니다.
  • 환경에 따라 다름 - 권장 사항은 사용자의 특정 환경에 적용되며 AKS에서 제어되지 않습니다. 점수가 매겨진 권장 사항은 권장 사항이 사용자의 특정 환경에 적용되는지 여부에 관계없이 벤치마크 점수에 영향을 줍니다.
  • 해당 컨트롤 - 권장 사항이 다른 동등한 방식으로 구현되었습니다.
CIS ID 권장 사항 설명 채점 형식 수준 상태
1 컨트롤 플레인 구성 요소
1.1 컨트롤 플레인 노드 구성 파일
1.1.1 API 서버 Pod 사양 파일 권한이 600 이상으로 제한적으로 설정되어 있는지 확인합니다. 점수가 매겨짐 L1 해당 없음
1.1.2 API 서버 Pod 사양 파일 소유권이 root:root로 설정되어 있는지 확인합니다 점수가 매겨짐 L1 해당 없음
1.1.3 컨트롤러 관리자 Pod 사양 파일 권한이 600 이상으로 제한적으로 설정되어 있는지 확인합니다. 점수가 매겨짐 L1 해당 없음
1.1.4 컨트롤러 관리자 Pod 사양 파일 소유권이 root:root로 설정되어 있는지 확인합니다 점수가 매겨짐 L1 해당 없음
1.1.5 스케줄러 Pod 사양 파일 권한이 600 이상으로 제한적으로 설정되어 있는지 확인합니다. 점수가 매겨짐 L1 해당 없음
1.1.6 스케줄러 Pod 사양 파일 소유권이 root:root로 설정되어 있는지 확인합니다 점수가 매겨짐 L1 해당 없음
1.1.7 etcd Pod 사양 파일 권한이 600 이상으로 제한적으로 설정되어 있는지 확인합니다. 점수가 매겨짐 L1 해당 없음
1.1.8 etcd Pod 사양 파일 소유권이 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 admin.conf 파일 권한이 600 이상으로 제한적으로 설정되어 있는지 확인합니다. 점수가 매겨짐 L1 해당 없음
1.1.14 admin.conf 파일 소유권이 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 인수에 Node가 포함되어 있는지 확인합니다 점수가 매겨짐 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 Scheduler
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.1.2 사용자에 대해 서비스 계정 토큰 인증을 사용하면 안 됩니다 점수가 지정되지 않음 L2 통과
3.1.3 사용자에 대해 Bootstrap 토큰 인증을 사용하면 안 됩니다 점수가 지정되지 않음 L2 통과
3.2 로깅
3.2.1 최소한의 감사 정책이 생성되었는지 확인합니다 점수가 매겨짐 L1 통과
3.2.2 감사 정책이 주요 보안 문제를 다루는지 확인합니다 점수가 지정되지 않음 L2 통과
4 작업자 노드
4.1 작업자 노드 구성 파일
4.1.1 kubelet 서비스 파일 사용 권한이 600 이상으로 제한적으로 설정되어 있는지 확인합니다. 점수가 매겨짐 L1 통과
4.1.2 kubelet 서비스 파일 소유권이 root:root로 설정되어 있는지 확인합니다 점수가 매겨짐 L1 통과
4.1.3 프록시 kubeconfig 파일이 있는 경우 사용 권한이 600 이상으로 제한적으로 설정되어 있는지 확인합니다. 점수가 매겨짐 L1 해당 없음
4.1.4 프록시 kubeconfig 파일이 있는 경우 소유권이 root:root로 설정되어 있는지 확인합니다. 점수가 매겨짐 L1 해당 없음
4.1.5 --kubeconfig kubelet.conf 파일 권한이 600 이상으로 제한적으로 설정되어 있는지 확인합니다. 점수가 매겨짐 L1 통과
4.1.6 --kubeconfig kubelet.conf 파일 소유권이 root:root로 설정되어 있는지 확인합니다. 점수가 매겨짐 L1 통과
4.1.7 인증 기관 파일 사용 권한이 600 이상으로 제한적으로 설정되어 있는지 확인합니다. 점수가 매겨짐 L1 통과
4.1.8 클라이언트 인증 기관 파일 소유권이 root:root로 설정되어 있는지 확인합니다 점수가 매겨짐 L1 통과
4.1.9 kubelet config.yaml 구성 파일을 사용하는 경우 사용 권한이 600 이상으로 제한적으로 설정되어 있는지 확인합니다. 점수가 매겨짐 L1 통과
4.1.10 kubelet config.yaml 구성 파일을 사용하는 경우 파일 소유권이 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 eventRecordQPS 인수가 적절한 이벤트 캡처를 보장하는 수준으로 설정되어 있는지 확인합니다. 점수가 지정되지 않음 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 필요한 경우에만 클러스터 관리자 역할이 사용되는지 확인합니다 점수가 지정되지 않음 L1 환경에 따라 다름
5.1.2 비밀에 대한 액세스 최소화합니다 점수가 지정되지 않음 L1 환경에 따라 다름
5.1.3 역할 및 ClusterRoles에서 와일드카드 사용을 최소화합니다 점수가 지정되지 않음 L1 환경에 따라 다름
5.1.4 Pod 만들기에 대한 액세스를 최소화합니다 점수가 지정되지 않음 L1 환경에 따라 다름
5.1.5 기본 서비스 계정이 적극적으로 사용되지 않는지 확인합니다 점수가 매겨짐 L1 환경에 따라 다름
5.1.6 서비스 계정 토큰이 필요한 경우에만 탑재되었는지 확인합니다 점수가 지정되지 않음 L1 환경에 따라 다름
5.1.7 system:masters 그룹 사용 방지 점수가 지정되지 않음 L1 환경에 따라 다름
5.1.8 Kubernetes 클러스터에서 바인딩, 가장 및 에스컬레이션 권한의 사용 제한 점수가 지정되지 않음 L1 환경에 따라 다름
5.1.9 영구 볼륨을 만들기 위한 액세스 최소화 점수가 지정되지 않음 L1 환경에 따라 다름
5.1.10 노드의 프록시 하위 리소스에 대한 액세스 최소화 점수가 지정되지 않음 L1 환경에 따라 다름
5.1.11 certificatesigningrequests 개체의 승인 하위 리소스에 대한 액세스 최소화 점수가 지정되지 않음 L1 환경에 따라 다름
5.1.12 웹후크 구성 개체에 대한 액세스 최소화 점수가 지정되지 않음 L1 환경에 따라 다름
5.1.13 서비스 계정 토큰 만들기에 대한 액세스 최소화 점수가 지정되지 않음 L1 환경에 따라 다름
5.2 Pod 보안 정책
5.2.1 클러스터에 하나 이상의 활성 정책 제어 메커니즘이 있는지 확인합니다. 점수가 지정되지 않음 L1 환경에 따라 다름
5.2.2 권한 있는 컨테이너의 허용을 최소화합니다 점수가 지정되지 않음 L1 환경에 따라 다름
5.2.3 호스트 프로세스 ID 네임스페이스를 공유하려는 컨테이너의 허용을 최소화합니다 점수가 매겨짐 L1 환경에 따라 다름
5.2.4 호스트 IPC 네임스페이스를 공유하려는 컨테이너의 허용을 최소화합니다 점수가 매겨짐 L1 환경에 따라 다름
5.2.5 호스트 네트워크 네임스페이스를 공유하려는 컨테이너의 허용을 최소화합니다 점수가 매겨짐 L1 환경에 따라 다름
5.2.6 allowPrivilegeEscalation을 사용하여 컨테이너의 허용을 최소화합니다 점수가 매겨짐 L1 환경에 따라 다름
5.2.6 루트 컨테이너의 허용을 최소화합니다 점수가 지정되지 않음 L2 환경에 따라 다름
5.2.7 NET_RAW 기능을 사용하여 컨테이너의 허용을 최소화합니다 점수가 지정되지 않음 L1 환경에 따라 다름
5.2.8 추가된 기능을 사용하여 컨테이너의 허용을 최소화합니다 점수가 지정되지 않음 L1 환경에 따라 다름
5.2.9 기능이 할당된 컨테이너의 허용을 최소화합니다 점수가 지정되지 않음 L1 환경에 따라 다름
5.2.10 기능이 할당된 컨테이너의 허용을 최소화합니다 점수가 지정되지 않음 L2
5.2.11 Windows HostProcess 컨테이너 허용 최소화 점수가 지정되지 않음 L1 환경에 따라 다름
5.2.12 HostPath 볼륨 허용 최소화 점수가 지정되지 않음 L1 환경에 따라 다름
5.2.13 HostPorts를 사용하는 컨테이너의 허용 최소화 점수가 지정되지 않음 L1 환경에 따라 다름
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.7 일반 정책
5.7.1 네임스페이스를 사용하여 리소스 간에 관리 경계를 만듭니다 점수가 지정되지 않음 L1 환경에 따라 다름
5.7.2 seccomp 프로필이 Pod 정의에서 docker/default로 설정되어 있는지 확인합니다 점수가 지정되지 않음 L2 환경에 따라 다름
5.7.3 Pod 및 컨테이너에 보안 컨텍스트를 적용합니다 점수가 지정되지 않음 L2 환경에 따라 다름
5.7.4 기본값 네임스페이스를 사용하면 안 됩니다 점수가 매겨짐 L2 환경에 따라 다름

참고 항목

Kubernetes CIS 벤치마크 외에도 AKS CIS 벤치마크도 사용할 수 있습니다.

추가 참고 사항

  • 보안 강화 OS는 AKS에 대해 특별히 구축 및 유지 관리되며 AKS 플랫폼 밖에서는 지원되지 않습니다.
  • 공격 노출 영역을 더 줄이기 위해 일부 불필요한 커널 모듈 드라이버는 OS에서 사용하지 않도록 설정되었습니다.

다음 단계

AKS 보안에 대한 자세한 내용은 다음 문서를 참조하세요.