@twentyfourg/vault v1.1.4
@twentyfourg/vault
Simple module for accessing Vault secrets. Currently includes support for Lambda and containers.
Usage
npm install @twentyfourg/vaultconst vault = require('@twentyfourg/vault');
vault('secret/data/foo')
.then(console.log)
.catch(console.log)Options
vaultAddress: Vault endpoint to use. Defaults to theVAULT_ADDRenvironment variable.vaultTokenPath: Location of the Vault session token on the filesystem. Defaults to theVAULT_TOKEN_PATHenvironment variable or~/.vault-tokenif not set. This option is only needed when running on a server/container.bypassCache: Make a new API request for secrets instead of pulling from cache. Defaults tofalse.vaultRole: What Vault role to attempt to authenticate to. Defaults to theVAULT_ROLEenvironments variable. This option is only needed when running on Lambda.vaultToken: Existing Vault auth token. Can also be set using theVAULT_TOKENenvironment variable. If left blank, this package attempts to generate a new Vault auth token for you.awsScopedCredentialsRegion: Which region the STS signature is scoped to. Defaults to theVAULT_AWS_SCOPED_CREDENTIALS_REGIONenvironment variable orus-east-1if not set. This option is only needed when running on Lambda.
const vault = require('@twentyfourg/vault');
const options= {
vaultAddress:'https://vault.server.com' // || process.env.VAULT_ADDR
};
vault('secret/data/foo', options)
.then(console.log)
.catch(console.log)Multiple secrets
This module supports passing a comma separated list of secrets. This module will retrieve all the secrets in the list and return one objects with all the secrets combined. If one or more secrets in the list fail to be retrieved, an error will be thrown. If there are any collisions during the merge, an error will be thrown.
vault('kv/foo/bar,kv/foo/bar1')
.then(console.log)
.catch(console.log);
{ foo: 'bar', bar: 'asdf', baz: 'asdf' }Using the SECRET_PATH Environment Variable
This module will default to using the SECRET_PATH environment variable as the secret path if no other path is explicitly provided when invoked.
process.env.SECRET_PATH = "secret/data/foo";
vault().then(console.log).catch(console.log);Word on caching
This module caches the retrieved secrets in memory. This is done to limit the response latency caused by an API call to just the first retrieval of the secret. This helps performance but can result in stale secrets depending on your use case. If you wish to bypass the cache and make a fresh API request, use the bypassCache option.
await vault('secret/data/foo'); // 300ms latency
await vault('secret/data/foo'); // 4ms latency
await vault('secret/data/foo', {bypassCache: true}); // 300ms latencyDifferences when running on a server vs Lambda
When running on a server, it is assumed you already have a Auth Agent for your authorization method configured and are logged in (already retrieved a session token). When running on Kubernetes, our single_server_standard scaffold comes preconfigured with a auth agent sidecar to retrieve and renew a session token. In that circumstance, this modules simply acts as an API wrapper.
The following options or environment variables must be set when running on a server/container.
options.vaultAddress||VAULT_ADDRoptions.vaultTokenPath||VAULT_TOKEN_PATH|| Will default to~/.vault-token
const vault = require('@twentyfourg/vault');
const options= {
vaultAddress:'https://vault.server.com' // || process.env.VAULT_ADDR
};
vault('secret/data/foo', options)
.then(console.log)
.catch(console.log)When running in Lambda, this module will authenticate to Vault and then make the necessary API requests to retrieve the desired secret. The secret values are cached for the duration of the function invokation.
The following opions or environment variables must be set when running in a Lambda function.
options.vaultAddress||VAULT_ADDRoptions.vaultRole||VAULT_ROLEoptions.awsScopedCredentialsRegion||VAULT_AWS_SCOPED_CREDENTIALS_REGION|| Will default tous-east-1
const vault = require('@twentyfourg/vault');
const options= {
vaultAddress:'https://vault.server.com',
vaultRole: 'g-1234-fooBar-aws-role',
awsScopedCredentialsRegion: 'us-east-1'
};
vault('secret/data/foo', options)
.then(console.log)
.catch(console.log)