En este post vamos a configurar e iniciar nuestro servidor Vault para producción esta es la parte 2.

Vamos a cubrir

  • Revisar la instalación de Vault
  • Crear los archivos de configuración de vault.
  • Revisar la instalación
  • Revisar la web UI.

Requisitos

  • Conocimiento básicos de comandos linux
  • Computadora Linux (Yo uso Ubuntu 20.04)
  • Conocimiento basico de Docker

Laboratorio:

  1. Conectate al contenedor docker que creamos en post anteriores usando el comando exec y entra al directorio de vault
docker container exec -it ubuntu_vault /bin/bash
cd /mnt/vault

2. Crea una carpeta para la creación de la configuración de vault y para los datos en /mnt/vault y entra al directorio

mkdir data config-files
cd config-files

3. Crea un archivo llamado vault.hcl.

touch vault.hcl

4. Edita el archivo con nano y escribe la siguiente información.

nano vault.hcl
storage "file" {
  path = "/mnt/vault/data"
}
listener "tcp" {
  tls_disable = 1
  address     = "0.0.0.0:8200"
}
ui = true
Tip, puedes copiar en terminal con control-V para guardar usa Control-O y Control-X para salir de nano. Si quieres saber mas del comando nano puedes verlo en la Documentacion de Ubuntu
  • La parte que describe el storage es el backend donde Vault va a guardar todos sus datos, vamos a poner los datos directamente en /mnt/vault/data
  • El tcp listener le dice a vault que va a escuchar en el puerto 8200 y va a responder desde cualquier interfaz, puede que quieras cambiar esto para usar el ip de tu interfaz
  • la parte que dice ui = true habilita el servidor grafico web de Vault UI

4. Bien tenemos lo basico para iniciar nuestro servidor, vamos a hacerlo, inicia con el comando vault server y le indicamos cual es el directorio de configuracion con la opcion -config=

vault server -config=/mnt/vault/config-files/

Si todo sale bien, veras algo asi

==> Vault server configuration:

             Api Address: http://127.0.0.1:8200
                     Cgo: disabled
         Cluster Address: https://127.0.0.1:8201
              Go Version: go1.14.7
              Listener 1: tcp (addr: "0.0.0.0:8200", cluster address: "0.0.0.0:8201", max_request_duration: "1m30s", max_request_size: "33554432", tls: "disabled")
               Log Level: info
                   Mlock: supported: true, enabled: true
           Recovery Mode: false
                 Storage: file
                 Version: Vault v1.5.4
             Version Sha: 1a730771ec70149293efe91e1d283b10d255c6d1

==> Vault server started! Log data will stream in below:

2020-09-29T20:59:05.391Z [INFO]  proxy environment: http_proxy= https_proxy= no_proxy=

En la información veras que tenemos la opción de memory lock (MLock) disponible y habilitada.

5. Exporta la variable VAULT_ADDR esto le dirá al entorno donde esta vault y en que puerto.

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

6. Vault se inicia en dos pasos, uno para cargar la configuracion, esta parte solo tienes que hacerlo una sola vez, a continuacion vamos a iniciarlo con operator init

vault operator init

Unseal Key 1: +Qkda2AKtmWZYVJx/NnGt8a/rMdkaE82qvQn510J5knc
Unseal Key 2: ViPzHqmtdCMR6ckPwwf/JK9ULlKXTg8epVF3bvZz7c5L
Unseal Key 3: Eu0HSzz20pzBFKR8c6kUBVQNbq7j7LDJ+WIE/lNg1nmV
Unseal Key 4: s73B19sP9kS/RFOTkPKWCepgclZNL5hSvro3I9FsJ5J0
Unseal Key 5: PupDoVSUXsphQ2cwrn4O6CWDg92p2axVtpJXnWAZ36tA

Initial Root Token: s.pJdMkJuZ6em1Kvwk92ehN8C2

Vault initialized with 5 key shares and a key threshold of 3. Please securely
distribute the key shares printed above. When the Vault is re-sealed,
restarted, or stopped, you must supply at least 3 of these keys to unseal it
before it can start servicing requests.

Vault does not store the generated master key. Without at least 3 key to
reconstruct the master key, Vault will remain permanently sealed!

It is possible to generate new unseal keys, provided you have a quorum of
existing unseal keys shares. See "vault operator rekey" for more information.

Una vez que lo inicies por primera vez, vas a ver los unseal keys y el root token, esta es la unica vez que esta información se va a mostrar asi que toma nota temporal de estos datos, Hashicorp no recomienda que los unseal keys se guarden juntos en el mismo lugar

Cuando inicia el servidor vault, iniciara en modo sellado, vas a necesitar las llaves de unseal para que vault pueda generar la master key y pueda desencriptar los datos del backend, si quieres leer mas acerca del proceso puedes verlo aqui Hashicorp Seal/Unseal

7. Vamos a usar el comando unseal para generar la master key.

Una vez que inicies el servidor, usa otra terminal para interactural con el.

Repite el siguiente comando tres veces usando 3 direferntes unseal keys para generar la master key.

vault operator unseal
Cada vez que vault inicie va a iniciar en modo sellado, si quieres saber mas del proceso puedes verlo en Hashicorp AutoUnseal

Al ponerlo la tercera vez veras que esta vez nos dice que no esta sellado Sealed false

8. Probemos el servidor.

Por ahora si quieres usar el servidor debes de obtener un error de autorización.
vault auth list

Error listing enabled authentications: Error making API request.

URL: GET http://127.0.0.1:8200/v1/sys/auth
Code: 400. Errors:

* missing client token
Error de autorización

Esto es por que todavía no has establecido un método para autorizarte con vault, en el modo dev vault automaticamente te autoriza con el root token, en producción debemos de establecer manualmente la autorizacion, vamos a usar el root token para autorizarnos, exportando la variable VAULT_TOKEN.

9. Exporta la variable VAULT_TOKEN

export VAULT_TOKEN=s.pJdMkJuZ6em1Kvwk92ehN8C2

Despues de esto podras ejecutar de nuevo el comando vault auth list sin problemas.

vault auth list
Path      Type     Accessor               Description
----      ----     --------               -----------
token/    token    auth_token_ceb73f6e    token based credentials
Hashicorp recomienda que no se use el root token y revocarlo despues de crear un token administrativo mas limitado.

10. Vamos a probar nuestro web UI, usemos por ahora el root token para autorizarnos.

Necesitas poner el IP de la maquina donde se instalo vault seguido del puerto, en mi caso es http://192.168.1.50:8200/ui

11. Ingresa con tu root token.

Bien hecho, terminamos la parte 2!

Limpieza.

  • Puedes mandar el comando control - C en la terminal donde se esta ejecutando para detener el servidor vault
  • Deten el contenedor con docker container stop ubuntu_vault
  • Si ya no vamos a usar el contenedor, podemos borrarla y borrar la imagen.
docker container rm ubuntu_vault
docker container image rm ubuntu
`

Referencias: