다음을 통해 공유


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.9.0 권장 사항의 결과입니다. 결과는 AKS 1.27.x에서 AKS 1.29.x까지 적용할 수 있으며, 1.29.x는 2025년 3월에 지원이 종료됩니다.

보안 수준

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 이상으로 제한적으로 설정되어 있는지 확인합니다. 자동 레벨 1 해당 없음
1.1.2 API 서버 Pod 사양 파일 소유권이 root: root로 설정되어 있는지 확인합니다. 자동 레벨 1 해당 없음
1.1.3 컨트롤러 관리자 Pod 사양 파일 권한이 600 이상으로 제한적으로 설정되어 있는지 확인합니다. 자동 레벨 1 해당 없음
1.1.4 컨트롤러 관리자 Pod 사양 파일 소유권이 로 설정되어 있는지 확인합니다. root: root 자동 레벨 1 해당 없음
1.1.5 스케줄러 Pod 사양 파일 권한이 600 이상으로 제한적으로 설정되어 있는지 확인합니다. 자동 레벨 1 해당 없음
1.1.6 스케줄러 포드 사양 파일의 소유권이 root: root로 설정되어 있는지 확인합니다. 자동 레벨 1 해당 없음
1.1.7 etcd Pod 사양 파일 권한이 600 이상으로 제한적으로 설정되어 있는지 확인합니다. 자동 레벨 1 해당 없음
1.1.8 etcd Pod 사양 파일 소유권이 root: root로 설정되어 있는지 확인합니다. root: root 자동 레벨 1 해당 없음
1.1.9 컨테이너 네트워크 인터페이스 파일 권한이 600 이상으로 제한적으로 설정되어 있는지 확인합니다. 설명서 레벨 1 해당 없음
1.1.10 컨테이너 네트워크 인터페이스 파일 소유권이 로 설정되어 있는지 확인합니다. root: root 설명서 레벨 1 해당 없음
1.1.11 etcd 데이터 디렉터리 권한이 700개 이상으로 제한적으로 설정되어 있는지 확인합니다 자동 레벨 1 해당 없음
1.1.12 etcd 데이터 디렉터리 소유권이 로 설정되어 있는지 확인합니다. etcd:etcd 자동 레벨 1 해당 없음
1.1.13 admin.conf 파일 권한이 600 이상으로 제한적으로 설정되어 있는지 확인합니다. 자동 레벨 1 해당 없음
1.1.14 admin.conf 파일 소유권이 다음으로 설정되어 있는지 확인합니다. root: root 자동 레벨 1 해당 없음
1.1.15 scheduler.conf 파일 권한이 600 이상으로 제한적으로 설정되어 있는지 확인합니다. 자동 레벨 1 해당 없음
1.1.16 scheduler.conf 파일 소유권이 로 설정되어 있는지 확인합니다. root: root 자동 레벨 1 해당 없음
1.1.17 controller-manager.conf 파일 권한이 600 이상으로 제한적으로 설정되어 있는지 확인합니다. 자동 레벨 1 해당 없음
1.1.18 controller-manager.conf 파일 소유권이 다음으로 설정되어 있는지 확인합니다. root: root 자동 레벨 1 해당 없음
1.1.19 Kubernetes PKI 디렉터리 및 파일 소유권이 root: root로 설정되어 있는지 확인하십시오. 자동 레벨 1 해당 없음
1.1.20 Kubernetes PKI 인증서 파일 사용 권한이 600 이상으로 제한적으로 설정되어 있는지 확인합니다. 설명서 레벨 1 해당 없음
1.1.21 Kubernetes PKI 키 파일 권한이 600으로 설정되어 있는지 확인합니다 설명서 레벨 1 해당 없음
1.2 API 서버
1.2.1 --anonymous-auth 인수가 false로 설정되어 있는지 확인합니다 설명서 레벨 1 통과
1.2.2 매개 변수가 --token-auth-file 설정되지 않았는지 확인 자동 레벨 1 실패 동일한 컨트롤이 구현됨
1.2.3 --DenyServiceExternalIPs 설정되지 않았는지 확인 설명서 레벨 1 실패 동등한 컨트롤 구현
1.2.4 --kubelet-client-certificate--kubelet-client-key 인수와 인수가 적절하게 설정되어 있는지 확인합니다 자동 레벨 1 통과
1.2.5 --kubelet-certificate-authority 인수가 적절하게 설정되어 있는지 확인합니다 자동 레벨 1 실패
1.2.6 --authorization-mode 인수가 AlwaysAllow로 설정되지 않았는지 확인합니다. 자동 레벨 1 통과
1.2.7 --authorization-mode 인수에 Node가 포함되어 있는지 확인합니다 자동 레벨 1 통과
1.2.8 --authorization-mode 인수에 RBAC가 포함되어 있는지 확인합니다 자동 레벨 1 통과
1.2.9 허용 컨트롤 플러그인 EventRateLimit가 설정되어 있는지 확인합니다 설명서 레벨 1 실패 운영 영향
1.2.10 허용 제어 플러그 인 AlwaysAdmit가 설정되지 않았는지 확인합니다. 자동 레벨 1 통과
1.2.11 허용 컨트롤 플러그인 AlwaysPullImages가 설정되어 있는지 확인합니다 설명서 레벨 1 실패 운영 영향
1.2.12 허용 컨트롤 플러그인 ServiceAccount가 설정되어 있는지 확인합니다 자동 L2 실패 동일한 컨트롤이 구현됨
1.2.13 허용 컨트롤 플러그인 NamespaceLifecycle이 설정되어 있는지 확인합니다 자동 L2 통과
1.2.14 허용 컨트롤 플러그인 NodeRestriction이 설정되어 있는지 확인합니다 자동 L2 통과
1.2.15 --profiling 인수가 false로 설정되어 있는지 확인합니다 자동 레벨 1 통과
1.2.16 --audit-log-path 인수가 설정되어 있는지 확인합니다 자동 레벨 1 통과
1.2.17 --audit-log-maxage 인수가 30 또는 적절하게 설정되어 있는지 확인합니다 자동 레벨 1 해당 컨트롤
1.2.18 --audit-log-maxbackup 인수가 10 또는 적절하게 설정되어 있는지 확인합니다 자동 레벨 1 해당 컨트롤
1.2.19 --audit-log-maxsize 인수가 100 또는 적절하게 설정되어 있는지 확인합니다 자동 레벨 1 통과
1.2.20 --request-timeout 인수가 적절하게 설정되어 있는지 확인합니다 설명서 레벨 1 통과
1.2.21 --service-account-lookup 인수가 true로 설정되어 있는지 확인합니다 자동 레벨 1 통과
1.2.22 --service-account-key-file 인수가 적절하게 설정되어 있는지 확인합니다 자동 레벨 1 통과
1.2.23 --etcd-certfile--etcd-keyfile 인수와 인수가 적절하게 설정되어 있는지 확인합니다 자동 레벨 1 통과
1.2.24 --tls-cert-file--tls-private-key-file 인수와 인수가 적절하게 설정되어 있는지 확인합니다 자동 레벨 1 통과
1.2.25 --client-ca-file 인수가 적절하게 설정되어 있는지 확인합니다 자동 레벨 1 통과
1.2.26 --etcd-cafile 인수가 적절하게 설정되어 있는지 확인합니다 자동 레벨 1 통과
1.2.27 --encryption-provider-config 인수가 적절하게 설정되어 있는지 확인합니다 설명서 레벨 1 환경에 따라 다름
1.2.28 암호화 공급자가 적절하게 구성되었는지 확인합니다 설명서 레벨 1 환경에 따라 다름
1.2.29 API 서버가 강력한 암호화만 사용하는지 확인합니다 설명서 레벨 1 통과
1.3 컨트롤러 관리자
1.3.1 --terminated-pod-gc-threshold 인수가 적절하게 설정되어 있는지 확인합니다 설명서 레벨 1 통과
1.3.2 --profiling 인수가 false로 설정되어 있는지 확인합니다 자동 레벨 1 통과
1.3.3 --use-service-account-credentials 인수가 true로 설정되어 있는지 확인합니다 자동 레벨 1 통과
1.3.4 --service-account-private-key-file 인수가 적절하게 설정되어 있는지 확인합니다 자동 레벨 1 통과
1.3.5 --root-ca-file 인수가 적절하게 설정되어 있는지 확인합니다 자동 레벨 1 통과
1.3.6 RotateKubeletServerCertificate 인수가 true로 설정되어 있는지 확인합니다 자동 L2 통과
1.3.7 --bind-address 인수가 127.0.0.1로 설정되어 있는지 확인합니다 자동 레벨 1 해당 컨트롤
1.4 스케줄러
1.4.1 --profiling 인수가 false로 설정되어 있는지 확인합니다 자동 레벨 1 통과
1.4.2 --bind-address 인수가 127.0.0.1로 설정되어 있는지 확인합니다 자동 레벨 1 해당 컨트롤
2 etcd
2.1 --cert-file--key-file 인수와 인수가 적절하게 설정되어 있는지 확인합니다 자동 레벨 1 통과
2.2 --client-cert-auth 인수가 true로 설정되어 있는지 확인합니다 자동 레벨 1 통과
2.3 --auto-tls 인수가 true로 설정되지 않았는지 확인합니다. 자동 레벨 1 통과
2.4 --peer-cert-file--peer-key-file 인수와 인수가 적절하게 설정되어 있는지 확인합니다 자동 레벨 1 통과
2.5 --peer-client-cert-auth 인수가 true로 설정되어 있는지 확인합니다 자동 레벨 1 통과
2.6 --peer-auto-tls 인수가 true로 설정되지 않았는지 확인합니다. 자동 레벨 1 통과
2.7 고유한 인증 기관이 사용되는지 확인합니다. etcd 설명서 L2 통과
3 컨트롤 플레인 구성
3.1 인증 및 권한 부여
3.1.1 사용자에 대해 클라이언트 인증서 인증을 사용하면 안 됩니다. 설명서 레벨 1 통과
3.1.2 사용자에 대해 서비스 계정 토큰 인증을 사용하면 안 됩니다. 설명서 레벨 1 통과
3.1.3 부트스트랩 토큰 인증은 사용자에게 사용하면 안 됩니다. 설명서 레벨 1 통과
3.2 로깅
3.2.1 최소한의 감사 정책이 생성되었는지 확인합니다 설명서 레벨 1 통과
3.2.2 감사 정책이 주요 보안 문제를 다루는지 확인합니다 설명서 L2 통과
4 작업자 노드
4.1 작업자 노드 구성 파일
4.1.1 kubelet 서비스 파일 사용 권한이 600 이상으로 제한적으로 설정되어 있는지 확인합니다. 자동 레벨 1 통과
4.1.2 kubelet 서비스 파일 소유권이 로 설정되어 있는지 확인합니다. root: root 자동 레벨 1 통과
4.1.3 프록시 kubeconfig 파일이 있는 경우 사용 권한이 600 이상으로 제한적으로 설정되어 있는지 확인합니다. 설명서 레벨 1 해당 없음
4.1.4 프록시 kubeconfig 파일이 있는 경우 소유권이 로 설정되어 있는지 확인합니다. root: root 설명서 레벨 1 해당 없음
4.1.5 --kubeconfig kubelet.conf 파일 권한이 600 이상으로 제한적으로 설정되어 있는지 확인합니다. 자동 레벨 1 통과
4.1.6 --kubeconfig kubelet.conf 파일 소유권이 다음으로 설정되어 있는지 확인합니다.root: root 자동 레벨 1 통과
4.1.7 인증 기관 파일 사용 권한이 600 이상으로 제한적으로 설정되어 있는지 확인합니다. 설명서 레벨 1 통과
4.1.8 클라이언트 인증 기관 파일 소유권이 로 설정되어 있는지 확인합니다. root: root 설명서 레벨 1 통과
4.1.9 kubelet config.yaml 구성 파일을 사용하는 경우 사용 권한이 600 이상으로 제한적으로 설정되어 있는지 확인합니다. 자동 레벨 1 통과
4.1.10 kubelet config.yaml 구성 파일을 사용하는 경우 파일 소유권이 로 설정되어 있는지 확인합니다. root: root 자동 레벨 1 통과
4.2 Kubelet
4.2.1 --anonymous-auth 인수가 false로 설정되어 있는지 확인합니다 자동 레벨 1 통과
4.2.2 --authorization-mode 인수가 AlwaysAllow로 설정되지 않았는지 확인합니다. 자동 레벨 1 통과
4.2.3 --client-ca-file 인수가 적절하게 설정되어 있는지 확인합니다 자동 레벨 1 통과
4.2.4 --read-only-port 인수가 0으로 설정되어 있는지 확인합니다 설명서 레벨 1 통과
4.2.5 인수가 --streaming-connection-idle-timeout 0으로 설정되지 않았는지 확인합니다. 설명서 레벨 1 통과
4.2.6 --make-iptables-util-chains 인수가 true로 설정되어 있는지 확인합니다 자동 레벨 1 통과
4.2.7 인수가 --hostname-override 설정되지 않았는지 확인합니다. 설명서 레벨 1 통과
4.2.8 인수가 --eventRecordQPS 적절한 이벤트 캡처를 보장하는 수준으로 설정되어 있는지 확인합니다. 설명서 L2 통과
4.2.9 --tls-cert-file--tls-private-key-file 인수와 인수가 적절하게 설정되어 있는지 확인합니다 설명서 레벨 1 통과
4.2.10 인수가 false로 --rotate-certificates 설정되지 않았는지 확인합니다. 자동 레벨 1 통과
4.2.11 RotateKubeletServerCertificate 인수가 true로 설정되어 있는지 확인합니다. 설명서 레벨 1 실패
4.2.12 Kubelet이 강력한 암호화만 사용하는지 확인합니다 설명서 레벨 1 통과
4.2.13 Pod PID에 제한이 설정되어 있는지 확인합니다. 설명서 레벨 1 통과
4.3 kube-proxy
4.3.1 kube-proxy 메트릭 서비스가 localhost에 바인딩되어 있는지 확인합니다. 자동 레벨 1 실패 운영 영향
5 정책
5.1 RBAC 및 서비스 계정
5.1.1 필요한 경우에만 클러스터 관리자 역할이 사용되는지 확인합니다 자동 레벨 1 환경에 따라 다름
5.1.2 비밀에 대한 액세스 최소화합니다 자동 레벨 1 환경에 따라 다름
5.1.3 역할 및 ClusterRoles에서 와일드카드 사용을 최소화합니다 자동 레벨 1 환경에 따라 다름
5.1.4 Pod 만들기에 대한 액세스를 최소화합니다 자동 레벨 1 환경에 따라 다름
5.1.5 기본 서비스 계정이 적극적으로 사용되지 않는지 확인합니다. 자동 레벨 1 환경에 따라 다름
5.1.6 서비스 계정 토큰이 필요한 경우에만 탑재되었는지 확인합니다 자동 레벨 1 환경에 따라 다름
5.1.7 시스템 사용 방지: 마스터 그룹 설명서 레벨 1 환경에 따라 다름
5.1.8 Kubernetes 클러스터에서 바인딩, 가장 및 에스컬레이션 권한의 사용 제한 설명서 레벨 1 환경에 따라 다름
5.1.9 영구 볼륨을 만들기 위한 액세스 최소화 설명서 레벨 1 환경에 따라 다름
5.1.10 노드의 프록시 하위 리소스에 대한 액세스 최소화 설명서 레벨 1 환경에 따라 다름
5.1.11 certificatesigningrequests 객체의 승인 하위 리소스에 대한 액세스를 최소화하십시오. 설명서 레벨 1 환경에 따라 다름
5.1.12 웹후크 구성 개체에 대한 액세스 최소화 설명서 레벨 1 환경에 따라 다름
5.1.13 서비스 계정 토큰 만들기에 대한 액세스 최소화 설명서 레벨 1 환경에 따라 다름
5.2 Pod 보안 표준
5.2.1 클러스터에 하나 이상의 활성 정책 제어 메커니즘이 있는지 확인합니다. 설명서 레벨 1 환경에 따라 다름
5.2.2 권한 있는 컨테이너의 허용을 최소화합니다 설명서 레벨 1 환경에 따라 다름
5.2.3 호스트 프로세스 ID 네임스페이스를 공유하려는 컨테이너의 허용을 최소화합니다 설명서 레벨 1 환경에 따라 다름
5.2.4 호스트 IPC 네임스페이스를 공유하려는 컨테이너의 허용을 최소화합니다 설명서 레벨 1 환경에 따라 다름
5.2.5 호스트 네트워크 네임스페이스를 공유하려는 컨테이너의 허용을 최소화합니다 설명서 레벨 1 환경에 따라 다름
5.2.6 allowPrivilegeEscalation을 사용하여 컨테이너의 허용을 최소화합니다 설명서 레벨 1 환경에 따라 다름
5.2.7 루트 컨테이너의 허용을 최소화합니다 설명서 L2 환경에 따라 다름
5.2.8 NET_RAW 기능을 사용하여 컨테이너의 허용을 최소화합니다 설명서 레벨 1 환경에 따라 다름
5.2.9 추가된 기능을 사용하여 컨테이너의 허용을 최소화합니다 설명서 레벨 1 환경에 따라 다름
5.2.10 기능이 할당된 컨테이너의 허용을 최소화합니다 설명서 L2 환경에 따라 다름
5.2.11 Windows HostProcess 컨테이너 허용 최소화 설명서 레벨 1 환경에 따라 다름
5.2.12 HostPath 볼륨 허용 최소화 설명서 레벨 1 환경에 따라 다름
5.2.13 HostPorts를 사용하는 컨테이너의 허용 최소화 설명서 레벨 1 환경에 따라 다름
5.3 네트워크 정책 및 CNI
5.3.1 사용 중인 CNI가 네트워크 정책을 지원하는지 확인합니다 설명서 레벨 1 통과
5.3.2 모든 네임스페이스에 네트워크 정책이 정의되었는지 확인합니다 설명서 L2 환경에 따라 다름
5.4 비밀 관리
5.4.1 비밀을 환경 변수로 사용하는 것보다 비밀을 파일로 사용하는 것이 좋습니다 설명서 L2 환경에 따라 다름
5.4.2 외부 비밀 스토리지를 고려합니다 설명서 L2 환경에 따라 다름
5.5 확장 가능한 허용 제어
5.5.1 ImagePolicyWebhook 허용 컨트롤러를 사용하여 이미지 출처를 구성합니다 설명서 L2 실패 동일한 컨트롤이 구현됨
5.6 일반 정책
5.6.1 네임스페이스를 사용하여 리소스 간에 관리 경계를 만듭니다 설명서 레벨 1 환경에 따라 다름
5.6.2 seccomp 프로필이 Pod 정의에서 docker/default로 설정되어 있는지 확인합니다 설명서 L2 환경에 따라 다름
5.6.3 Pod 및 컨테이너에 보안 컨텍스트를 적용합니다 설명서 L2 환경에 따라 다름
5.6.4 기본 네임스페이스를 사용하면 안 됩니다. 설명서 L2 환경에 따라 다름

참고 항목

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

기타 참고 사항

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

다음 단계

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