etcd Encryption
Why using etcd encryption#
We recommend using etcd encryption to provide an additional layer of data security for your cluster.
Read more about it: Kubernetes Docs: Encrypting Data at Rest
Enabling etcd encryption in Autopilot#
To enable it in Autopilot, one possible approach is changing the spec.topology.variables of your cluster.yaml or Cluster resource within the management cluster and add:
- name: etcdEncryptionSecretRef
value:
enabled: true
And create the related secret:
apiVersion: v1
kind: Secret
metadata:
name: etcd-encryption
type: Opaque
stringData:
config: |-
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
- secrets
providers:
- aescbc:
keys:
- name: key1
secret: <token>
- identity: {}
To generate a random value to replace <token>, you can use:
$ head -c 32 /dev/urandom | base64
Then save the above file as etcd-encryption-secret.yaml and run:
$ kubectl apply -f etcd-encryption-secret.yaml
Direct verification of encrypted Secret data in etcd (for example using etcdctl) requires access to the control plane / etcd.
Encrypt already existing Secrets#
Enabling encryption does not automatically rewrite Secrets that were already stored before encryption was enabled. Existing Secrets are encrypted after their next write.
To re-encrypt one existing Secret, trigger a small write (for example by annotating it):
$ kubectl annotate secret <secret-name> \
-n <namespace> \
encryption-rewrite-timestamp="$(date +%s)" \
--overwrite
This updates the Secret and causes it to be written again using the currently configured encryption settings.
To re-encrypt all existing Secrets cluster-wide, run:
$ kubectl get secrets --all-namespaces -o json | \
kubectl replace -f -
This command reads and rewrites all Secrets with the same data, which applies encryption at rest to objects that were previously unencrypted.
Troubleshooting#
The official Kubernetes verification procedure for encryption at rest checks the raw Secret data in etcd using etcdctl. To execute those commands on a node, you need access to the control plane / etcd.
If you need to troubleshoot or prove that data is encrypted in etcd, follow the upstream Kubernetes verification steps:
Security Contexts
Learn how Kubernetes Security Contexts help reduce container privileges, improve workload isolation, and strengthen cluster security.
Running log collector and retrieving the logs
Retrieve logs from components, services, and OS, bundling them into a tarball with a command. Use SSH key, node IP, and directory for saving the log bundle.