Skip to main content

More Info:

Create clusters with the private API server endpoint enabled and public endpoint access disabled so that all communication between nodes and the API server stays within the VPC.

Risk Level

Critical

Address

Security

Compliance Standards

  • CIS EKS

Triage and Remediation

Remediation

Manual Steps

  1. Identify clusters and current endpoint exposure
    • On any machine with AWS CLI access:
    • For each cluster:
    • Record whether private is true, public is false, and whether any CIDRs are allowed.
  2. Review access requirements and break-glass needs
    • With your platform/network team, decide whether:
      • All administrative/API access can occur from within the VPC via peering/VPN/Direct Connect.
      • Any users or automation require public API access (for break-glass or existing workflows).
    • If public access is truly unnecessary, plan to set endpointPublicAccess=false.
    • If some public access is required, document the minimal set of IP CIDRs that must reach the API and prepare to restrict via publicAccessCidrs instead of fully disabling public access.
  3. Confirm network path for private-only access
    • Verify that all nodes and admin entry points have a private path to the cluster’s VPC subnets:
      • Check VPC peering / Transit Gateway / VPN / Direct Connect configuration.
      • Confirm that security groups, route tables, and NACLs permit HTTPS (443) to the EKS control plane private endpoint from admin networks and node subnets.
    • If this is not currently in place, implement and validate connectivity before disabling public access.
  4. Update cluster endpoint configuration (if approved)
    • On any machine with AWS CLI access, for a cluster where private-only is acceptable:
    • If you must temporarily retain restricted public access instead of disabling it:
    • Schedule and communicate this change; expect an impact on any clients currently reaching the public endpoint.
  5. Verify the configuration and connectivity
    • Confirm endpoint flags:
      Ensure "endpointPrivateAccess": true and "endpointPublicAccess": false (or, if intentionally retained, true with minimal publicAccessCidrs).
    • From a bastion or admin host inside the VPC, verify kubectl still works:
  6. Document the decision and residual risk
    • Record for each cluster:
      • Final values of endpointPrivateAccess, endpointPublicAccess, and publicAccessCidrs.
      • The rationale if public access is not fully disabled.
      • Any compensating controls (IP restrictions, strong auth, logging).
    • Revisit this decision periodically and after major network/organizational changes.
kubectl cannot be used to enable a private EKS API endpoint or disable public access, because this setting is part of the managed control plane configuration. Make these changes via the AWS console, AWS CLI, or your IaC definitions as described in the Manual Steps section.