Skip to main content
emnode
Compliance High severity

AWS Security Hub · EKS

EKS.2: An EKS cluster runs an unsupported Kubernetes version

Written and reviewed by Emnode · Last reviewed

What does AWS Security Hub EKS.2 check?

EKS.2 fails when a cluster's control plane runs a Kubernetes version that is no longer in standard support. It is scored separately from EKS.9, which covers the node groups.

Why does EKS.2 matter?

An out-of-support control plane misses the latest security patches and slips onto the extended-support tier, which carries a steep per-cluster-hour surcharge, roughly six times the base rate. A few clusters quietly on extended-support versions can burn over a thousand dollars a month in surcharge alone, all for running an older, less-patched Kubernetes.

How do I fix EKS.2?

  1. Inventory cluster versions and their support status with the CLI.
  2. Run the in-place control-plane upgrade one minor version at a time, checking for removed/deprecated APIs before each step.
  3. Upgrade node groups (EKS.9) to keep them within the supported skew of the new control plane.
  4. Set an upgrade cadence so clusters never drift onto the extended-support tier again.

Remediation script · bash

# Enable auto minor version upgrade on every RDS instance that has it disabled.
for id in $(aws rds describe-db-instances \
    --query 'DBInstances[?AutoMinorVersionUpgrade==`false`].DBInstanceIdentifier' --output text); do
  aws rds modify-db-instance --db-instance-identifier "$id" \
    --auto-minor-version-upgrade --no-apply-immediately
done

# Move a deprecated Lambda function to a supported runtime.
aws lambda update-function-configuration --function-name auth-token-issuer \
  --runtime nodejs22.x

# Upgrade an out-of-support EKS control plane one minor version at a time (then catch up node groups).
aws eks update-cluster-version --name prod-payments --kubernetes-version 1.29

Full walkthrough (console steps, edge cases and verification) in the lesson Keep software and engines patched.

Is EKS.2 a false positive?

EKS.2 fails on both unsupported and extended-support versions, and the `oldestVersionSupported` parameter is fixed at the current floor and not customisable, so a cluster pinned to an older minor version for a genuine compatibility reason (a workload that has not yet certified against the newer Kubernetes API, or a vendor appliance that lags the release calendar) will fail even when staying back is the deliberate, budgeted choice. Paying the extended-support surcharge to hold a version is a legitimate strategy while you finish the upgrade work. Where that is the case, suppress the finding with a documented exception that names the blocking dependency and the target date to exit extended support, rather than forcing a premature control-plane upgrade that could break the very workload you are protecting.

Part of the learning path Build in resilience
  • EKS.1 An EKS cluster API endpoint is public
  • EKS.3 EKS clusters should use encrypted K8s secrets
  • EKS.8 EKS clusters should have audit logging
  • EKS.9 An EKS node group runs an unsupported Kubernetes version