Skip to Content

Hashicorp Vault: Instal·lació amb Docker i treball amb secrets

1 de juny de 2026 per
Ilimit Comunicacions S.L., Oscar Mas

Soc Òscar Mas i en l'article anterior vam veure què és HashiCorp Vault, els seus avantatges i com pot ajudar a protegir informació sensible dins d'entorns DevOps i cloud. En aquesta segona part farem una instal·lació pràctica de Vault amb Docker i veurem una miqueta el funcionament de Vault: la configuració inicial del servei, els primers passos per començar a emmagatzemar i gestionar secrets de manera segura.

Tota la instal·lació de Vault s'ha fet en el mateix equip basat en debian, però realmetn el sistema operatiu no es important, ja que tot es basa en contendors docker.

Configuració inicial de HashiCorp Vault

El primer que necessitem és passar-li a Vault la configuració perquè guardi les dades de manera persistent en el sistema de fitxers local (/vault/file). Indicarli que el servei escolti pel port 8200 sense TLS (recorda que aixó es un lab) i habilitar la interfície gràfica d'usuari (UI). La directiva disable_mlock permet que el procés s'executi sense privilegis elevats de memòria, ideal per a entorns de proves o contenidors.

root@vault:~# apt-get update && apt-get install -y jq
root@vault:~# mkdir -p /etc/vault-server/{config,file}
root@vault:~# cat <<EOF >> /etc/vault-server/config/vault.json
{
    "disable_mlock": true,
    "backend": {
      "file": {
        "path": "/vault/file"
      }
    },
    "listener": {
      "tcp":{
        "address": "0.0.0.0:8200",
        "tls_disable": 1
      }
    },
    "ui": true
}
EOF

Configuració de Nginx com a proxy invers

Un cop creat el fitxer de configuració de Vault, realitzarem la configuració d'un servei d'Nginx per posarlo davant com a proxy invers, per centralitzar l'accés a Vault a través del port estàndard HTTP (80), facilitant la connectivitat sense haver d'especificar el port 8200 manualment. 

root@vault:~# mkdir -p /etc/nginx/conf.d/

root@vault:~# vim /etc/nginx/conf.d/default.conf
upstream vault {
  server vault:8200 max_fails=3;
}
server {
  listen *:80;
  server_name _;
  location /healthz {
      stub_status;
  }
  location / {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://vault;
  }
}

Desplegament dels contenidors amb Docker Compose

Un cop fetes les configuracions del Nginx i de Vault, ara només ens queda crear els contenidors perque agafin aquesta configuració:

root@vault:~# cat <<EOF >> /etc/docker-compose/docker-compose.yaml
services:
  nginx:
    container_name: 'nginx'
    hostname: 'nginx'
    image: 'nginx:1.25.3-alpine'
    depends_on:
      - 'vault'
    ports:
      - '80:80'
    volumes:
      - '/etc/localtime:/etc/localtime:ro'
      - '/etc/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf'
  vault:
    container_name: vault
    hostname: vault
    image: hashicorp/vault:1.17.5
    restart: always
    environment:
      VAULT_ADDR: http://localhost:8200
    ports:
      - "8200:8200"
    cap_add:
      - 'IPC_LOCK'
    volumes:
      - /etc/vault-server/config/vault.json:/etc/vault-server/config/vault.json
      - /etc/vault-server/file:/vault/file
      - /etc/localtime:/etc/localtime:ro
    command: "vault server -config=/etc/vault-server/config/vault.json"
EOF

Aixecarem els contenidors i verificarem que tot estigui correcte:

root@vault:~# docker-compose -f /etc/docker-compose/docker-compose.yaml up -d

root@vault:~# docker ps -a
CONTAINER ID   IMAGE                    COMMAND                  CREATED         STATUS         PORTS                                       NAMES
d8581e800825   nginx:1.25.3-alpine      "/docker-entrypoint.…"   7 seconds ago   Up 6 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp           nginx
fcc757fc5331   hashicorp/vault:1.17.5   "docker-entrypoint.s…"   8 seconds ago   Up 7 seconds   0.0.0.0:8200->8200/tcp, :::8200->8200/tcp   vault

Inicialització de Vault i generació de claus Unseal

Un cop estigui tot aixecat, inicialitzarem el servidor de Vault, amb aixó el que aconseguirem es:

  • Genera les claus (Unseal Keys) necessàries per obrir Vault. Recordeu que quan el contenidor de Vault s'engega, està xifrat i bloquejat (estat sealed). No hi pot entrar ningú i no es pot llegir cap secret. Per poder utilitzar-lo, s'ha de "desbloquejar" (estat unseal).
  • Proporciona el Root Token. Un cop Vault està obert (estat unseal) , necessites una manera d'entrar-hi per començar a treballar. Aquest Root Token, et dona l'accés a Vault.
