Package: secret_loader
Secret-LoaderFlexible Secret LoaderUnified interface for different secret backendsEasy to add new backendsEasily configure precendence of loaders/backendsUse the same precedence in bash scripts and your applicationWhy?The intent is to have a single interface to access secrets no matter which
secret backend is used. Personally I faced the following setup in several projects:Production/Staging Systems on AWS with secrets stored in AWS SecretsManagerLocal/Dev Setup with "secrets" stored in .env file or environment variablesThis project aims to work just the same no matter which scenario you are using.
It should first check the environment variables, then the next configured loader
and so on until a valid secret by the given name is found and returned.Additionally there is a cli because sometimes you want to retrieve secrets before
your application runs (e.g. connecting to a database inside a docker entrypoint
script). This way you get the same behaviour for both your application and other
scripts.Default Precedence/Priority of LoadersThe following locations will be probed for an existing value with the namesecret_namein this order:Environment VariablesA.envfileAWS SecretsManager (using boto3 search order to search for valid aws credentials)How to installpython-mpipinstallsecret_loaderHow to use the secrets_loaderBasic/Out-of-the-box usagefromsecrets_loaderimportsecretapi_token=secret("SOME_API_TOKEN")# Make some use of the token ...Add a custom loaderfromsecret_loaderimportsecretfromsecret_loader.exceptionsimportSecretNotFoundErrorfromsecret_loader.baseimportBaseLoaderclassMyCustomLoader(BaseLoader):defload(self,secret_name,**kwargs):# Do something to get the secret_valuesecret_value="some-very-important-secret"ifnotsecret_value:# This is necessary/expected to indicate that the secret was not foundraiseSecretNotFoundError(f"MyCustomLoader cloud not load{secret_name}")returnsecret_valuesecret.register(MyCustomLoader,priority=100)important_secret=secret("my_secret_name")How to run the secrets_loader from the Command Linepython -m secret_loader --help

usage: secret_loader [-h] [--name NAME] [--fail] [--loader {EnvLoader,EnvFileLoader,AWSSecretsLoader}] [--custom_loader CUSTOM_LOADER] [--priority PRIORITY] [--remove_loaders] [--list_loaders] [--debug]

Secret-Loader

A unified way to laod secrets from different sources.

The secrets-loader will try to load a secret from a list of places:
 1. the current Environment
 2. a local .env file
 3. AWS SecretsManager

The result is printed to standard out, so besure to use this wisely.

optional arguments:
  -h, --help            show this help message and exit
  --name NAME, -n NAME  Name of Secret to Load
  --fail                Fail if Secret is not Found
  --loader {EnvLoader,EnvFileLoader,AWSSecretsLoader}
                        Specify a Loader to use
  --custom_loader CUSTOM_LOADER
                        Use custom Loader, specified as an importable string e.g., 'some.module.CustomLoader'
  --priority PRIORITY, -p PRIORITY
                        Specify a specific priority level for a selected or custom loader
  --remove_loaders      Remove pre-registered Loaders
  --list_loaders, -l    List all currently available loaders
  --debug, -d           Print Debug Messages

Version 0.5 - June 2020 - Moritz Eilfort - src: github.com/JimFawkes/secret-loader
License GPLv3+ - Copyright 2020 Moritz EilfortExamples for CLI UsageHow to run the testspytest