3 ms·
To do this sort of encryption at rest you need a root. There are essentially three common solutions: 1. Keep the secret key in memory. This can be annoying tho
by philips 9y ago
To do this sort of encryption at rest you need a root. There are essentially three common solutions:
1. Keep the secret key in memory. This can be annoying though as a system administrator needs to unlock every process as it comes up; automation can help but is rarely deployed. This is what Vault does for example. There is a long design doc that we all worked on with this as an eventual option[1] but it is unclear if there is a ton of utility for users to be unlocking API servers
2. Hide the secret key inside of hardware using something like an HSM or a TPM. This is really the state of the art however it doesn't really work well in many environments and requires good inventory management.
3. Give machines a stable cryptographic identity and exchange that identity for a secret key that is kept in memory. This solution sort of shifts the problem around but is generally a good tradeoff between automation and security. The idea is, similar to SSH host keys, on first boot a machine generates an identity and then a system administrator approves that identity and later gives that identity authorization to do tasks. Kubernetes has a lot of the groundwork in place for this and it is still underway[2].
[1]: https://github.com/destijl/community/blob/3418b4e4c6358f5dc747a37b90a97bc792f159ee/contributors/design-proposals/encryption.md https://github.com/destijl/community/blob/3418b4e4c6358f5dc7...
[2]: https://github.com/kubernetes/features/issues/43 https://github.com/kubernetes/features/issues/43