# secrets-tool secrets-tool is a group of utilities used to manage secrets in Azure environments. *Features:* - Generate secrets based on definitions defined in yaml - Load secrets in to Azure KeyVault - Wrapper for terraform to inject KeyVault secrets as environment variables # Use Cases ## Populating KeyVault with initial secrets In many environments, a complete list of secrets is sometimes forgotten or not well defined. With secrets-tool, all those secrets can be defined programatically and generated when creating new environments. This avoids putting in "test" values for passwords and guessible username/password combinations. Even usernames can be generated. With both usernames and passwords generated, the application only needs to make a call out to KeyVault for the key that it needs (assuming the application, host, or vm has access to the secret) Ex. ``` { 'postgres_root_user': 'EzTEzSNLKQPHuJyPdPloIDCAlcibbl', 'postgres_root_password': "2+[A@E4:C=ubb/#R#'n' > ~/.bash_profile . ~/.bash_profile ``` `$ which secrets-tool` should show the full path # Usage ## Defining secrets The schema for defining secrets is very simplistic for the moment. ```yaml --- - postgres-root-user: type: 'username' length: 30 - postgres-root-password: type: 'password' length: 30 ``` In this example we're randomly generating both the username and password. `secrets-tool` is smart enough to know that a username can't have symbols in it. Passwords contain symbols, upper/lower case, and numbers. This could be made more flexible and configurable in the future. ## Populating secrets from secrets definition file This process is as simple as specifying the keyvault and the definitions file. ``` secrets-tool secrets --keyvault https://operator-dev-keyvault.vault.azure.net/ load -f ./sample-secrets.yaml ``` ## Running terraform with KeyVault secrets This will fetch all secrets from the keyvault specified. `secrets-tool` then converts the keys to a variable name that terraform will look for. Essentially it prepends the keys found in KeyVault with `TF_VAR` and then executes terraform as a subprocess with the injected environment variables. ``` secrets-tool terraform --keyvault https://operator-dev-keyvault.vault.azure.net/ plan ```