Skip to main content

More Info:

Provision worker nodes without public IP addresses (private nodes) so that node network exposure to the internet is minimized.

Risk Level

High

Address

Security

Compliance Standards

  • CIS EKS

Triage and Remediation

Remediation

Manual Steps

  1. Review current endpoint and node IP configuration (CLI)
    • On any machine with AWS CLI access:
    • Note:
      • endpointPublicAccess / endpointPrivateAccess settings.
      • publicAccessCidrs.
      • Whether worker nodes (in your nodegroups/Auto Scaling Groups) are launched in public subnets with public IPs (see next step).
  2. Inspect nodegroup networking and IP assignment (CLI)
    • List nodegroups:
    • For each nodegroup:
    • For each subnet ID returned, check if it is public (has a route to an Internet Gateway) and whether instances launched there get public IPs:
    • In the console, confirm whether “Auto-assign public IPv4 address” is enabled for these subnets or on the Launch Template used by the nodegroup.
  3. Decide target posture: private nodes with restricted API endpoint
    • Determine:
      • Which subnets will host worker nodes (should be private subnets with NAT access, no Internet Gateway route).
      • Which IP ranges (e.g., your bastion or office IPs) require access to the public EKS endpoint, if any.
    • Document desired:
      • Nodegroups only in private subnets without public IP assignment.
      • endpointPrivateAccess=true.
      • endpointPublicAccess set to false or true with tightly scoped publicAccessCidrs.
  4. Reconfigure cluster endpoint access (CLI or console)
    • If you must keep some public endpoint access but restrict it:
    • If you can rely only on private access (ensure network connectivity and tooling first):
    • Validate change:
  5. Migrate or create nodegroups without public IPs (console or IaC)
    • In the AWS console or your IaC, for each nodegroup:
      • Ensure it uses only private subnets (no direct route to an Internet Gateway).
      • Ensure instances do not auto-assign public IPv4 addresses (via subnet setting or Launch Template network interface configuration).
    • If current nodegroups use public subnets or public IPs, create replacement nodegroups in private subnets, cordon/drain old nodes, then delete the old nodegroups.
  6. Verify that nodes are private and exposure is minimized (CLI)
    • On any machine with kubectl access:
      Confirm node INTERNAL-IP values are RFC1918/private ranges and no EXTERNAL-IP is assigned.
    • From AWS CLI, confirm worker instances have no public IPs:
      Ensure the output is null for all instances, and that describe-cluster still shows the intended resourcesVpcConfig.
kubectl cannot be used to create or convert EKS worker nodes to private nodes, because this setting is managed at the AWS control-plane / VPC configuration layer (console, CLI, or IaC), not via Kubernetes API objects. Use the cloud provider configuration as described in the Manual Steps section to review and adjust your cluster’s networking and node exposure.