Skip to content
s1ns3nz0 | Known Unknowns
Go back

Private EKS Security Design Review

10 min read

EKS Security Controls Through the CIA Model

I applied security controls across multiple layers: the Kubernetes API, worker nodes, workloads, IAM identities, secrets, container images, networking, and operational access. I began by analyzing system components through the CIA model. Here is a brief introduction to the security concepts I used.

Defense in Depth

Defense in depth is a security principle that applies multiple security controls across multiple layers.

CIA Model

The CIA model is a simple way to ask three questions about every system component:

Confidentiality

Consider EKS from this perspective: Can an unauthorized identity or principal access organizational data? If a component is compromised, what data can it access?

A strong EKS confidentiality design includes:

  1. No public API endpoint unless there is a compelling business reason.
  2. No public IP addresses for worker nodes.
  3. Separate IAM roles for distinct functions.
  4. Secrets delivered only to the minimum required workloads.
  5. Network routes that allow only required destinations.
  6. Encryption for persistent data and sensitive logs.
Confidentiality Control Overview
ControlHow It Protects Confidentiality
Private EKS API endpointPrevents direct public internet access to the Kubernetes API.
Private subnets and no public node IPsReduces exposure of worker nodes and workloads to unsolicited inbound traffic.
Security group segmentationSeparates control-plane, system-node, and Hoodi-node traffic paths.
Restricted node egressSystem nodes can access private VPC services and S3 endpoints, while only Hoodi nodes receive limited P2P and HTTPS egress.
VPC endpointsAllow nodes to reach ECR, KMS, EKS authentication, and logging services without broad internet access.
IAM role separation and Pod IdentityPrevent node, EBS CSI, Vault, GitOps, and release workloads from sharing a broad AWS identity.
IMDSv2 with a hop limit of 1Helps prevent workload-level access to node IAM credentials through metadata service abuse.
KMS encryptionEncrypts EBS node volumes and audit and control-plane logs.
Vault path-scoped policiesLimit validator components to their designated runtime-secret paths and deny access to Vault administrative paths.
Kubernetes NetworkPoliciesRestrict workload-to-workload access, such as allowing validator signing traffic only through designated components.

Integrity

Consider the following questions: Who can modify the environment, and how? How can you demonstrate that your tracking evidence is valid?

A strong EKS integrity design answers the following questions:

  1. Is every production change reviewed and traceable?
  2. Does every deployment use an immutable artifact?
  3. Can CI operate only within its intended cloud permissions?
  4. Can workload identities modify resources beyond their intended tasks?
  5. Can stale or duplicated stateful workloads cause conflicting actions?
  6. Can the team reconstruct who changed the cluster and when?
Integrity Control Overview
ControlWhat It PreventsWhy It Matters
Terraform-managed EKS configurationAd hoc, undocumented infrastructure changes.Infrastructure changes become reviewable as code.
EKS access entriesUnclear or unmanaged Kubernetes access.IAM principals can receive explicit, scoped cluster access.
Namespace-scoped ViewPolicyGitOps verification tooling from changing workloads or reading all namespaces.The private runner can inspect only approved namespaces.
Immutable ECR repositoriesReplacement of an already approved artifact under the same tag.A deployment should reference the exact image that was reviewed.
Digest-pinned imagesWorkloads silently receiving changed image content.An image digest identifies immutable content.
Trusted CI control planePull request code replacing scanner rules or policy logic.Pull request source is treated as data rather than trusted control code.
Policy checksUnsafe Terraform, mutable images, privileged Pods, or risky workflows reaching promotion.Static checks detect deterministic policy violations before deployment.
OIDC-bound AWS rolesAnother GitHub repository or environment assuming a cloud role.OIDC claims bind AWS authority to the intended repository and environment.
Validator signing fenceTwo validator clients signing concurrently.Duplicate signing can cause slashing or operational corruption.
Lease-based authorityA stale or replaced Pod continuing to sign.The fence closes connections when Lease authority is lost.
EKS control-plane audit logsUndetected Kubernetes API mutations.Logs support accountability and incident investigation.

Availability

Consider the following questions: What situations can occur in the environment? Can legitimate users and workloads remain available in those situations?

A strong EKS availability design answers the following questions:

Availability Control Overview
ControlWhat It Protects AgainstWhy It Matters
Separate system, consensus, and execution node groupsA single workload category consuming all capacity.Platform services can remain available if blockchain clients are overloaded.
Managed node groupsManual node-lifecycle errors.EKS integrates node replacement and updates with the control plane.
max_unavailable = 1Too many nodes becoming unavailable during an update.Stateful node workloads are less likely to be disrupted simultaneously.
On-Demand capacitySpot Instance termination.Stateful blockchain workloads may require stable capacity.
Retained PVCsLoss of persistent client data during rescheduling or scaling changes.Execution and consensus clients may retain large, expensive-to-rebuild state.
Private VPC endpointsLoss of access to ECR, KMS, logs, or EKS-related AWS services when public egress is unavailable.Private nodes still need AWS services to start and operate.
System-node restricted egressA compromised or misbehaving platform component creating broad outbound dependencies.Limits the attack surface, but requires correct endpoint configuration.
Control-plane logs and VPC Flow LogsSlow diagnosis of node, API, or network failures.Observability reduces recovery time.
Default-deny NetworkPoliciesLateral traffic overload or accidental dependencies.Explicit dependency paths are easier to test and operate.

Integrated Matrix

Kubernetes domainConfidentiality (C)Integrity (I)Availability (A)Key residual risk
Kubernetes API serverPrivate endpoint prevents direct public access.EKS access entries and RBAC limit API actions; audit logs record changes.Private API access depends on VPC, DNS, IAM, and operator paths.Bootstrap creator admin can bypass normal Kubernetes controls.
Cluster authenticationIAM and OIDC avoid sharing static credentials.Identity-to-role mapping limits who can authenticate as which principal.Authentication failures can prevent operators and workloads from functioning.API_AND_CONFIG_MAP creates two authorization-management paths.
Kubernetes RBACLimits Secret, Pod, and API read access.Limits create, patch, delete, exec, and impersonation permissions.Overly restrictive RBAC can block operations and recovery.Live RBAC state and role bindings must be reviewed, not only Terraform.
Worker nodesNo public IPs, encrypted EBS, and IMDSv2 reduce data and credential exposure.Hardened launch templates reduce unauthorized node configuration changes.Managed node groups and controlled updates support replacement.Node compromise remains high impact because nodes host multiple workloads.
Node poolsSystem and Hoodi workloads are separated by subnet and security-group boundaries.Labels, scheduling, and group separation reduce accidental workload placement.Independent pools prevent one workload family from exhausting all capacity.More pools add cost, capacity-planning needs, and operational complexity.
Pods and containersNon-root execution, read-only filesystems, and dropped capabilities reduce data access.Restrict privileged execution and reduce container escape opportunities.Resource requests and limits reduce noisy-neighbor failures.Controls must be enforced at runtime, not only checked in CI.
Service accountsEach workload receives a dedicated identity rather than shared credentials.RBAC and Pod Identity constrain what that identity can do.Missing or incorrectly bound service accounts can cause workload startup failures.Service account token mounts and role bindings require periodic review.
AWS Pod IdentityLimits AWS credentials to the intended Pod and service account.Prevents workloads from inheriting broad node IAM authority.Role-association or agent failures can break dependent workloads.IAM policies can still be overly broad if not continuously reviewed.
Secrets and VaultVault uses set-scoped paths, short token lifetimes, and no default policy.Policies prevent unauthorized secret overwrite, export, or Vault administration.Vault unavailability can prevent workload startup, renewal, or signing.A compromised authorized signer may still access its own validator-set material.
Container imagesPrivate ECR prevents unrestricted public registry dependency.Immutable repositories and digest pinning protect against tag substitution.Image-pull failures can block new Pods and recovery.Retention policies must preserve rollback-required artifacts.
Kubernetes networkingNetworkPolicies restrict which Pods can contact Vault, signers, DNS, or peers.Limits lateral movement and unauthorized internal API use.Incorrect policies can break DNS, service discovery, or workload communication.Policy effectiveness depends on VPC CNI enforcement remaining enabled.
Security groups and VPCPrivate subnets and restricted ingress reduce external visibility.Explicit security-group rules prevent implicit connectivity changes.VPC endpoint, NAT, DNS, and routing failures can interrupt operations.Hoodi P2P traffic requires carefully bounded external egress.
Ingress and service exposureInternal-only services avoid accidental public exposure.Service selectors and scoped policies reduce unauthorized routing.A service or DNS misconfiguration can make workloads unreachable.Live LoadBalancer and Ingress resources need separate verification.
Validator signing fenceTLS/mTLS and scoped service access protect signing traffic.Lease, Pod UID, and Pod-IP checks prevent duplicate signing authority.Fence failure intentionally stops signing to avoid unsafe operation.Safety-first behavior can reduce availability during Kubernetes API issues.
Persistent volumesKMS encryption protects stored node and client state.PVC retention reduces accidental data deletion during scale-down or replacement.Retained volumes support stateful recovery.Recovery depends on EBS, the CSI driver, KMS, and correct attachment behavior.
Admission policyCan block insecure workloads from receiving sensitive access.Can reject privileged Pods, mutable images, host paths, and unsafe specifications.Bad policies can prevent legitimate workloads from deploying.CI policy exists; live admission coverage must be proven.
CI/CD and GitOpsOIDC and protected environments reduce cloud credential exposure.Signed, digest-bound, policy-gated artifacts protect deployment integrity.CI, GitHub, CodeBuild, ECR, and private runner failures can delay delivery.External GitHub environment and ruleset protections need live verification.
Logging and auditEncrypted, access-controlled logs reduce exposure of operational data.API audit logs establish accountability for configuration changes.Logs support faster incident response and recovery.Logging does not stop an attack; alerting and review processes must exist.
Operator / break-glass accessPrivate access paths reduce public administrator exposure.Approval, time limits, and auditing constrain emergency authority.Provides recovery when standard GitOps or SSM paths fail.An uncontrolled break-glass or bootstrap-admin identity defeats many other controls.

Share this post:

Previous Post
EKS Security Controls Implemented in the Cluster Design
Next Post
Adding an Azure Recovery Vault Protected Items Check to Prowler