Home » Secretos KV en Vault
hashicorp vault

Secretos KV en Vault

Esta es una guía bastante completa y detallada de la gestión de Secretos KV en Vault. Aquí te enseño cómo almcenar datos sensibles de forma fácil, así como también la manera de gestionarlos en el tiempo.

En la gestión moderna de la infraestructura y el desarrollo seguro de aplicaciones, proteger la información sensible es una prioridad clave.

HashiCorp Vault se ha convertido en una herramienta esencial para almacenar y gestionar secretos de forma segura.

En este artículo, exploraré los Secretos KV en Vault, un motor de almacenamiento flexible y poderoso que permite gestionar credenciales, tokens de acceso y otros datos sensibles con controles de acceso robustos y cifrado avanzado.

Descubre cómo funcionan, sus casos de uso y las mejores prácticas para integrarlos en tu flujo de trabajo de DevOps.

Si llegaste de casualidad a este artículo, pero no conoces aún sobre esta herramienta, te recomiendo primero leer el artículo Qué es Hashicorp Vault.

1. Introducción

El almacenamiento de secretos KV (Key-Value o Clave-Valor) en Vault es una práctica fundamental en la seguridad de la información que consiste en guardar datos sensibles, como contraseñas, tokens de acceso y claves de cifrado, de forma segura y estructurada.

Esta metodología utiliza un formato simple donde cada dato confidencial se asocia a una clave única, permitiendo un acceso controlado y eficiente a la información.

ejemplo de secretos kv en Vault

En este artículo mostraré una guía práctica de configuración y uso de secretos KV en Vault.

2. Configuración

Antes que nada, es necesario tener una instalación lista de Hashicorp Vault para probar. Si no lo tienes, te puede interesar leer el artículo Instalación de Hashicorp Vault, o sino Probando Vault en Docker.

Por ello, a partir de este punto asumiré que ya tienes acceso a Vault con un usuario que tenga todos los privilegios, o sino el token de root.

2.1. Habilitación de motor de secretos KV en Vault

En Vault existen múltiples motores de secretos, tales como kv, aws, pki, kubernetes, y varios más. Por cada uno de ellos se puede habilitar una o más «instancias» de ellos en lo que se conoce «puntos de montaje» o «rutas».

A modo de ejemplo, puedes montar dos instancias del motor de secretos de tipo kv en las rutas de nombre «comun» y «produccion» de esta manera:

vault secrets enable -path comun kv-v2

vault secrets enable -path produccion kv-v2

El último valor que dice kv-v2 especifica el tipo de motor de secretos KV en su versión 2. Si en su lugar solo se escribe kv se asumirá que se usa la versión 1 (no recomendada).

Por la interfaz Web se seguiría esta secuencia: Secret Engines –> Enable new engine –> KV y asignarle un nombre a la ruta.

pasos 1 y 2 de creacion de motor de secretos KV en Vault

paso 3 de creacion de motor de secretos KV en Vault

pasos 4 y 5 de creacion de motor de secretos KV

2.2. Escritura de secretos KV en Vault

Una vez montada una ruta de secretos KV, puedes ya escribir, modificar y borrar todos los secretos que desees.

Pero recuerda, estos secretos deben ser porciones pequeñas de texto, de unos cuantos bytes o kilobytes a lo mucho. Esto no está pensado en almacenar grandes cantidades de datos como imágenes, adjuntos u otros contenidos. Solamente valores de texto simple.

Desde la línea de comandos puedes escribir secretos en alguna de las rutas creadas, por ejemplo así:

vault kv put comun/mysql/dev ip=172.16.10.23 user=root password=kBoH1FicdT

Esto muestra en pantalla un texto informativo con la metadata del secreto creado:

metadata del secreto kv creado

Lo que se hizo fue escribir un secreto de nombre «dev» dentro de «comun/mysql» y como contenido se le puso tres pares de clave-valor:

  • ip: 172.16.10.23
  • user: root
  • password: kBoH1FicdT

