Saltar al contenido principal

Vault Connector

1. Visión General​

El componente Vault Connector (vault) permite leer o grabar secretos en un motor Key-Value (KV) de HashiCorp Vault u OpenBao.

Soporta tanto el motor KV v1 (estático) como el KV v2 (versionado), manejando las diferencias de API de forma transparente. El componente funciona solo como acción de salida, es decir, no puede usarse como disparador de entrada.

Úsalo cuando el flujo necesita recuperar credenciales sensibles (contraseñas de base de datos, claves de API) o almacenar información protegida de forma segura.

2. Prerrequisitos​

  • Una instancia de Vault u OpenBao accesible por la plataforma.
  • Un motor de secretos del tipo Key-Value (KV) habilitado en Vault.
  • Credenciales (Token o AppRole) con permisos adecuados en la ruta (path) deseada.

3. Autenticación y Conexión​

El conector soporta dos métodos de autenticación: AppRole (recomendado para servicios) y Token.

CampoObligatorioTipoDescripciónEjemplo
addressSíTextoURL completa de la instancia de Vault/OpenBao."https://vault.ejemplo.com"
authMethodNoTextoMétodo de autenticación: approle o token. Por defecto: "approle"."approle"
tokenSí*TextoToken de Vault. Obligatorio si authMethod es token."hvs.CAES..."
roleIdSí**TextoRole ID del AppRole. Obligatorio si authMethod es approle."0a52..."
secretIdSí**TextoSecret ID del AppRole. Obligatorio si authMethod es approle."1e2b..."
tlsSkipVerifyNoTextoSi es "true", ignora la validación del certificado SSL (no recomendado en producción)."false"
caCertNoTextoCertificado CA en formato PEM para validar conexiones HTTPS."-----BEGIN CERTIFICATE-----..."

Consejo: utiliza los secrets de la plataforma para almacenar tokens y credenciales del AppRole, referenciándolos en el componente con {$.secrets.nombre_del_secreto}.

4. Configuración / Operaciones Soportadas​

El componente tiene dos operaciones principales: read (lectura) y write (escritura).

Parámetros Comunes​

CampoObligatorioTipoDescripciónEjemplo
operationNoTextoOperación a realizar: read o write. Por defecto: "read"."read"
mountSíTextoPunto de montaje del engine KV en Vault."secret"
pathSíTextoRuta del secreto dentro del mount."myapp/config"
kvVersionNoTextoVersión del motor KV: v1 o v2. Por defecto: "v2"."v2"

Operación: Read (Lectura)​

Recupera un secreto de Vault.

CampoObligatorioTipoDescripciónEjemplo
keyNoTextoSi se completa, devuelve solo el valor de esta clave. Si está vacío, devuelve todo el objeto del secreto."password"
cacheTtlNoNúmeroTiempo en segundos para cachear el valor leído, evitando llamadas repetitivas a Vault.60

Operación: Write (Escritura)​

Crea o actualiza claves en un secreto. Importante: la escritura en el conector es no destructiva por defecto (no elimina claves que no fueron listadas).

CampoObligatorioTipoDescripciónEjemplo
overwriteNoTextoSi es "true", actualiza claves existentes. Si es "false", falla si alguna clave listada ya existe. Por defecto: "false"."true"
dataModeNoTextoModo de envío de los datos: fields (objeto) o raw (cadena JSON). Por defecto: "fields"."fields"
dataSí***ObjetoMapa de clave/valor a grabar (usado en el modo fields).{"api_key": "123"}
dataRawSí***TextoCadena JSON que representa el objeto a grabar (usado en el modo raw).{"db_user": "admin"}

*** Obligatorio según el dataMode elegido.

5. Ejemplos Prácticos​

Lectura de una contraseña de base de datos​

Busca la clave password en el secreto ubicado en secret/myapp/database.

Configuración del componente:

{
"componentName": "vault",
"configurations": {
"operation": "read",
"authMethod": "approle",
"address": "https://vault.internal:8200",
"roleId": "{$.secrets.vaultRoleId}",
"secretId": "{$.secrets.vaultSecretId}",
"mount": "secret",
"path": "myapp/database",
"key": "password",
"kvVersion": "v2"
}
}

Respuesta:

{
"data": {
"password": "contrasena-super-segura"
},
"metadata": {
"version": 3,
"created_time": "2024-08-20T15:00:00Z"
}
}

Escritura de múltiples campos (Upsert)​

Actualiza o crea las claves token y expires_at en la ruta secret/myapp/integration, preservando otras claves que ya existan en el mismo secreto.

Configuración del componente:

{
"componentName": "vault",
"configurations": {
"operation": "write",
"overwrite": "true",
"authMethod": "token",
"address": "{$.env.vault_url}",
"token": "{$.secrets.vaultToken}",
"mount": "secret",
"path": "myapp/integration",
"dataMode": "fields",
"data": {
"token": "{$.body.newToken}",
"expires_at": "2024-12-31"
}
}
}

6. Errores Comunes y Troubleshooting​

Error / SíntomaCausa probableCómo resolverlo
Vault is sealed or unavailableVault está en estado "sealed" o inaccesible por red.Verificar el estado de Vault y la conectividad.
Permission deniedEl Token o AppRole no tiene capacidades (read, create, update, patch) en el path.Revisar las políticas (policies) asociadas a la credencial. Para overwrite: true en KV v2, el permiso patch es necesario.
Key(s) [...] already existIntento de escritura con overwrite: false en claves ya existentes.Cambiar overwrite a "true" o garantizar que la clave sea nueva.
Configuration 'address' is requiredFalta completar uno de los parámetros obligatorios (address, mount o path).Revisar la configuración del componente.
A write operation requires at least one key/valueIntento de escritura sin proveer datos en data o dataRaw.Proveer los campos a grabar.