En este post vamos a instalar Hashicorp vault en modo developper.

Hashicorp ofrece Vault para Linux, Mac y Windows y puedes ejecutar vault en modo developer en este modo guardara toda la información en ram, esto quiere decir que los datos no sean persistentes.

Una ves que detengas el servidor en modo dev los datos de vault se borraran.

Vault, dependiendo del sistema operativo, tendra una o mas formas de poder ser instalado, aunque Hashicorp recomienda actualizar el binario regularmente yo recomiendo que la instalacion sea manual, de esta forma estas en mas control de las actualizaciones. Esto es por que necesitas una version consistente de vault en todo tu entorno, y si alguien actualiza sin conocimiento, es posible que vault deje de responder a los mismos comandos, o incluso pueda perder comunicacion con el cluster

Vamos a aprender como instalar Vault de forma manual

Si actualizas por accidente vault en produccion podrias perder comunicacion con el cluster
Debes de recordar que el modo dev se debe de utilizar unicamente para pruebas, es altamente inseguro y no se recomienda bajo ninguna circunstancia correrlo en un entorno de desarrollo.

Requisitos

  • Conocimientos de comandos básicos en linux.
  • Computadora linux (en mi caso Ubuntu 20.04 aarch64)
  • Conocimiento básico de docker

Laboratorio

  1. Ejecuta un contenedor con la ultima version de ubuntu
docker container run -it -d --name ubuntu_vault_dev ubuntu /bin/bash

2. Conectate al contenedor para configurarlo

docker container exec -it ubuntu_vault_dev /bin/bash

3. Instala algunas herramientas que vamos a usar mas adelante

apt update && apt install -y wget unzip
Si ves algun error de desbloqueo puede ser que tengas que poner sudo enfrente de tus comandos, esto pasa si no estas usando estos comandos dentro de un contenedor oficial de ubuntu, ejemplo: sudo apt update && sudo apt install wget -y

4. Necesitamos saber sobre que tipo de arquitectura (cpu) estamos trabajando puedes usar  uname -m para revisarlo

uname -m
aarch64

En mi caso estoy corriendo el contenedor sobre Raspberry pi 4, mi arquitectura es aarch64 (arm64)

5. Ve a la pagina de descarga de Hashicorp Vaul aqui y selecciona la arquitectura correcta para tu procesador

Y en vez de dar click en descargar, da click derecho en "Download" y selecciona “Copy Link Location”

6. Ejecuta el comando wget seguido del link de descarga

wget https://releases.hashicorp.com/vault/1.5.4/vault_1.5.4_linux_arm64.zip
--2020-10-03 13:40:21--  https://releases.hashicorp.com/vault/1.5.4/vault_1.5.4_linux_arm64.zip
Resolving releases.hashicorp.com (releases.hashicorp.com)... 151.101.185.183, 2a04:4e42:53::439
Connecting to releases.hashicorp.com (releases.hashicorp.com)|151.101.185.183|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 48076803 (46M) [application/zip]
Saving to: ‘vault_1.5.4_linux_arm64.zip’

vault_1.5.4_linux_arm64.zip         100%[==================================================================>]  45.85M  9.31MB/s    in 1m 40s  

2020-10-03 13:42:01 (471 KB/s) - ‘vault_1.5.4_linux_arm64.zip’ saved [48076803/48076803]

7. Cuando la descarga finalice, descomprime el archivo

unzip vault_1.5.4_linux_arm64.zip

8. Borra el archivo comprimido

rm vault_1.5.4_linux_arm64.zip

9. Prueba el binario ejecute correctamente

./vault version
Vault v1.5.4 (1a730771ec70149293efe91e1d283b10d255c6d1)

Si obtienes un error "Exec format error", en vez de la version quiere decir que el binario no es para la arquitectura de tu cpu, hay que borrar el binario y archivo comprimido y repetir los pasos desde el 5 seleccionando la arquitectura correcta para tu procesador

vault version
bash: ./vault: cannot execute binary file: Exec format error
Error de arquitectura

10. Hay que revisar que directorios están en la variable de entorno $PATH esto para que pueda ejecutarse desde cualquier lugar, usa el commando echo $PATH para saber cuales son los directorios