No es necesario que la ruta padre «mysql» exista dentro de «comun» para poder escribir «mysql/dev».

Si bien sigue una nomenclatura similar a los directorios en UNIX (separados por slash), no es requisito que los «directorios» padre sean primero creados. Pero, obviamente, la ruta base padre «comun» sí debe existir, dado que este es el punto de montaje base de una instancia del motor de secretos KV.

Aquí unos ejemplos más:

vault kv put comun/mysql/prod ip=172.16.10.91 user=root password=FGcM19Net0oHHuufHT
vault kv put comun/router usuario=admin password=p4ssw0rd13 url=http://172.16.0.1
vault kv put comun/licencias/software/win10 key=NPPR9-FWDCX-D2C8J-H872K-2YT43

De forma gráfica, lo harías así: Secret Engines –> comun –> Create secret y completar el nombre y contenido del secreto.

pasos 1 y 2 de la creación de un secreto KV en Vault

paso 3 de la creación de un secreto KV en Vault

pasos 4, 5, 6 y 7 de la creación de un secreto KV en Vault

En la interfaz Web es más amigable el proceso, pues incluso se puede alternar entre visualizar u ocultar el valor del secreto.

2.3. Lectura de secretos KV en Vault

En la línea de comandos la lectura de secretos puede constar de dos acciones: «listar» y «leer»

Dado que los secretos se almacenan de forma jerárquica, similar a una estructura de archivos y directorios en UNIX, es necesario poder listar los contenedores y secretos. Para ello se usan estos comandos:

vault kv list comun
vault kv list comun/mysql
vault kv list comun/mysql/dev
vault kv get comun/mysql/dev

En el listado mostrado por Vault para las rutas KV, cada entrada puede ser un contenedor o un secreto. El contenedor termina en el símbolo slash y el secreto no lleva ese símbolo al final. Esta imagen puede aclarar mejor el tema:

listado y lectura de secretos explicados en imagen

Como se explica en la imagen, los contenedores se listan con el subcomando list, mientras que los secretos se leen con el subcomando get.

Importante: Un detalle no menor es que la metadata mostrada en pantalla indica que se tiene la versión 1 del secreto.

En la interfaz Web de Vault es aún más sencillo listar y revisar los secretos solo haciendo clics de forma intuitiva. Esta imagen resume la secuencia a seguir para encontrar y leer un secreto:

secuencia visual de lectura de secretos KV

De modo similar a lo mostrado en la línea de comandos, en la interfaz Web también se aprecia que el secreto en cuestión está en su versión 1.

2.4. Actualización de secretos KV en Vault

Actualizar un secreto no es más que volver a escribir datos, lo cual crea una nueva versión del mismo.

Por ejemplo, en así lo haría en la línea de comandos:

vault kv put comun/mysql/dev ip=172.16.10.23 user=root password=NuevoPassword

En la siguiente imagen se ve que el secreto se ha actualizado a su versión 2:

actualizacion de secretos en CLI

En la interfaz Web de Vault, simplemente hay que dar clic en «Create new version»:

actualizacion de secretos en Web UI

Importante:

  • El motor de secretos KV v2 soporta versionamiento de secretos, mientras que el motor KV v1 no soporta dicha funcionalidad.
  • Cuando se crea una nueva ruta de secretos KV v2, la cantidad de secretos máxima almacenada por cada secreto es ilimitado. Esto puede generar un aumento en el consumo de espacio en disco, pero también es posible limitar un máximo definido (Ejm: 10).
  • Cada secreto, además de los datos sensibles, almacena también metadatos los cuales informan sobre las versiones, sus fechas de creación, entre otros datos importantes.

2.5. Gestión de versiones de secretos

Los Secretos KV en Vault, asumo por defecto la versión 2, soportan versionamiento como ya lo mencioné antes.

En la línea de comandos, así es como puedes consultar cuántas versiones existen de un secreto:

