HashiCorp Vault | Getting started

Hi, there! It is a text version of the Vault webinar

HashiCorp Vault | Getting started

Hi, there! It is a text version of the Vault webinar

Let’s go!

First of all, we have to download Vault or install it via your favorite packet manager. You can download the latest version of Vault from the official website — https://www.vaultproject.io/downloads

Or simply install it via brewbrew tap hashicorp/tap
brew install hashicorp/tap/vault

After successful installation, we can check that Vault in the PATH

Also, we need docker for this tutorial, I hope you have already installed it earlier

In this tutorial, we are going to use Consul as the backend for our Vault. The Consuls is basically key-value storagebrew tap hashicorp/tap
brew install hashicorp/tap/consul

After this, we can check that installation was successful

Now we have to clone the repo — we can do it by the next commandgit clone https://github.com/spkane/vault-local-dev.git --config core.autocrfl=input
cd vault-local-dev

Let’s take a look at what is inside this repository. The docker-compose.yml file looks like

It basically describes two services — vault and consul and network between them. The Vault depends on Consul services. We have to add capabilities for Vaultcap_add:
 - IPC_LOCK

because Vault need to do some system calls

Let’s start our services with the next commanddocker compose up -d

Downloading images and starting containers

We just get a vanilla cluster. Congrats!
Now we should set two environment variablesexport VAULT_ADD='https://127.0.0.1:8080'
export VAULT_CACERT="${PWD}/certs/ca.crt"

We are going to use our binary installation of the Vault and Consul as clients for Vault and Consul running inside containers

The Consul container does not persist ANY data, because it is in DEV mode. Actually, Vault supports a lot of storage like PostgreSQL, File system, S3

After starting Vault we have to initialize our Vault. We should determine how many keys are required to unlock Vault.vault operator init --key-shares=5 --key-threshold=3

Note: You should securely store the unseal keys and initial root token. They can not be recovered if they are lost.

Now we have to unseal our Vault, we can do it by the next commandvault operator unseal

After this terminal will prompt you to enter a unseal key

And if you enter the correct unseal keys you will see something like this

Repeat this unseal process until you get

Take a look at the row with Sealed now it is false

Now we can log in to the Vault by the next commandvault login

Enter a root token and you will see something like this

Logged in

One of the greatest features of the Consul is saving backups and restoring them by simple commandsconsul snapshot save backups/vault-consul-backup

The snapshots or backups were also encrypted making them useless for anyone to get it.

Let’s talk about secret engines:

  • Key-value storage engine
  • Cubby hole storage engine

A lot more secret types can be found in the documentation of Vault

The secrets are isolated and have access to only their data

Okay, now we would like to get all types of secrets inside our Vault. We can do it by the next commandvault secrets list

These endpoints cannot be disabled or moved

  • The cubbyhole secrets engine is used to store arbitrary secrets within the configured physical storage for Vault namespace to a token. In the cubbyhole, paths are scoped per token. No token can access another token’s cubbyhole. When the token expires, its cubbyhole destroyed
  • The identity secrets engine is the identity management solution for Vault. It internally maintains the clients who are recognized by Vault
  • The system backend is a default backend in Vault that is mounted at the /sys endpoint. This endpoint is used to configure Vault and interact with many of Vault’s internal feature

Now we are going enabled audit on our Vault

Now let’s try to start interacting with our Vault — we need to create a token. We can do it by the next commandvault token create -use-limit=2 -renewable=false -display-name=uselimit

Okay the first three words don’t need explanation I think, but the flags should be described-use-limit= integer number | How many times we can use this token
-renewable= false|true | Is it renewable token
-display-name= Name of this token which will be shown

Let’s try to store our secretVAULT_TOKEN="s.AFXfi8zrkI8VR78tm6ow7LTp" vault write cubbyhole/oursecret password=12345

Now let’s get back our secret from the Vaultvault read cubbyhole/oursecret

Oh no! We are got an error. The cause of the error is that we don’t provide Vault token. Let’s fix this and try to get back our secret from the Vault

If we tried to read one more time we got another error

It has happened because we reached our limit, remember -use-limit=2 flag?

Let’s try one more operation with tokens. We can have a time limit tokenvault token create -explicit-max-ttl=2m -renewable=false -display-name=timelimit

After two minutes

Now let’s turn on key-value backend of the Vault


Policies

Let’ talk about policy — by default exists two policies — default and root. We can list policies by the next commandvault policy list

Now let’s read one of this policies — we can do it by the next commandvault policy read default

Actually we cannot read root policy

Let’s create a new one policy from our file which situated at config/vault/policies/mypolicy-kv.hcl

We can read it by can get content of this file by simply using cat command or via vim editor.

For uploading our policy to Vault please use next commandvault policy write kv-no-delete config/vault/policies/mypolicy-kv.hcl

Now we can create a token with this policyvault token create -policy=kv-no-delete -display-name=myuser

Move on, and lets log in to Vault with created token

As you can see under this token we don’t have access to the paths likesecret/data/dev

But we can actually get our capabilities with right one pathvault token capabilities secret/data/dev/myteam

Let’s put our first secret inside key-value storagevault kv put secret/dev/myteam/myservice first-value=sup3r

After it we can simply get our secret from the storagevault kv get secret/dev/myteam/myservice

Here we go it look at the Terminal

We can simply overwrite the secret within put operation

Actually we can do put more than one secret at the same time (nothing unusual)vault kv put secret/dev/myteam/myservice first-value=medium second-value=.com

We can get some version of secrets for this we can simply ise this comandvault kv get -version=2 secret/dev/myteam/myservice

But if we try to delete our secret path we get error because it is prohibited by our policy

But we can delete our secret if we log in under the root token. We can create secrets from the file. Let’s take a loo at example below. Here is our secret in JSON

Now we can put this json inside into vault by next comandvault kv put secret/dev/myteam/myotherservice @./config/vault/data/data.json

After it we can simply get it from the vault

Thank you for reading this article!
Please follow to get more interesting information!
I hope this article was helpful for you!

Subscribe to Egor Voronianskii | Java Development and whatsoever

Sign up now to get access to the library of members-only issues.
Jamie Larson
Subscribe