Skip to main content

More Info:

Advisory: EncryptionConfiguration with a KMS provider should be enabled for Secret resources so etcd does not store secrets in plaintext.

Risk Level

High

Address

Security

Compliance Standards

  • Cloudanix Best Practice

Triage and Remediation

Remediation

Manual Steps

  1. Identify the cluster and region
    • From any machine with AWS CLI access:
  2. Check if EKS secret envelope encryption is enabled (console)
    • In the AWS Management Console:
      1. Go to Amazon EKSClusters → select YOUR_CLUSTER_NAME.
      2. Open the Configuration tab → Security section.
      3. Look for Secret encryption / Envelope encryption.
        • If a KMS key is listed and status is Enabled, secrets are encrypted at rest.
        • If it shows Not enabled or no KMS key, encryption is not configured.
  3. Check if EKS secret envelope encryption is enabled (CLI/IaC evidence)
    • From any machine with AWS CLI access:
    • Interpretation:
      • You should see an entry where resources includes "secrets" and a provider.keyArn is present.
      • If encryptionConfig is empty or missing "secrets", EKS envelope encryption for Secrets is not enabled.
  4. Decide on remediation and KMS key strategy
    • If encryption is not enabled or does not cover secrets, decide:
      • Which customer-managed KMS key to use (or create a new CMK).
      • Ensure the KMS key policy allows the EKS cluster IAM role to use kms:Encrypt, kms:Decrypt, kms:GenerateDataKey*, and kms:DescribeKey.
  5. Apply or update encryption configuration (IaC / CLI / console)
    • Note: For EKS, envelope encryption for secrets must be specified at cluster creation time or by recreating the cluster; you cannot toggle it in-place on an existing cluster.
    • If encryption is missing and policy permits recreation, create or recreate the cluster with encryption enabled, for example using AWS CLI:
    • If using CloudFormation/Terraform, ensure the EKS cluster resource includes an encryptionConfig (or equivalent) block specifying resources = ["secrets"] and a KMS key ARN.
  6. Verify encryption is correctly configured after change
    • From any machine with AWS CLI access:
    • Confirm there is at least one entry with "resources": ["secrets"] (or that includes "secrets") and a valid "provider": {"keyArn": "arn:aws:kms:...:key/..."}.
kubectl cannot configure EKS envelope encryption with KMS, because this setting is applied at the EKS cluster control-plane level via the AWS console, CLI, or IaC, not through Kubernetes API objects. Refer to the Manual Steps section for how to enable EKS secrets encryption with a KMS key.
Explanation of output indicating a problem:
  • Line: EncryptionConfig: NONE <-- PROBLEM: secrets NOT encrypted at rest
    • The EKS cluster has no encryptionConfig configured at all. etcd is storing all secrets in plaintext.
  • Line: Status: secrets encryption NOT ENABLED <-- PROBLEM: etcd stores secrets in plaintext
    • The cluster has some envelope/KMS encryption configured, but secrets is not listed under resources. Kubernetes Secret objects are not encrypted at rest in etcd and must be addressed via the EKS console/CLI/IaC.