* Vault (by Hashicorp) [go] https://hashicorp.com/blog/vault.html
* Confidant (by Lyft) [Python] https://eng.lyft.com/announcing-confidant-an-open-source-sec...
* Keywhiz (by Sqaure) [Java] https://square.github.io/keywhiz/
Edit to add: it occurs to me, not for the first time, that I assumed Ansible Vault was Vault by Hashicorp simply because so much of our Devops stack is from Hashicorp.
$ cat > secrets && chmod 600 secrets
export SECRET_1='Jerry is a mushroom'
export SECRET_2='Jessica'\''s a chicken!'
$ cat > wrapper && chmod +x wrapper
#!/bin/sh
set -e
. ./secrets
exec "$@"
$ env -i ./wrapper env
SECRET_1=Jerry is a mushroom
SECRET_2=Jessica's a chicken!
PWD=/home/rdancerI think the added value (and increased complexity) from tools like this is that allow you to store your secrets not only on the filesystem, but also in various (typically external) vaults. Some also provide more granular access control to only a subset of secrets, revocation and so on.
For example, S3 credentials, or the API secret to an external service (that may have been rotated since the last time you pulled).
Meaning that every child process will subsequently have access to the secrets?
It seems that this is designed to protect you from untrusted execution environments, which I don't see as feasible. What am I missing?
Shared web hosting where you share a physical machine with other users. Not everyone is into the VM craze these days, thank god
ps auxwwe
on Linux, Mac OS X, and other Unix-en will show all processes for all users with their complete environment.Environment variables should not be used to share secrets.
Of course exceptions might be made for any number of operational reasons but I think it helps to at least aim for the right thing even if it isn't always possible. Secrets in VCS seems to be a shot in exactly the opposite direction.