CKS — Understanding CIS Benchmarks

13 minute read

Exam Context

Property Value
Domain Domain 1 — Cluster Setup
Weight 10%
Objective Use CIS benchmark to review the security configuration of Kubernetes components

Before you can fix security misconfigurations, you need to understand what you’re measuring against. CIS Kubernetes Benchmarks are the authoritative reference — and the CKS exam expects you to know how they’re structured, what they check, and why each check matters.

What Are CIS Kubernetes Benchmarks?

The Center for Internet Security (CIS) publishes consensus-based security configuration guidelines for dozens of platforms, including Kubernetes. The CIS Kubernetes Benchmark is a document that defines hundreds of security checks organized by component.

Each check specifies:

  • What to verify (a configuration flag, file permission, or setting)
  • Why it matters (the security risk of the misconfiguration)
  • How to check it (the exact command to run)
  • How to fix it (the remediation step)

CKS perspective: The exam doesn’t expect you to memorize every CIS benchmark ID. But you must understand the structure, know what the major checks cover, and be able to fix common failures.

Who Publishes the Benchmark?

Property Details
Publisher Center for Internet Security (CIS)
Document CIS Kubernetes Benchmark
Format PDF, typically 200+ pages
Access Free download from cisecurity.org
Update cadence New version for each major Kubernetes release
Automation tool kube-bench (Aqua Security)

CIS Benchmark vs Kubernetes Hardening Guide

Don’t confuse the CIS Benchmark with the NSA/CISA Kubernetes Hardening Guide. They’re complementary but different:

Aspect CIS Benchmark NSA/CISA Hardening Guide
Publisher Center for Internet Security NSA & CISA (U.S. government)
Level of detail Specific checks with exact commands High-level hardening recommendations
Automation kube-bench No standard automation tool
CKS relevance Directly tested (kube-bench) Background knowledge

Benchmark Levels

CIS benchmarks define two levels of security controls. Understanding this distinction is critical for prioritizing remediation.

Level 1 — Essential Security

Level 1 checks represent the minimum security baseline that every Kubernetes cluster should meet. These checks:

  • Are practical and achievable on any cluster
  • Have minimal impact on cluster functionality
  • Address the most critical security risks
  • Should never be skipped, even in development environments

Examples of Level 1 checks:

Check ID Description Component
1.2.1 Ensure --anonymous-auth is set to false API Server
1.2.6 Ensure --authorization-mode includes RBAC API Server
4.2.1 Ensure --anonymous-auth is set to false on kubelet Kubelet
4.2.6 Ensure --protect-kernel-defaults is set to true Kubelet

Level 2 — Defense in Depth

Level 2 checks represent stronger security controls that provide defense in depth. These checks:

  • May require more planning to implement
  • Can affect cluster operations or performance
  • Are recommended for production and compliance-sensitive environments
  • Build on top of Level 1 controls

Examples of Level 2 checks:

Check ID Description Component
1.2.10 Ensure --enable-admission-plugins includes EventRateLimit API Server
1.2.22 Ensure --audit-log-maxage is set to 30 or as appropriate API Server
1.3.2 Ensure --profiling is set to false on controller-manager Controller Manager
4.2.13 Ensure TLS cipher suites are configured Kubelet

When to Use Which Level

Environment Recommended Level Rationale
Development/Testing Level 1 Essential security without operational overhead
Staging Level 1 + selected Level 2 Test Level 2 controls before production
Production Level 1 + Level 2 Full security posture
Compliance (SOC2, PCI-DSS) Level 1 + Level 2 mandatory Regulatory requirements demand both levels

Scored vs Not-Scored Checks

Every CIS benchmark check is categorized as either Scored or Not Scored. This distinction matters for compliance reporting.

Scored Checks

  • Must pass for the cluster to meet the benchmark requirements
  • Directly affect compliance scoring
  • Have clear, verifiable pass/fail criteria
  • Represent security controls with measurable configuration states

Not-Scored Checks

  • Are advisory recommendations
  • Do not affect the compliance score
  • May require organizational context to evaluate
  • Often cover operational practices rather than specific configuration flags

Breakdown by Category

Category Scored Not Scored Typical Focus
Control Plane ~40 checks ~10 checks Flags, file permissions
Worker Node ~20 checks ~5 checks Kubelet config, file permissions
Policies ~10 checks ~15 checks RBAC, Pod Security, NetworkPolicy (advisory)

