Cuando necesitamos almacenar contraseñas cifradas para nuestras integraciones, utilizamos la implementación de Secure Vault que viene incorporada en los productos de WSO2.
La Documentación de WSO2 nos muestra cómo agregar nuestras contraseñas utilizando la Consola de Gestión Carbon.
En una infraestructura Integración Continua/Entrega Continua, necesitamos un mecanismo para agregar estas entradas en la bóveda (vault) de manera automática. Veamos cómo lograr esto utilizando los Servicios de Administración.
Requisitos Previos
- Descargar y descomprimir WSO2 Enterprise Integrator 6.4.0 del sitio oficial. En este artículo, llamaremos a esta carpeta <EI_HOME>.
- Activar el WSDLs de los Servicios de Administración. Para ello, configura el elemento <HideAdminServiceWSDLs> como false en <EI_HOME>/conf/carbon.xml.
- Hay que configurar la Herramienta de Cifrado (Cipher Tool) en el servidor de WSO2 EI antes de utilizar la Security Vault:
- Abre una terminal y navega hasta el directorio <EI_HOME>
- Ejecuta bin/ciphertool.sh -Dconfigure
- Deberás ingresar la contraseña primaria del almacén de claves del servidor Carbon (por defecto, wso2carbon)
- Por último, inicia el perfil ESB del servidor WSO2 EI ejecutando bin/integrator.sh
- Nuevamente se te pedirá que ingreses la contraseña primaria del almacén de claves del servidor Carbon (Puedes evitar ingresar la contraseña manualmente siguiendo este procedimiento en la Documentación de WSO2)
Nota: Para este tutorial hemos utilizado las siguientes versiones de productos:
- macOS Mojave v 10.14.1
- WSO2 Enterprise Integrator 6.4.0
- SoapUI 5.4.0
Configuración para gestionar contraseñas de Secure Vault de manera programática
Un poco de teoría
Primero, debemos comprender cómo se almacenan las contraseñas para saber qué Servicios de Administración debemos utilizar.
Las contraseñas de la Secure Vault están almacenadas en el repositorio de Configuración del Registro. Están almacenadas como propiedades en la siguiente entrada:
/_system/config/repository/components/secure-vault
El nombre es el alias de la contraseña y el valor de la contraseña cifrada:
Usaremos entonces dos Servicios de Administración:
1. MediationSecurityAdminService: Para cifrar las contraseñas.
WSDL: https://localhost:9443/services/MediationSecurityAdminService?wsdl
2. PropertiesAdminService: Con este servicio daremos de alta, baja o modificaremos propiedades de la entrega del registro para gestionar nuestras contraseñas.
WSDL: https://localhost:9443/services/PropertiesAdminService?wsdl
Estos servicios SOAP necesitan la Autenticación Básica de un usuario que pertenezca al rol de administrador (el usuario y contraseña predeterminados para el administrador son admin/admin). Utilizaremos SoapUI para nuestras llamadas de muestra.
Dar de alta una contraseña
Vamos a crear la contraseña “my.password” con el alias my-key.
Primero, vamos a cifrar la contraseña utilizando la operación doEncrypt del servicio MediationSecurityAdminService.
Esta operación sólo necesita la contraseña a cifrar como parámetro:
Una vez cifrada la contraseña, invocaremos la operación setProperty oneWay de PropertiesAdminService cara configurar nuestra clave. Los campos son:
- Path: El directorio de entrada de secure-vault en el registro
- Name: Alias de la contraseña
- Value: Contraseña cifrada
El servicio responderá con 202 Aceptado y deberíamos ver nuestra clave en el registro. Para llo, ve a Registry > Browse en el menú principal:
Podemos utilizar el siguiente Servicio de Proxy personalizado para verificar la contraseña:
<proxy xmlns="http://ws.apache.org/ns/synapse" name="VaultTest" transports="http https" startOnLoad="true"> <description/> <target> <inSequence> <payloadFactory media-type="xml"> <format> <info> <my-key>$1</my-key> </info> </format> <args> <arg evaluator="xml" expression="wso2:vault-lookup('my-key')"/> </args> </payloadFactory> <respond/> </inSequence> </target> </proxy>
Si probamos el servicio, podemos ver que la contraseña ha sido configurada correctamente:
Modificar una contraseña
Ahora, podemos probar de modificar nuestra contraseña; el nuevo valor será “my.new.password”.
Primero, entonces, ciframos esta nueva contraseña utilizando MediationSecurityAdminService:
Una vez cifrada la contraseña, invocamos la operación updateProperty oneWay de PropertiesAdminService para configurar nuestra clave. Los campos son:
- Path: El directorio de entrada de secure-vault en el registro
- Value: Contraseña cifrada
- Name and Old Name: El servicio eliminará la propiedad Old Name y creará la propiedad Name. Configuraremos entonces ambas a my-key para actualizar el valor.
El servicio responderá con 202 Aceptado y deberíamos ver nuestra clave actualizada en el registro:
Si probamos el servicio con nuestro servicio de proxy VaultTest, deberíamos ver que la contraseña ha sido actualizada:
Eliminar una contraseña
Por último, eliminaremos la contraseña de la Bóveda (Vault). Para ello, sólo necesitamos utilizar la operación removeProperty oneWay de PropertiesAdminService. Los parámetros de entrada son:
- Path: El directorio de entrada de secure-vault en el registro
- Name: Alias a eliminar
El servicio responderá con 202 Aceptado y ya no deberíamos ver nuestra clave en el registro:
Si probamos el servicio utilizando nuestro servicio de proxy VaultTest, deberíamos ver que no obtenemos ningún valor para el alias my-key:
Conclusión
Con estos dos Servicios de Administración tienes las herramientas para gestionar de manera programática tus contraseñas de Secure Vault e integrarla en cualquier proceso que necesites.
Como un ejemplo del mundo real, podrías utilizar estos servicios en procesos de integración continua/entrega continua (CI/CD) para llenar la WSO2 Secure Vault con secretos de tu Bóveda (Vault) corporativa.