root@60af5e1b7139:/# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

11. mueve el binaro de Vault a un directorio PATH, personalmente prefiero /usr/local/bin/ por que es uno de los que siempre estan vacios (la mayoria del tiempo)

mv vault /usr/local/bin/

12. Verifica la instalación

vault version
Vault v1.5.4 (1a730771ec70149293efe91e1d283b10d255c6d1)

13. Ahora que todo esta funcionando bien, vamos a ejecutar vault en modo dev con vault server -dev

vault server -dev

14. Te va a desplegar información parecida a esta

WARNING! dev mode is enabled! In this mode, Vault runs entirely in-memory
and starts unsealed with a single unseal key. The root token is already
authenticated to the CLI, so you can immediately begin using Vault.

You may need to set the following environment variable:

    $ export VAULT_ADDR='http://127.0.0.1:8200'

The unseal key and root token are displayed below in case you want to
seal/unseal the Vault or re-authenticate.

Unseal Key: j8i4C8CelXhbDN8AyUb0jUP40db7HhrvIMUTzeZV8Oc=
Root Token: s.EXiJeOOc838l848XrdxioI6Q

Development mode should NOT be used in production installations!

Cada vez que ejecutes el servidor vault en modo dev, te va a mostrar el  unseal key, y el root token

Con el root token tienes accesos de administrador en el servidor, siempre busca este token y guardalo, el root token cambia cada vez que inicies el servidor en modo dev

15. Ahora nuestro servidor vault en modo dev va a correr en esta terminal, inicia una nueva terminal y conectate de nuevo al contenedor vault para hacer un vault status

docker container exec -it ubuntu_vault_dev /bin/bash
vault status

16. Veras este error, esto es normal

vault status
Error checking seal status: Get "https://127.0.0.1:8200/v1/sys/seal-status": http: server gave HTTP response to HTTPS client

Esto es por que no hemos exportado la variable VAULT_ADDR, para hacerlo, ejecuta el siguiente comando

17. Exporta la variable VAULT_ADDR

export VAULT_ADDR='http://127.0.0.1:8200'

18. Si revisas vault status de nuvo esta vez te mostrara algo parecido a esto

root@60af5e1b7139:/# vault status
Error checking seal status: Get "https://127.0.0.1:8200/v1/sys/seal-status": http: server gave HTTP response to HTTPS client
root@60af5e1b7139:/# export VAULT_ADDR='http://127.0.0.1:8200'
root@60af5e1b7139:/# vault status
Key             Value
---             -----
Seal Type       shamir
Initialized     true
Sealed          false
Total Shares    1
Threshold       1
Version         1.5.4
Cluster Name    vault-cluster-8c2a9073
Cluster ID      240d9b52-07ed-148d-3395-ea0e4eb082a3
HA Enabled      false

Bien hecho, tu servidor vault en modo dev esta funcionado, ya revisamos un comando basico para obtener informacion de vault, algo para tener en cuenta es que cuando corres vault en modo dev se exporta la variable VAULT_TOKEN de forma automatica con el root token, esto quiere decir que podemos correr cualquier comando que necesite niveles altos de autorización, vamos a probar esto

19. Ejecuta vault auth list

vault auth list
Path      Type     Accessor               Description
----      ----     --------               -----------
token/    token    auth_token_2f444c91    token based credentials
Esto demuestra que puedes ejecutar comandos de acceso privilegiado

En un servidor de producción, no tendrias permisos para ejcutar el ultimo comando sin autentificarte como root

Recuerda que Vault en modo dev y todo lo que ejecutes no sea persistente.

para detener el servidor basta con presionar control + C en la terminal donde esta corriendo

Para salir del contenedor para regresar el host solo ejecutamos el comando exit

exit

Para limpiar despues de hacer pruebas , hay que detener el contenedor, eliminar el contenedor y eliminar la imagen en ese orden

docker container stop ubuntu_vault_dev
Detenemos el contenedor
docker container rm ubuntu_vault_dev
Eliminamos el contenedor
docker image rm ubuntu:latest
Eliminamos la imagen de ubuntu

References: