VaultConfigProvider

VaultConfigProvider is an Elixir Distillery release config provider for loading vault secrets into app env at runtime.

Built with Distillery and Vaultex

Installation

The package can be installed by adding vault_config_provider to your list of dependencies in mix.exs:

def deps do
[
{:vault_config_provider, "~> 0.1.0"}
]
end

Set up Distillery and add to config provider to the config_providers in rel/config.exs.

set config_providers: [
{Mix.Releases.Config.Providers.Elixir, ["${RELEASE_ROOT_DIR}/etc/config.exs"]},
{VaultConfigProvider, []}
]

Configuration

Configure Vaultex with correct vault address and credentials. The Vault address can be set from the system environment or application environment.

VaultConfigProvider assumes vault auth credentials are set in previous config providers.

With the standard Mix.Releases.Config.Providers.Elixir:

config :vaultex,
auth: {:kubernetes, %{jwt: File.read!("/tmp/token"), role: "my_role"}},
vault_addr: "http://127.0.0.1"
config :vaultex,
auth: {:token, {"root"}}

Usage

The provider will resolve secrets stored matching two patterns:

In a string

scheme:#{path} key=#{key_name}

In a keyword list

config :xandra, Xandra,
nodes: [
path: "secret/services/cassandra",
key: "nodes",
fun: &String.split(&1, ",")
]
config :my_app,
# with a string
username: "secret:secret/services/my_app key=username",
username: [
path: "secret/services/my_app",
key: "username",
fun: fn v -> v end
],