CKS exam tip: The exam focuses on scored checks — specifically the ones that fail. You’ll need to identify failures and fix them. Not-scored checks are background knowledge.

CIS Benchmark Sections

The CIS Kubernetes Benchmark is organized into major sections that map directly to cluster components.

Section 1: Control Plane Components

This is the largest section, covering all master node components.

1.1 — Control Plane Node Configuration Files

Checks file ownership and permissions for critical configuration files:

1.1.1  Ensure that the API server pod specification file permissions are set to 600 or more restrictive
1.1.2  Ensure that the API server pod specification file ownership is set to root:root
1.1.3  Ensure that the controller manager pod specification file permissions are set to 600 or more restrictive
1.1.4  Ensure that the controller manager pod specification file ownership is set to root:root
1.1.5  Ensure that the scheduler pod specification file permissions are set to 600 or more restrictive
1.1.6  Ensure that the scheduler pod specification file ownership is set to root:root
1.1.7  Ensure that the etcd pod specification file permissions are set to 600 or more restrictive
1.1.8  Ensure that the etcd pod specification file ownership is set to root:root

Verification example:

# Check API server manifest permissions
stat -c %a /etc/kubernetes/manifests/kube-apiserver.yaml
# Expected: 600 or 644 (depending on benchmark version)

# Check ownership
stat -c %U:%G /etc/kubernetes/manifests/kube-apiserver.yaml
# Expected: root:root

1.2 — API Server

The most critical subsection — API server flags that control authentication, authorization, and audit:

1.2.1   Ensure that the --anonymous-auth argument is set to false
1.2.2   Ensure that the --token-auth-file parameter is not set
1.2.3   Ensure that the --DenyServiceExternalIPs is not set
1.2.6   Ensure that the --authorization-mode argument is not set to AlwaysAllow
1.2.7   Ensure that the --authorization-mode argument includes Node
1.2.8   Ensure that the --authorization-mode argument includes RBAC
1.2.10  Ensure that the admission control plugin EventRateLimit is set
1.2.12  Ensure that the admission control plugin AlwaysPullImages is set
1.2.13  Ensure that the admission control plugin SecurityContextDeny is set
1.2.16  Ensure that the --profiling argument is set to false
1.2.19  Ensure that the --audit-log-path argument is set
1.2.20  Ensure that the --audit-log-maxage argument is set to 30 or as appropriate
1.2.21  Ensure that the --audit-log-maxbackup argument is set to 10 or as appropriate
1.2.22  Ensure that the --audit-log-maxsize argument is set to 100 or as appropriate

1.3 — Controller Manager

1.3.1  Ensure that the --terminated-pod-gc-threshold argument is set as appropriate
1.3.2  Ensure that the --profiling argument is set to false
1.3.3  Ensure that the --use-service-account-credentials argument is set to true
1.3.4  Ensure that the --service-account-private-key-file argument is set as appropriate
1.3.5  Ensure that the --root-ca-file argument is set as appropriate
1.3.6  Ensure that the RotateKubeletServerCertificate argument is set to true
1.3.7  Ensure that the --bind-address argument is set to 127.0.0.1

1.4 — Scheduler

1.4.1  Ensure that the --profiling argument is set to false
1.4.2  Ensure that the --bind-address argument is set to 127.0.0.1

Section 2: etcd

Dedicated section for etcd security:

2.1  Ensure that the --cert-file and --key-file arguments are set as appropriate
2.2  Ensure that the --client-cert-auth argument is set to true
2.3  Ensure that the --auto-tls argument is not set to true
2.4  Ensure that the --peer-cert-file and --peer-key-file arguments are set as appropriate
2.5  Ensure that the --peer-client-cert-auth argument is set to true
2.6  Ensure that the --peer-auto-tls argument is not set to true
2.7  Ensure that a unique Certificate Authority is used for etcd

Section 3: Control Plane Configuration

Covers authentication and authorization policies:

3.1.1  Client certificate authentication should not be used for users
3.2.1  Ensure that a minimal audit policy is created
3.2.2  Ensure that the audit policy covers key security concerns

Section 4: Worker Nodes

4.1 — Worker Node Configuration Files

4.1.1  Ensure that the kubelet service file permissions are set to 600 or more restrictive
4.1.2  Ensure that the kubelet service file ownership is set to root:root
4.1.5  Ensure that the --kubeconfig kubelet.conf file permissions are set to 600 or more restrictive
4.1.6  Ensure that the --kubeconfig kubelet.conf file ownership is set to root:root
4.1.9  If the kubelet config.yaml configuration file is being used, validate permissions are set to 600 or more restrictive
4.1.10 If the kubelet config.yaml configuration file is being used, ensure ownership is set to root:root

