Some integrations with Salt, like GitFS, require storing sensitive secret data as part of the Salt master configuration in order for the Salt master to access those resources. These secrets should be stored and retrieved securely. Storing plaintext credentials for authentication poses a security risk. To mitigate this, Salt provides SDB as a mechanism aimed at retrieving secrets securely. There are multiple integrations available, but we will use GPG-encrypted YAML in this example. See the SaltProject SDB documentation for more information (See link in additional information). This guide provides a step-by-step process to encrypt the Git password and integrate it into Salt's configuration.
Aria Config - all versions
Tanzu Salt - all versions
SaltProject - all versions
sudo yum install -y gnupg rng-tools
sudo systemctl start rngd
sudo systemctl enable rngd
We'll store the GPG keyring under the Salt master configuration directory to help ensure it is accessible by the Salt master.
sudo mkdir -p /etc/salt/pki/gpg
sudo chown -R $(whoami):$(whoami) /etc/salt/pki/gpg
sudo chmod 700 /etc/salt/pki/gpg
gpg --homedir=/etc/salt/pki/gpg --gen-key
Run the following command to list keys in your keyring and identify the <key_id>:
gpg --homedir=/etc/salt/pki/gpg --list-keys
Look for the string after pub (e.g., rsa2048/1234ABCD) where 1234ABCD is your <key_id>.
gpg --homedir=/etc/salt/pki/gpg --armor --export <key_id> > /etc/salt/pki/gpg/public.key
gpg --homedir=/etc/salt/pki/gpg --armor --export-secret-key <key_id> > /etc/salt/pki/gpg/private.key
echo -n "my_git_password" | gpg --homedir=/etc/salt/pki/gpg --armor --encrypt -r <key_id>
Use the example content below to create a git_secrets.yaml file.
git_password:
gpg: |
-----BEGIN PGP MESSAGE-----
<encrypted_password_here>
-----END PGP MESSAGE-----
This file can live in any secure directory accessible by the Salt master. It is not a direct part of the Salt master configuration.
This info is probably best placed near the GitFS configuration, but can be placed in any file ending with a .conf file extension under the /etc/salt/master.d directory.
gpg_keydir: /etc/salt/pki/gpg
gpg_keyname: <key_id>
gpg_decrypt: true
Add a configuration section similar to the following:
gpg_keydir: /etc/salt/pki/gpg
gpg_keyname: <INSERT YOUR KEY NAME HERE>
local-crypt: # Can be named anything the user wants, but is how the backend will be referenced
driver: yaml
files:
- /srv/sdb/testing.yaml
- /srv/sdb/git_secrets.yaml
gpg: True
gitfs_remotes:
- https://your.git.repo/url:
- user: your_git_user
- password: sdb://local-crypt/git_password # Ensure this references the SDB profile defined in the previous step
sudo systemctl stop salt-master
sudo systemctl start salt-master
Run the following sample command to test the backend and verify that things are operating as expected:
salt-run -l debug sdb.get 'sdb://local-crypt/git_password'
Assuming the Salt master starts successfully, you now have a GPG encrypted secret that is retrievable by the Salt master.