vault kv metadata get comun/mysql/dev

Acá se ve que hay dos secretos, siendo la 2 la vigente:

consulta de versiones de un secreto en CLI

En la interfaz Web, es más fácil consultar esta información:

consulta de versiones de un secreto en Web UI

Ahora, si quieres ver el valor de un secreto en una versión anterior, lo haces así desde la línea de comandos:

vault kv get -version 1 comun/mysql/dev
lectura de una versión previa de un secreto en CLI

En la interfaz Web UI tienes que seleccionar la versión a consultar:

lectura de una versión previa de un secreto en Web UI

2.6. Eliminación de secretos y versiones

Los Secretos KV en Vault que he mostrado aquí soportan versionamiento. Por ello, a la hora de intentar eliminar un secreto y/o una de sus versiones tienes tres alternativas:

  1. Eliminar una versión de secreto (recuperable)
  2. Destruir una versión de secreto (no recuperable)
  3. Destruir el secreto y todas sus versiones (no recuperable)

A continuación explicaré cada una de estas tres opciones. Pero, para facilitar los ejemplo posteriores, primero voy a crear tres nuevas versiones del secreto comun/mysql/dev como sigue:

vault kv put comun/mysql/dev ip=172.16.10.23 user=root password=p4ssw0rd

vault kv put comun/mysql/dev ip=172.16.10.23 user=root password=R4nd0m24

vault kv put comun/mysql/dev ip=172.16.10.23 user=root password=Secret666

Ahora consultaré la lista de versiones existentes y deberían aparecer 5 en total:

vault kv metadata get comun/mysql/dev
listado de versiones de un secreto
2.6.1. Eliminación y recuperación de una versión de secreto

Desde el CLI es simple. Por ejemplo, si deseo eliminar las versiones 3 y 5 haces esto:

vault kv delete -versions 3,5 comun/mysql/dev

Luego, al consultar las versiones del secreto se aprecia que la 3 y la 5 tienen el atributo deletion_time con una hora y fecha válida, lo cual indica que fueron eliminados.

vault kv metadata get comun/mysql/dev
listado de versiones de secretos luego de eliminación

La recuperación de una versión de secreto (por ejemplo la 3) es también fácil:

vault kv undelete -versions 3 comun/mysql/dev

Esto permite poder acceder nuevamente a la información almacenada en esa versión del secreto.

2.6.2. Destrución de una versión de secreto

Esto destruye permanentemente la versión del secreto deseado, sin posibilidad alguna de recuperarlo.

Por ejemplo, para destruir las versiones 3 y 5 se ejecuta esto:

vault kv destroy -versions 3,5 comun/mysql/dev

El resultado posterior a la eliminación es evidente en la siguiente imagen:

consulta de versiones de secretos KV destruidos
2.6.3. Destruir el secreto y todas sus versiones

Esta acción es irrecuperable, pues destruye todas las versiones de un secreto:

vault kv metadata delete comun/mysql/dev

Así luce el resultado de la operación:

destrucción total de un secreto y posterior consulta del mismo

El mensaje de error en color rojo es claro: el secreto ya no existe más.

3. Conclusión

Los secretos KV en Vault en su versión 2, la que soporta versionamiento, son bastante funcionales y potentes.

La versatilidad de opciones que Hashicorp Vault brinda para almacenar, leer, modificar y eliminar versiones de secretos tiene importantes ventajas para una correcta gestión de datos sensibles en las organizaciones, reduciendo de este modo la posibilidad de pérdida accidental o mal intencionada de los mismos.

Esta guía ha sido bastante extensa porque el tema lo amerita, para así poder mostrar las diferentes alternativas que tienes a tu disposición.

En un posterior artículo explicaré cómo integrar otras aplicaciones y herramientas para que consuman Secretos KV en Vault de formas que son bastante comunes en las empresas.

Espero te haya sido de utilidad este artículo.

Post navigation

Deja un comentario

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *