Encryption at rest protects secret data stored in etcd and backups so that a storage compromise does not immediately expose credentials. Runtime access controls govern who can read or use secrets while the cluster is operating. Both are needed because encryption reduces exposure of stored data, while RBAC and auditing limit misuse once the cluster is live.
How Encryption at Rest and Runtime Access Controls Divide the Problem
Encryption at rest answers a storage question: can someone who reaches the underlying data store, snapshots, backups, or disk copies read the secret material directly? runtime access control answer an operating question: which identities are allowed to retrieve, mount, decode, or use that secret while the cluster is running? The difference matters because these controls address different failure modes and are not substitutes.
In Kubernetes, a secret can be protected in etcd and still be exposed to any workload or user with the right cluster permissions. That means storage protection reduces blast radius if the persistence layer is compromised, while runtime controls decide whether the secret is reachable through the API, a pod, or an operator workflow. Strong security needs both layers to be aligned.
For a deeper look at the broader Kubernetes secret and workload identity pattern, see Kubernetes NHI Security Guide, which ties etcd encryption to RBAC, audit logging, and service-account token handling. For secret lifecycle hygiene and exposure reduction, Secrets Management Guide explains how rotation, centralisation, and secretless patterns reduce reliance on long-lived stored values.
What Encryption at Rest Actually Protects
Encryption at rest is a storage-layer control. It protects the secret value after it has been written to etcd, disk, backup media, or a replicated data set. If an attacker steals the storage layer, obtains a backup, or reads raw files outside the Kubernetes control plane, encryption makes the data unreadable without the key material.
That protection is important, but it is narrowly scoped. Encryption does not decide which pod may read a secret, which engineer may run kubectl get secret, or whether an application can exfiltrate the value after it has already been decrypted for use. It also does not eliminate the need to manage the encryption keys carefully, because a compromised key can undo the benefit of storage protection.
The practical takeaway is that encryption at rest is about limiting exposure from where the secret is stored, not from who can use it. It reduces the consequence of a storage compromise, but it does not solve over-permissioned workloads, broad namespace access, or accidental disclosure through logs and mounts.
What Runtime Access Controls Decide in a Live Cluster
Runtime access controls govern active use. In Kubernetes, that usually means RBAC, service-account scope, admission policy, audit logging, and workload permissions that determine whether a principal can read a secret object or receive it indirectly through a mounted volume or projected token. These controls operate while the cluster is serving workloads, which is when most misuse actually happens.
This layer is the one that limits who can convert a stored secret into a working credential. Even if the secret is encrypted in etcd, a developer, controller, or compromised pod with excessive permissions can still retrieve or abuse it once the cluster is live. Runtime controls are therefore the main defence against insider misuse, privilege creep, and lateral movement inside the cluster.
For authorisation design, Authorisation Models Guide is the most direct internal reference for deciding whether RBAC is enough or whether finer-grained policy is needed. Where access decisions involve people and machine workloads together, IAM and IGA Basics helps frame ownership, entitlement review, and least-privilege enforcement as lifecycle controls, not just login controls.
Why You Need Both Controls, Not One or the Other
The right mental model is layered defence. Encryption at rest protects against data exposure from storage compromise, while runtime access controls protect against misuse by valid cluster actors. If you rely only on encryption, you still have a live access problem. If you rely only on runtime controls, a backup, replica, or storage breach can still expose plaintext secret data.
In practice, the most common weak point is assuming that one layer compensates for the other. Teams sometimes encrypt etcd and then relax RBAC, or they tighten RBAC but leave secrets broadly replicated, long-lived, or easy to copy out of backups. Both mistakes increase blast radius because the same secret may be reachable through multiple paths.
The best pattern is to treat encryption as a resilience control for stored data and runtime access control as a use control for active identities and workloads. That combination is what keeps a secret protected before, during, and after deployment.
Risk and Threat Considerations
A Kubernetes secret that is only encrypted at rest can still be abused once a pod, operator, or user gets live read access. A secret that is only protected by runtime permissions can still leak through etcd compromise, backup theft, or administrative access to storage copies.
Failure mechanism: Attackers or over-privileged insiders target the weaker layer, either by extracting data from storage copies or by using cluster permissions to read or mount the secret at runtime. Once the value is exposed, it can be reused for API access, lateral movement, or persistence.
Impact: The result can be credential theft, service impersonation, unauthorized cluster actions, and wider environment compromise if the secret authenticates to external systems or higher-trust services.
Standards & Framework Alignment
This section maps relevant standards and security frameworks to the operational risks and controls described in this guidance.
OWASP Non-Human Identity Top 10 addresses the attack surface, NIST SP 800-53 Rev 5 and CIS Controls v8 set the technical controls, and ISO/IEC 27001:2022 defines the regulatory obligations.
| Framework | Control / Reference | Relevance |
|---|---|---|
| NIST SP 800-53 Rev 5 | SC-28 — Protection of Information at Rest | Encryption at rest for Kubernetes secrets directly maps to stored-data protection. |
| AC-6 — Least Privilege | Runtime access controls for secrets depend on limiting who can read or use them. | |
| AU-2 — Audit Events | Secret access should be logged so runtime misuse can be detected and investigated. | |
| Recommendation — Encrypt secret data at rest to protect etcd, backups, and replicas from offline exposure. Restrict secret read and use permissions to the minimum set of trusted identities. Log secret access events and review them for unauthorized or unusual reads. | ||
| ISO/IEC 27001:2022 | A.8.24 — Use of cryptography | Kubernetes secret encryption at rest is a cryptographic protection of stored information. |
| A.5.15 — Access control | Runtime controls are access-control decisions over who may retrieve or use secrets. | |
| Recommendation — Apply cryptographic protection to stored secrets and manage keys so storage compromise stays contained. Define and enforce access rules that limit secret retrieval to approved roles and workloads. | ||
| CIS Controls v8 | CIS-3 — Data Protection | Secret encryption at rest is a core data-protection safeguard for stored credentials. |
| CIS-6 — Access Control Management | Runtime access controls are about limiting which identities can access secrets in the cluster. | |
| CIS-8 — Audit Log Management | Auditability is needed to see when live secret access is misused. | |
| Recommendation — Protect stored secrets with encryption and reduce exposure through secure backup handling. Enforce least privilege for secret access and remove unnecessary read permissions. Collect and review audit logs for secret reads, mounts, and related access attempts. | ||
| OWASP Non-Human Identity Top 10 | NHI-02 — Secret Leakage | Kubernetes secrets are identity material that can leak from storage or runtime exposure. |
| NHI-05 — Overprivileged NHI | Runtime access controls are meant to stop workloads and service accounts from over-reading secrets. | |
| Recommendation — Prevent secret leakage from storage, backups, and cluster access paths. Remove unnecessary secret-read permissions from workloads and service identities. | ||
Practitioner Guidance
What to verify: Confirm that etcd encryption is enabled and that the key management process is controlled, then separately verify which users, service accounts, controllers, and namespaces can read the secret at runtime. A positive answer on one control does not compensate for a gap in the other.
Decision rule: If the secret can authenticate to production systems, treat runtime RBAC and auditability as the higher-priority control for blast-radius reduction, even when storage encryption is already in place.
What good looks like: Secrets are encrypted in storage, tightly scoped by runtime permissions, rotated on a defined schedule, and auditable when accessed. The aim is to make secret exposure both harder to obtain and easier to detect.
Practitioner takeaway: Encryption at rest reduces the damage from stealing the secret store, but runtime access controls decide whether the secret can be turned into real access, which is usually the more operationally dangerous failure.
Related resources from NHI Mgmt Group
- What is the difference between code scanning and runtime identity monitoring?
- What is the difference between JIT access and Zero Trust for NHIs?
- What is the difference between basic Kubernetes ingress and ingress with built-in access controls?
- What is the difference between Kubernetes Secrets and externally managed secrets for workload access?