4.2 — Kubelet

4.2.1   Ensure that the --anonymous-auth argument is set to false
4.2.2   Ensure that the --authorization-mode argument is not set to AlwaysAllow
4.2.3   Ensure that the --client-ca-file argument is set as appropriate
4.2.4   Ensure that the --read-only-port argument is set to 0
4.2.6   Ensure that the --protect-kernel-defaults argument is set to true
4.2.7   Ensure that the --make-iptables-util-chains argument is set to true
4.2.10  Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate
4.2.11  Ensure that the --rotate-certificates argument is not set to false
4.2.12  Verify that the RotateKubeletServerCertificate argument is set to true
4.2.13  Ensure that the Kubelet only makes use of Strong Cryptographic Ciphers

Section 5: Policies

5.1.1  Ensure that the cluster-admin role is only used where required
5.1.2  Minimize access to secrets
5.1.3  Minimize wildcard use in Roles and ClusterRoles
5.1.5  Ensure that default service accounts are not actively used
5.2.1  Ensure that the cluster has at least one active policy control mechanism in place
5.2.2  Minimize the admission of privileged containers
5.2.3  Minimize the admission of containers wishing to share the host process ID namespace
5.2.4  Minimize the admission of containers wishing to share the host IPC namespace
5.2.5  Minimize the admission of containers wishing to share the host network namespace

Benchmark Version Mapping

CIS releases a new benchmark version for each major Kubernetes release. Using the wrong benchmark version will produce inaccurate results.

CIS Benchmark Version Kubernetes Version Release Date
CIS Benchmark v1.8 Kubernetes 1.27 2023
CIS Benchmark v1.9 Kubernetes 1.28-1.29 2024
CIS Benchmark v1.10 Kubernetes 1.30-1.31 2024
CIS Benchmark v1.11 Kubernetes 1.32 2025

How kube-bench handles versions:

# kube-bench auto-detects the Kubernetes version
kube-bench run

# Force a specific benchmark version
kube-bench run --benchmark cis-1.9

# Check which version kube-bench detected
kube-bench version

CKS exam tip: The exam environment uses a specific Kubernetes version, and kube-bench auto-detects it. You won’t need to specify the benchmark version manually, but understanding the mapping helps you cross-reference the CIS PDF.

Security Impact: Compliance Requirements

CIS benchmarks aren’t just academic exercises — they’re a compliance requirement in many regulated industries.

Compliance Framework Mapping

Compliance Framework CIS Benchmark Requirement Level
SOC 2 Type II Infrastructure security controls must be documented and verified Level 1 + Level 2
PCI-DSS v4.0 Container security benchmarks required for cardholder data environments Level 1 + Level 2
HIPAA Technical safeguards for electronic protected health information Level 1 minimum
ISO 27001 Annex A.12 — Operations security — system hardening Level 1 + Level 2
FedRAMP NIST 800-53 controls mapped to CIS benchmarks Level 1 + Level 2

Audit Evidence

kube-bench output serves as audit evidence for compliance assessments:

# Generate JSON output for compliance tools
kube-bench run --json > cis-benchmark-$(date +%Y%m%d).json

# Generate human-readable report
kube-bench run > cis-benchmark-report-$(date +%Y%m%d).txt

Compliance teams expect:

  1. Baseline scan — Initial benchmark results when the cluster is provisioned
  2. Remediation evidence — Before/after scans showing failures were fixed
  3. Recurring scans — Scheduled kube-bench runs (weekly or per-deployment)
  4. Exception documentation — Justification for any accepted WARN or FAIL results

Example Benchmark Items in Detail

Let’s examine three representative benchmark items to understand the depth of each check.

Example 1: Check 1.2.1 — Anonymous Authentication

Field Value
ID 1.2.1
Description Ensure that the --anonymous-auth argument is set to false
Level 1 (Scored)
Component API Server
Risk Anonymous requests bypass all authentication; any network-adjacent attacker can query the API

Audit:

# Check the API server process for the flag
ps -ef | grep kube-apiserver | grep anonymous-auth

# Or check the static Pod manifest
cat /etc/kubernetes/manifests/kube-apiserver.yaml | grep anonymous-auth

Remediation:

