Skip to main content

More Info:

It is Best Practice to restrict or fence untrusted workloads when running in a multi-tenant environment.

Risk Level

Low

Address

Security

Compliance Standards

  • APRA CPS 234 (Australia)
  • BSI C5 (Germany)
  • Brazil LGPD
  • CCPA / CPRA (California)
  • CIS Critical Security Controls v8
  • CIS EKS
  • CMMC 2.0
  • CSA Cloud Controls Matrix v4
  • DPDPA
  • Digital Operational Resilience Act (EU)
  • Essential 8
  • ISO/IEC 27017
  • ISO/IEC 27018
  • ISO/IEC 27701
  • KSA PDPL
  • MAS Technology Risk Management (Singapore)
  • MITRE ATT&CK (Cloud)
  • NIS2 Directive
  • NIST SP 800-171
  • NYDFS 23 NYCRR 500
  • SWIFT Customer Security Controls Framework
  • Sarbanes-Oxley IT General Controls
  • UK NCSC Cyber Assessment Framework

Triage and Remediation

Remediation

Manual Steps

  1. Identify and classify untrusted workloads
    • On any machine with kubectl access, list all namespaces and note which are multi-tenant, customer-facing, or otherwise untrusted:
    • Decide which namespaces (or pod labels) should be considered “untrusted” and isolated onto Fargate.
  2. Check existing Fargate profiles and selectors
    • On any machine with AWS CLI configured, list Fargate profiles and review their selectors:
    • Confirm whether any existing profiles already cover the untrusted namespaces or workloads (via namespace and label selectors).
  3. Decide coverage gaps and Fargate strategy
    • Compare the untrusted workloads (step 1) to the current Fargate profile selectors (step 2).
    • For each untrusted namespace/workload not matching an existing Fargate profile, decide whether it should:
      • Always run on Fargate (new/updated Fargate profile), or
      • Continue on node groups with other isolation controls (and document why Fargate is not used).
  4. Create or update Fargate profiles for untrusted workloads
    • If needed, create a new Fargate profile for a whole namespace:
    • Or create a profile targeting specific labels within a namespace:
    • If using IaC (CloudFormation/Terraform), make equivalent changes there instead of using CLI and apply them through your normal deployment pipeline.
  5. Verify scheduling behavior for untrusted workloads
    • Deploy or restart a representative untrusted pod and confirm it is scheduled onto Fargate (no node name, eks.amazonaws.com/compute-type=fargate annotation):
    • Ensure that trusted/system workloads that should remain on node groups are not unintentionally matched by the Fargate profile selectors.
  6. Document residual risk and ongoing review
    • Record which namespaces/labels are intended to run on Fargate and which are intentionally left on node groups, including rationale.
    • Establish a process so that when new untrusted namespaces or tenants are added, their scheduling (Fargate vs node groups) is explicitly reviewed and configured using steps 1–5.
kubectl can’t create or manage EKS Fargate profiles; those are configured at the AWS control plane level via the AWS console, CLI, or IaC (such as CloudFormation or Terraform). To address this finding, follow the guidance in the Manual Steps section for creating or updating appropriate Fargate profiles and namespace/label selectors.

Additional Reading: