EKS IAM Condition Keys: Your 2026 Governance Boost
EKS IAM condition keys just became the most useful tool in your platform governance kit. With these keys, you can enforce private‑only endpoints, require customer‑managed KMS keys for secrets encryption, lock clusters to approved Kubernetes versions, and mandate deletion protection—without writing a single admission controller. Here’s the thing: baking these rules into IAM and organizational SCPs turns guidance into policy, and policy into default safety.

What changed on April 20, 2026
Amazon EKS added seven IAM condition keys for cluster creation and configuration APIs. These condition keys let you allow or deny requests based on the desired state embedded in the API call. In practice, that means you can block a misconfigured cluster before it exists—or stop a risky config change before it lands.
The new keys you can target are:
- eks:endpointPublicAccess — enforce private‑only control plane endpoints.
- eks:endpointPrivateAccess — require private endpoint access to be enabled.
- eks:encryptionConfigProviderKeyArns — require customer‑managed AWS KMS keys for secrets encryption.
- eks:kubernetesVersion — restrict cluster control planes to approved versions.
- eks:deletionProtection — mandate deletion protection for production workloads.
- eks:controlPlaneScalingTier — constrain control plane capacity to approved tiers.
- eks:zonalShiftEnabled — require zonal shift capability for high availability in multi‑AZ designs.
Because these sit at the IAM layer, they apply whether teams use the AWS Console, CLI, Terraform, CDK, or eksctl. If the request hits the EKS API, your guardrails apply.
Why these keys matter to security and cost
Let’s be blunt: many "security incidents" in Kubernetes aren’t novel exploits—they’re misconfigurations. Public control plane endpoints, clusters shipping without encryption, surprise downgrades to cut costs, or rushed cluster deletes under pressure. The new EKS IAM condition keys let you preempt those footguns.
They also reduce toil. Instead of wiring overlapping checks across OPA/Gatekeeper, Kyverno, admission webhooks, and drift detection, you can move foundational rules to IAM and SCPs—the earliest possible enforcement point. That frees up policy engines inside the cluster to focus on workload‑level controls.
How to roll out EKS IAM condition keys without breaking teams
Governance wins die in rollout. Here’s a proven, low‑drama plan we use with platform teams.
1) Classify clusters and write policy intents
Group clusters by environment and sensitivity: prod‑regulated, prod‑core, staging, sandbox. Give each class an intent summary like: “prod‑regulated: private‑only endpoint, CMK required, approved K8s versions only, deletion protection on.” Keep the list short and auditable.
2) Dry‑run with the IAM policy simulator
Before attaching SCPs org‑wide, simulate with iam:SimulateCustomPolicy and a small canary account or OU. Exercise all creation and update paths (Console, CLI, Terraform, eksctl). Log found gaps.
3) Enforce guardrails in layers
Start with SCPs that deny only the most dangerous states (public endpoints in prod, no KMS). Then follow with account‑level IAM boundary policies for teams that need extra flexibility. Document carve‑outs and their expiry dates.
4) Monitor violations, then tighten
Send AccessDenied metrics to CloudWatch and a Slack channel. After one or two sprints, expand your SCPs to include version pinning and deletion protection. Review exceptions monthly.
5) Remove old band‑aids
When the SCPs are stable, retire overlapping admission‑time checks that duplicate the same guarantees. Keep workload‑focused policies (e.g., image provenance) inside the cluster.
Copy‑paste SCP examples you can adapt today
The snippets below are starting points. Adjust conditions, resource scopes, and OUs to your environment.
Block public EKS control plane endpoints in production OUs
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyPublicEKSApiEndpoints",
"Effect": "Deny",
"Action": [
"eks:CreateCluster",
"eks:UpdateClusterConfig"
],
"Resource": "*",
"Condition": {
"Bool": { "eks:endpointPublicAccess": "true" }
}
}
]
}
Require customer‑managed KMS keys for secrets encryption
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RequireCMKForEKSSecrets",
"Effect": "Deny",
"Action": [
"eks:CreateCluster",
"eks:UpdateClusterConfig"
],
"Resource": "*",
"Condition": {
"ForAllValues:StringEquals": {
"eks:encryptionConfigProviderKeyArns": [
"arn:aws:kms:us-east-1:111122223333:key/your-approved-kms-key-1",
"arn:aws:kms:us-east-1:111122223333:key/your-approved-kms-key-2"
]
}
}
}
]
}
Pin clusters to approved Kubernetes versions
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowOnlyApprovedKubernetesVersions",
"Effect": "Deny",
"Action": [
"eks:CreateCluster",
"eks:UpdateClusterVersion"
],
"Resource": "*",
"Condition": {
"StringNotEquals": { "eks:kubernetesVersion": ["1.29", "1.30"] }
}
}
]
}
Tip: manage the version list via an organization‑wide parameter store or a CI‑managed JSON file so platform teams can update it in lockstep with your runtime upgrade strategy.
People also ask
Do EKS IAM condition keys apply to eksctl, Terraform, and CDK?
Yes. These policies evaluate the request at the EKS API layer, regardless of the client. If the tool ends up calling CreateCluster, UpdateClusterConfig, or UpdateClusterVersion with a non‑compliant value, the request is denied.
Will these keys block kubectl operations?
No. They govern EKS control plane creation and configuration. They don’t evaluate pod‑level or namespace‑level operations. Use Gatekeeper/Kyverno, network policies, and IRSA for workload isolation.
How do I handle emergency public access for incident response?
Two options: 1) define a break‑glass role in a management account scoped to a sandbox OU, with a short‑lived exception SCP that auto‑expires; or 2) rely on private endpoints behind VPN/Direct Connect with bastion access. The first is rare; the second should be your norm.
Gotchas and edge cases to test
Updates that bundle multiple changes. Some tools submit a config update that includes endpoint flags and security groups together. Your condition will still evaluate just the flagged keys, but verify that your CI doesn’t silently retry with defaults.
Version rollouts. If you enforce approved versions via eks:kubernetesVersion, define a sunset calendar. Pin current and next versions, then remove the oldest when your clusters finish upgrading. Align this with your release windows to avoid surprise denials.
Deletion protection lapses. Teams sometimes create staging clusters without deletion protection to speed teardown. If you allow this, scope your deletion‑protection rule to prod OUs and label staging clusters clearly with tags and account names to avoid confusion.
Control plane scaling tiers. Be explicit. If you allow only a single tier, capacity‑driven scale events may fail. Consider permitting two adjacent tiers where you have high‑variance traffic.
Zonal shift capability. Requiring eks:zonalShiftEnabled is great for resilience, but make sure your nodes, PodDisruptionBudgets, and autoscaling policies are designed for zone failures. Otherwise you’ve paid for optionality you can’t use.
The platform blueprint: from policy to practice
Below is a compact blueprint we use when shipping guardrails with enterprise platform teams.
- Define classes: prod‑regulated, prod‑core, staging, sandbox.
- Write intents: one line per class mapping to the new keys.
- Draft SCPs: start with endpoint privacy and KMS; add version pinning and deletion protection next.
- Simulate & canary: policy simulator, then a canary account.
- Rollout by OU: sandbox → staging → prod‑core → prod‑regulated.
- Observe: alert on
AccessDeniedfrom EKS actions; triage weekly. - Iterate & document: public exceptions expire by default; renew only with a risk sign‑off.
Security plus speed: make it easy to do the right thing
Guardrails work when they’re paired with golden paths. Ship a reference module for cluster creation that’s guaranteed to pass your SCPs—Terraform, CDK, or a simple eksctl profile. Bake in private endpoints, a default CMK selector, version selection from a shared source of truth, and deletion protection turned on.
Document the why and the how in the same repo. If a developer can provision a compliant cluster with one command and a single variable file, you’ll get far fewer exception requests.
How this fits with the rest of your stack
IRSA and secrets strategy. Requiring CMKs for secrets encryption complements IRSA and reduces blast radius if the etcd snapshot ever leaks. Keep app‑level secrets in a dedicated store (AWS Secrets Manager or External Secrets syncing to Kubernetes), and rotate keys on a schedule.
Admission controllers. Keep them, but change their job. Use Kyverno/Gatekeeper for workload‑level concerns and provenance (images from your registry, required labels, network policy). Leave core cluster posture to IAM/SCPs.
Cost controls. Endpoint privacy routes traffic over private links; factor this into your VPC and NAT spend. Control plane tier limits avoid accidental over‑provisioning but can also block needed scale—monitor and tune.
Want a partner to design and ship these guardrails alongside sane defaults and CI checks? See our cloud security and DevOps services, browse our portfolio, or just talk to our team.
Quick reference: policy keys and recommended stances
- endpointPublicAccess: Deny if
truein prod. - endpointPrivateAccess: Require
truein prod; optional in staging. - encryptionConfigProviderKeyArns: Require CMKs from an approved allowlist.
- kubernetesVersion: Allowlist current + next minor.
- deletionProtection: Require
truein prod; optional elsewhere. - controlPlaneScalingTier: Allowlist 1–2 tiers that cover your capacity envelope.
- zonalShiftEnabled: Require
truefor customer‑facing prod clusters.
FAQ for platform and security leaders
Can I scope rules differently per environment?
Yes—attach SCPs to different OUs, and use account tags or naming conventions to align accounts to environments. For shared services accounts, prefer stricter rules and explicit break‑glass procedures.
Do I still need network controls if endpoints are private?
Absolutely. Private endpoints reduce exposure, but you still need VPC segmentation, security groups, and WAF on public ingress. Treat endpoint privacy as one control in a layered design.
What about multi‑account teams and contractors?
Federate access with SSO and short‑lived roles, add permission boundaries for builders, and keep the SCPs identical across member accounts. Exceptions live with the OU owner, expire by default, and require risk sign‑off.
What to do next
- Map your environments: list accounts and clusters; assign each to prod‑regulated, prod‑core, staging, or sandbox.
- Draft two SCPs today: deny public endpoints; require CMKs for secrets. Test in a canary account.
- Publish the allowed Kubernetes versions: current + next. Automate the list update in CI.
- Ship a golden path module: a one‑command, compliant cluster template.
- Set up alerts: CloudWatch + Slack for EKS AccessDenied events.
- Schedule the rollout: sandbox → staging → prod within two sprints. Track exceptions with expiry dates.
Zooming out
Security works when it’s boring—when the safe path is the default path. The new EKS IAM condition keys finally let platform teams set that default at the right control point. Roll them out thoughtfully, pair them with a clean developer path, and you’ll lower risk and reduce friction for the teams shipping your customer experiences.
If you’d like help tailoring these guardrails to your org, aligning them with upgrade cadences, and smoothing migration for feature teams, we’re happy to jump in. Start with a quick intro to what we do and then grab time with us.
Comments
Be the first to comment.