# In /etc/kubernetes/manifests/kube-apiserver.yaml
spec:
  containers:
  - command:
    - kube-apiserver
    - --anonymous-auth=false    # Add or modify this flag

Example 2: Check 2.2 — etcd Client Certificate Auth

Field Value
ID 2.2
Description Ensure that the --client-cert-auth argument is set to true
Level 1 (Scored)
Component etcd
Risk Without client certificate authentication, any client can connect to etcd and read/write all cluster state

Audit:

ps -ef | grep etcd | grep client-cert-auth

Remediation:

# In /etc/kubernetes/manifests/etcd.yaml
spec:
  containers:
  - command:
    - etcd
    - --client-cert-auth=true    # Add or modify this flag

Example 3: Check 4.2.1 — Kubelet Anonymous Auth

Field Value
ID 4.2.1
Description Ensure that the --anonymous-auth argument is set to false
Level 1 (Scored)
Component Kubelet
Risk Anonymous kubelet access allows unauthenticated reads of Pod status, node metrics, and potentially exec into containers

Audit:

# Check kubelet process
ps -ef | grep kubelet | grep anonymous-auth

# Or check kubelet config
cat /var/lib/kubelet/config.yaml | grep -A2 authentication

Remediation (in kubelet config.yaml):

# In /var/lib/kubelet/config.yaml
authentication:
  anonymous:
    enabled: false
  webhook:
    enabled: true

Then restart kubelet:

sudo systemctl restart kubelet

Key Takeaways

  1. CIS benchmarks are the standard — They define what a secure Kubernetes cluster looks like
  2. Levels matter — Level 1 is mandatory; Level 2 is for defense in depth
  3. Scored checks are exam-relevant — Focus your remediation on scored FAIL results
  4. Version matching is critical — Use the benchmark version that matches your Kubernetes version
  5. The CKS exam tests application — You need to run kube-bench and fix failures, not recite benchmark IDs

Practice Questions

Q1: What organization publishes the CIS Kubernetes Benchmark?

Show Answer

The Center for Internet Security (CIS) publishes the CIS Kubernetes Benchmark. It is a consensus-based security configuration guide developed by security practitioners and Kubernetes experts. The document is freely available from cisecurity.org.


Q2: What is the difference between Level 1 and Level 2 CIS benchmark checks?

Show Answer

Level 1 checks are essential security controls with minimal operational impact — they represent the baseline that every cluster should meet. Level 2 checks provide defense-in-depth and may affect cluster operations or performance. Level 2 builds on Level 1 and is recommended for production and compliance-sensitive environments.

Key distinction: Level 1 = “must have for any cluster,” Level 2 = “should have for production/compliance.”


Q3: Explain the difference between Scored and Not Scored CIS benchmark checks. Which is more relevant for the CKS exam?

Show Answer

Scored checks have clear pass/fail criteria and directly affect the compliance score — they must pass for the cluster to meet benchmark requirements. Not Scored checks are advisory recommendations that don’t affect the score and may require organizational context to evaluate.

For the CKS exam, scored checks are more relevant because the exam tasks involve identifying and fixing failures — and failures on scored checks are what kube-bench highlights as critical.


Q4: Which CIS benchmark section covers the API server, and what is one critical check in that section?

Show Answer

Section 1.2 covers the API Server. One critical check is:

  • 1.2.1 — Ensure that the --anonymous-auth argument is set to false

This is a Level 1, Scored check. Without this setting, unauthenticated users can make anonymous requests to the API server, bypassing all RBAC controls. Other critical API server checks include ensuring --authorization-mode includes RBAC and that --audit-log-path is configured.


Q5: A compliance auditor asks you to prove your Kubernetes cluster meets CIS benchmark Level 1 requirements. What tool do you run, and what evidence do you provide?

Show Answer

Run kube-bench against all nodes:

# On control plane node
kube-bench run --targets master

# On worker nodes
kube-bench run --targets node

# Generate JSON for compliance tools
kube-bench run --json > cis-report-$(date +%Y%m%d).json

Provide the auditor with:

  1. kube-bench JSON/text reports showing PASS/FAIL/WARN results for all Level 1 checks
  2. Remediation evidence — before/after reports showing failures were fixed
  3. Exception documentation — justification for any accepted WARN or FAIL results
  4. Evidence of recurring scans — scheduled kube-bench runs proving continuous compliance

Next: Learn how to automate CIS benchmark scanning with kube-bench Setup →


← CIS Benchmarks kube-bench Setup →

Updated: