Rook-Ceph CephX Key Ciphers¶
Ceph reports several permanent HEALTH_WARN checks about "insecure key types".
They are muted in cluster/apps/core/rook-ceph/cluster/values.yaml. This page
explains why, and what has to be true before they can be unmuted.
Short version: the Ceph CSI keys must keep using the older aes cipher
because aes256k requires Linux kernel 7.0+ in the RBD/CephFS client, and no
Talos release ships one. Everything else follows from that.
Background¶
Ceph tentacle (v20.2.x) added a stronger CephX key cipher, aes256k, and health
checks that flag the older aes as insecure. This arrived here with the
rook-ceph v1.20.7 suite upgrade, which also moved the cluster to Ceph v20.2.4.
The change is tied to CVE-2025-30156, which affects all Ceph clusters. Rook's remediation is: run Rook ≥ v1.20.6, Ceph ≥ v20.2.4, and rotate the daemon keys. All three are done — see Current state.
Cipher support arrived in:
| Component | Minimum version | Ours |
|---|---|---|
| Ceph | v20.2.4 (tentacle) | v20.2.4 ✅ |
| Rook | v1.20.5 | v1.20.7 ✅ |
ceph-csi (for aes256k CSI keys) |
v3.17.1 | v3.17.0 ❌ |
Linux kernel (for aes256k kernel mounts) |
7.0 | 6.18.42 ❌ |
The split that matters¶
spec.security.cephx has separate sections, and they cannot be treated alike.
Daemon keys — moved to aes256k¶
osd, mds, mgr, plus admin, crash and ceph-exporter. These are
userspace Ceph processes with no kernel client involved, so they take the
stronger cipher safely. Rotating them is what cleared
AUTH_INSECURE_SERVICE_KEY_TYPE — the only [ERR] check, and the reason the
cluster briefly reported HEALTH_ERR.
Two non-obvious points:
keyTypealone does nothing. Per the CRD, withkeyRotationPolicyDisabledor unspecified, changingkeyTypenever initiates rotation. The policy and akeyGenerationbump are what actually rotate keys.- Do not set
daemon.keyType. The Rook docs say "Rook automatically detects the best CephX key type for daemon keys. Do not set this unless required to work around an issue." It selectsaes256kon its own; the operator log confirms it.
CSI keys — must stay on aes¶
client.csi-rbd-node, client.csi-rbd-provisioner, client.csi-cephfs-node,
client.csi-cephfs-provisioner.
These are used by the kernel RBD and CephFS clients when mounting PVCs.
aes256k needs kernel 7.0+. Forcing it on a 6.x kernel breaks every kernel
mount and takes out all PVCs. The Rook chart's own default carries the comment
"required when Kubernetes nodes don't run Linux kernel 7.0+".
csi.keyType: aes is set explicitly rather than left to the chart default,
following Rook's advice to "always set the desired spec.security.cephx.csi.keyType
to guarantee the key type can be supported by kernel mounts". A future chart
default flipping to aes256k would otherwise break storage silently.
allowedCiphers — deliberately unset¶
Maps to Ceph's auth_allowed_ciphers. The CRD warns it "can disrupt cluster
availability". Restricting it to aes256k would lock out the CSI clients above,
which is an immediate storage outage. It stays unset until CSI can move.
The muted warnings¶
All four trace to the single fact that CSI keys must remain on aes.
| Check | Why it fires | Muted |
|---|---|---|
AUTH_INSECURE_CLIENT_KEY_TYPE |
the 4 csi-* keys, plus client.rbd-mirror-peer |
yes |
AUTH_INSECURE_KEYS_ALLOWED |
mons must keep accepting aes for those clients |
yes |
AUTH_INSECURE_KEYS_CREATABLE |
same | yes |
AUTH_EMERGENCY_CIPHERS_SET |
Rook sets mon-auth-emergency-allowed-ciphers="aes,aes256k" so mixed-cipher operation works |
yes |
Rook's documentation sanctions this directly:
It is expected that Rook clusters will have constraints that prevent immediate resolution of all warnings. Warnings that cannot be resolved immediately can be ignored safely.
AUTH_EMERGENCY_CIPHERS_SET is not in Rook's documented mute list. It is
muted here anyway because muting the other three without it changes nothing —
Ceph stays HEALTH_WARN and the ArgoCD app stays Degraded, so the exercise
would be pointless. The check reports a state Rook itself configured and this
cluster requires.
The real cost of leaving them unmuted is that a permanent HEALTH_WARN trains
everyone to ignore Ceph's health, so a genuine problem looks identical to this
known one.
Not muted, on purpose¶
AUTH_INSECURE_ROTATING_SERVICE_KEY_TYPE is left visible. Rook documents that
rotating service tokens keep the old cipher for two to three hours after
daemon migration, then clear on their own. Observed here: present 1h22m after
rotation, gone by 3h41m. Muting it would hide a real transient signal.
Current state¶
# cluster/apps/core/rook-ceph/cluster/values.yaml
security:
cephx:
csi:
keyType: aes # kernel-bound, explicit on purpose
daemon:
keyRotationPolicy: KeyGeneration
keyGeneration: 1 # bump to rotate daemon keys again
CVE-2025-30156 is remediated: Rook v1.20.7, Ceph v20.2.4, daemon keys rotated.
AUTH_INSECURE_SERVICE_KEY_TYPE is gone. Ceph reports HEALTH_OK with the four
warnings muted.
Unmuting — the gate and the procedure¶
Gate: all nodes on Linux kernel 7.0+ and ceph-csi ≥ v3.17.1.
Talos tracks the 6.18 longterm kernel branch, not latest stable. As of
2026-09, Linux 7.2.x is stable but 6.18.x is the LTS, and no Talos release —
including v1.15 alphas — ships a 7.x kernel. This is a "revisit in months, not
weeks" item, tracked in .plans/TODO.md.
Check the gate with:
kubectl get nodes -o custom-columns='NAME:.metadata.name,KERNEL:.status.nodeInfo.kernelVersion'
kubectl -n rook-ceph get pods -o jsonpath='{range .items[*]}{range .spec.containers[*]}{.image}{"\n"}{end}{end}' \
| grep cephcsi | sort -u
When both clear, follow Rook's Migrating CSI keys to a new key type:
- Confirm every node kernel supports
aes256k. -
Rotate CSI keys with
keepPriorKeyCountMax: 1so in-use keys stay active: -
Watch
status.cephx.csi.keyGenerationuntil rotation completes. - New PVC mounts use the new keys; existing mounts keep the old ones.
- Cordon, drain, optionally reboot, and uncordon each node in turn so pods remount with the new keys.
- Once all nodes are rehydrated, set
keepPriorKeyCountMax: 0to drop old keys. - Restrict
allowedCipherstoaes256k. - Flip the four
muteHealthWarningentries topolicy: unmute, so strayaeskeys become visible again.
If anything breaks mid-migration, Rook documents reverting to aes.
References¶
[VIP]: Virtual IP (Used for high-availability controlplanes)
[HA]: High Availability (often reduntant hardware/software)
[PVC]: k8s resource - Persistent Volume Claim
[PV]: k8s resource - Persistent Volume
[CNI]: k8s networking - Container Network Interface
[k8s]: Shortening of Kurbenetes
[CRD]: Custom Resource Definitions
[S3]: Simple Storage Service
[NFS]: Network File System
[DR]: Disaster Recovery