More Info:
Create clusters with private nodes so node instances have no public IP addresses and communicate with the control plane over the private network.Risk Level
HighAddress
SecurityCompliance Standards
- CIS AKS
Triage and Remediation
- Remediation
Remediation
Manual Steps
Manual Steps
-
Identify whether the cluster is private or public
- Run on: any machine with
azand network access to Azure. - Command (replace with your cluster details):
- Review:
- If
privateFqdnis non-null andapiServerAccessProfile.enablePrivateClusteristrue, the cluster is configured as a private cluster. - If
privateFqdnis null orenablePrivateClusterisfalse/missing, the cluster is not private.
- If
- Run on: any machine with
-
Confirm whether nodes have public IP addresses
- Run on: any machine with
az. - Get the node resource group name:
- List NICs and check IP configs:
- Review: if any node NIC has a non-empty
publicIpvalue, those nodes are exposed via public IP.
- Run on: any machine with
-
Decide remediation approach (recreate vs. accept risk)
- If the cluster is not private and/or nodes have public IPs, decide:
- Security-focused option: plan to create a new private cluster and migrate workloads.
- Exception option: document and accept the risk if public nodes are required (for example, specific ingress or legacy networking constraints), and record the justification and compensating controls (NSGs, firewalls, WAF, etc.).
- If the cluster is not private and/or nodes have public IPs, decide:
-
Plan the private cluster configuration (if remediation is chosen)
- Determine/allocate networking values:
- Existing VNet subnet ID for nodes:
- Choose
--service-cidr,--dns-service-ip, and--docker-bridge-addressranges that do not overlap with your VNet address space and conform to your network standards.
- Existing VNet subnet ID for nodes:
- Decide on cluster name, resource group, location, and ensure
--load-balancer-sku standardis acceptable in your environment.
- Determine/allocate networking values:
-
Create a new private cluster (if remediation is chosen)
- Run on: any machine with
az. - Command (fill in your values):
- Adjust node count, VM size, and other options as needed, but ensure
--enable-private-clusterremains present.
- Run on: any machine with
-
Verify the new cluster is private and nodes lack public IPs
- Run on: any machine with
az. - Check private cluster properties:
- Confirm
privateFqdnis set andapiServerAccessProfile.enablePrivateClusteristrue.
- Confirm
- Check node NICs for public IPs:
- Confirm
publicIpis empty for all node NICs.
- Confirm
- Run on: any machine with
Using kubectl
Using kubectl
kubectl cannot be used to enable private nodes or convert an existing AKS cluster into a private cluster; this configuration is managed at the Azure AKS control-plane / cluster creation level via the Azure portal, CLI, or IaC. Refer to the Manual Steps section for how to review and, if needed, recreate the cluster with
--enable-private-cluster.Automation
Automation
- For each cluster, focus on the
STATUSline:STATUS: COMPLIANT - private cluster enabled- Indicates
enablePrivateClusteristrueand the cluster was created with private nodes.
- Indicates
STATUS: NON-CPLIANT - private cluster NOT enabled (public API / public nodes possible)- Indicates
enablePrivateClusterisfalseor missing; this is the condition that requires manual review and usually remediation (recreate or migrate to a cluster created with--enable-private-cluster).
- Indicates

