This article will describe how to read and write secrets to Vault using the vault CLI and CURL. These instructions are assuming you are on either Linux or Mac OSX. Later we will add instructions for windows. That said, most of the Vault CLI commands should work fine on windows as well.
Before you can proceed, you need to be sure you have authenticated against vault. For details on that, you can check out one of our articles about configuring vault authentication. To use the CURL commands you also need to set an environment variable called VAULT_TOKEN and enter your vault authentication token. Or, you can simply replace $VAULT_TOKEN in each of the curl commands with a valid vault authentication token.
At the end of the article, we will outline how you can use response wrapping as a way that you can securely share secrets with other members of your team who may not have access to Vault.
**Note: curl on OSX does not support PEM certificates for authentication: https://curl.haxx.se/mail/archive-2014-10/0053.html
Saving Secrets
Vault Client:
vault write secret/path password='mypassword'
create a random password without seeing it:
mypass="$(openssl rand -base64 16)"
echo -n $mypass | vault write secret/test password=-
mypass=""
Curl:
curl -X POST -H "X-Vault-Token: $VAULT_TOKEN" -d '{"key":"value"}' https://myvault.mydomain.com:8200/v1/secret/path
Example:
curl -X POST -H "X-Vault-Token: $VAULT_TOKEN" -d '{"password":"mypassword"}' https://myvault.mydomain.com:8200/v1/secret/path
Reading Secrets
After saving secrets to Vault, you obviously need to read retrieve them at some point.
vault client:
vault read secret/path
curl:
curl -X GET -H "X-Vault-Token: $VAULT_TOKEN" https://myvault.mydomain.com:8200/v1/secret/path
example:
curl -X GET -H "X-Vault-Token: $VAULT_TOKEN" https://myvault.mydomain.com:8200/v1/secret/path
Response Wrapping
Response wrapping is where you take data you extracted out of Vault, then save it in the cubby hole. When you save information to the cubby hole you get a one time token that can be used to retrieve the data. This is useful for when you want to send someone a secret, but you don’t want to actually grant them access to something in Vault. An example of how to do this can be seen below.
Information was found here:
https://www.hashicorp.com/blog/vault-0-6/
The following command will read a secret stored at secret/myapp/admin and store it in the cubby hole. the TTL is how long the token is good for. In this example, the token will be good for 15 minutes. When the TTL expires, the token is invalidated and can no longer be used:
vault read -wrap-ttl=15m secret/myapp/adminResponse
will give token, Example: 162fddac-3d86-9a06-06e1-04cba88b6f36
To Retrieve the secret, enter the following:
vault unwrap <Token Number>
Example:
vault unwrap 162fddac-3d86-9a06-06e1-04cba88b6f36
Secret stored at secret/myapp/admin will be displayed on the screen. After the secret has been retrieved, the token is invalidated and cannot be used again (One time password).