root@vault:~# docker exec -it vault vault operator init
Unseal Key 1: +Y8HDolAfpm/hwrZ72flgrAfj8aH1QwvlP2vf/2UyjaS
Unseal Key 2: 5id1ig/8u+bgN1HnPJQW8TQvyAT+o5vinTQ2/yUrvilA
Unseal Key 3: dAMRqHsU491x4bizhrIarYkmeEyqDy42uYGWHPBdlFyZ
Unseal Key 4: 0PI8LW7DzkUzxhoeOoYPEcSbbcSdTTufzt2iGMbF5Rdc
Unseal Key 5: i6PknfSwlOFukzmNMKKKoSGDjgLp70qhnBt3efJEh0Fs

Initial Root Token: hvs.xBV3t49lOCmaDrXrLQqN4AE6

Accés a Vault per GUI i CLI

A partir d'aquest punt, un cop tenim Vault inicialitzat i desbloquejat, disposem de dues vies principals per accedir-hi i gestionar els nostres secrets:

  • Via interfície gràfica (GUI): Ideal per a una gestió visual i intuïtiva. S'hi accedeix directament des del navegador web, on podrem introduir el nostre Root Token per xafardejar i gestionar-ho tot còmodament.
  • Via línia de comandes (CLI): la cual existeixen dues alternatives:

    • Des del nostre propi equip: Instal·lant el client local de Vault i connectant-nos-hi remotament configurant la variable d'entorn VAULT_ADDR.
    • Des del propi contenidor de Docker: Executant les comandes directament des de dins de la màquina amb docker exec, sense necessitat d'instal·lar res al nostre ordinador.

Per poder executar comandes directament des de dins del contenidor de Vault, primer hem d'obrir-hi una terminal dintre del contenidor. 

root@vault:~# docker exec -it vault sh

Heu de tenir en compta que a partir d'aquí totes les comandes es llencán dintre del contenidor. 

Desbloquejar Vault amb les Unseal Keys

Per defecte, Vault s'ha inicialitzat amb un llindar de seguretat de 3 de 5: t'ha donat 5 claus, però només en necessites 3 de qualsevol d'elles per poder-lo obrir. Dins de la consola del contenidor, executa la comanda de desbloqueig tres cops i posarem qualsevol de les claus, sense repetir cap:

/ # vault operator unseal
/ # vault operator unseal
/ # vault operator unseal

Un cop posades les tres claus, validarem que Vault està desbloquejat (estat unseal)

/ # vault status | grep Sealed
Sealed          false

Ara que Vault està desbloquejat (estat unseal), necessites identificar-te com a administrador per poder començar a crear secrets. Per fer-ho, farem servir el Root Token que t'ha generat abans el sistema:

/ # vault login hvs.xBV3t49lOCmaDrXrLQqN4AE6

Si el token és correcte, rebràs un missatge de Success!. A partir d'aquest moment, ja tens el control absolut de Vault des de la línia de comandes del contenidor.

Crear i consultar secrets a Vault

Per defecte, Vault ve completament buit. La següent comanda activa un "motor de secrets" de tipus KV2 (explicat en el post anterior), que és per guardar parelles de dades (com per exemple usuaris i contrasenyes).

/ # vault secrets enable -description="Secrets" -version=2 -path=ansible kv

Una vegada tenim activat el "motor de secrets", ja podem començar a desar les nostres dades de forma segura:

/ # vault kv put ansible/myapp/config username='secret-username' password='secret-password'

Per consultar les dades que acabem de guardar, utilitzarem la comanda get. A més, hi afegirem el paràmetre -format=json, que ens retornarà la sortida en un format ideal:

/ # vault kv get -format=json ansible/myapp/config
...
      "password": "secret-password",
      "username": "secret-username"
...

Conclusió

Amb aquesta instal·lació ja disposem d'un entorn funcional de HashiCorp Vault preparat per començar a gestionar secrets de forma centralitzada i segura. Tot i tractar-se d'un entorn de laboratori, els conceptes d'inicialització, unseal, autenticació i emmagatzematge de secrets són els mateixos que trobarem en desplegaments de producció.

Espero que aquest article us hagi servit d'ajuda i si més no, us hagi estat útil per avançar en el mon de Vault.