More Info:
Create clusters with a private endpoint and disable the public API server endpoint so the control plane is only reachable from within your virtual network.Risk Level
CriticalAddress
SecurityCompliance Standards
- CIS AKS
Triage and Remediation
- Remediation
Remediation
Manual Steps
Manual Steps
-
Review current API server endpoints (Azure CLI – any machine with
azand access):- Confirm whether
enablePrivateCluster/privateClusteris true (private endpoint enabled). - Confirm
enablePublicFqdnis false andauthorizedIpRangesis empty (no public access), or that public access is intentionally restricted to minimal CIDRs.
- Confirm whether
-
Identify and review the AKS-managed private endpoint in the virtual network (Azure Portal or CLI – any machine):
- In the Portal: go to the cluster → Networking → verify “Private cluster” is enabled and note the linked virtual network and subnet.
- Or via CLI, list private endpoints and find the one targeting the AKS control plane:
- Confirm the private endpoint is in the intended subnet and that network security groups/firewall rules allow required access from your admin/jump-host subnets.
-
Check private DNS configuration for the cluster’s private endpoint (Azure CLI – any machine):
- List private DNS zones and links:
- Confirm there is a private DNS zone (for example,
privatelink.<region>.azmk8s.io) and that it is linked to the same virtual network used by the cluster’s private endpoint withregistrationEnabledas appropriate.
- List private DNS zones and links:
-
Decide on desired exposure policy (governance decision – no command):
- Decide if the cluster must be private-only (recommended) or if restricted public CIDRs are required for specific use cases.
- Document approved admin networks (on-prem, VPN, peering, jump hosts) that should reach the private endpoint, and any exceptional public CIDRs if you will allow them.
-
Apply configuration to enforce private-only or restricted public access (Azure CLI – any machine):
- To disable the public API endpoint entirely (preferred):
- If you must keep a public endpoint but restrict it, supply specific CIDR ranges (and optionally hide the public FQDN):
- Ensure that private cluster mode is enabled at creation time for new clusters (cannot be toggled later), using
--enable-private-clusterin youraz aks create/IaC definitions.
- To disable the public API endpoint entirely (preferred):
-
Verify final state matches the benchmark intent (Azure CLI – any machine):
- Confirm
privateClusteris true,privateFqdnis set,enablePublicFqdnis false, and eitherauthorizedIpRangesis[](no public access) or restricted to the explicitly approved CIDRs.
- Confirm
Using kubectl
Using kubectl
kubectl cannot change the API server’s public/private endpoint configuration because it is managed at the AKS control-plane / Azure resource level. Make the changes through the Azure portal,
az CLI, or your IaC (ARM/Bicep/Terraform) instead, and follow the guidance in the Manual Steps section.Automation
Automation
- Each line is one cluster.
- Focus on these columns:
privateClusterEnabledand/orenablePrivateEndpointshould betrueto indicate private endpoint usage.fqdnrepresents the public API server endpoint (public FQDN).privateFqdnrepresents the private endpoint DNS name.
-
Public access still enabled:
fqdnis non-empty AND- Either:
privateClusterEnabledisfalseandenablePrivateEndpointisfalse(no private endpoint at all), or- You have a policy that public endpoint must be fully disabled (even with IP restrictions).
-
No private endpoint:
privateClusterEnabled=falseANDenablePrivateEndpoint=falseANDprivateFqdnis empty.
-
Weak restriction when public endpoint must be off:
- If your requirement is “no public access at all”:
- Any cluster with a non-empty
fqdnshould be reviewed, even ifapiServerAuthorizedIpRangesis populated.
- Any cluster with a non-empty
- If your requirement is “no public access at all”:

