Skip to main content

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

High

Address

Security

Compliance Standards

  • CIS AKS

Triage and Remediation

Remediation

Manual Steps

  1. Identify whether the cluster is private or public
    • Run on: any machine with az and network access to Azure.
    • Command (replace with your cluster details):
    • Review:
      • If privateFqdn is non-null and apiServerAccessProfile.enablePrivateCluster is true, the cluster is configured as a private cluster.
      • If privateFqdn is null or enablePrivateCluster is false/missing, the cluster is not private.
  2. 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 publicIp value, those nodes are exposed via public IP.
  3. 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.).
  4. 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-address ranges that do not overlap with your VNet address space and conform to your network standards.
    • Decide on cluster name, resource group, location, and ensure --load-balancer-sku standard is acceptable in your environment.
  5. 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-cluster remains present.
  6. Verify the new cluster is private and nodes lack public IPs
    • Run on: any machine with az.
    • Check private cluster properties:
      • Confirm privateFqdn is set and apiServerAccessProfile.enablePrivateCluster is true.
    • Check node NICs for public IPs:
      • Confirm publicIp is empty for all node NICs.
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.
Explanation of output indicating a problem:
  • For each cluster, focus on the STATUS line:
    • STATUS: COMPLIANT - private cluster enabled
      • Indicates enablePrivateCluster is true and the cluster was created with private nodes.
    • STATUS: NON-CPLIANT - private cluster NOT enabled (public API / public nodes possible)
      • Indicates enablePrivateCluster is false or missing; this is the condition that requires manual review and usually remediation (recreate or migrate to a cluster created with --enable-private-cluster).