viernes, 3 de marzo de 2023

WSO2 Secret: Creación básica de claves

WSO2 permite la creación de claves que son manejadas por su propio Secure Vault. Una buena herramienta que nos permite el manejo de claves de forma segura e implementar buenas practicas. 

Para este ejemplo hemos utilizado la imagen: docker.wso2.com/wso2mi:1.2.0

Clave estáticas

Por un lado, las configuramos en el fichero de configuración, deployment.toml, sin encriptar. Deben ir entre comillas dobles y corchetes.

[secrets]
server_secret = "[secret_1]"
synapse_secret = "[secret_2]"

Si quieres activar dicha implementación en un entorno con VM lo podemos hacer ejecutando el comando:

sh <MI_HOME>/bin/ciphertool.sh -Dconfigure

Tras ejecutarlo, tendremos que indicar la clave de nuestro keystore. Que por defecto es, wso2carbon. Tras realizar este paso, si volvemos al fichero de configuración, podremos ver cómo las variables han sido encriptadas.

  • Como usarlas en fichero de configuración
Para ello solo tendremos que hacer referencias a las mismas, a través del alias que le dimos.

[keystore.primary]
password = "$secret{server_secret}"

  • Como usarlas en el contexto de synapse

En este caso, lo realizaremos a través del mediator property y el alias que le dimos

<property expression="wso2:vault-lookup('synapse_secret')" name="secret"/>

Clave dinámicas

Este es el funcionamiento básico, que nos ayuda a gestionar claves privadas, pero el manejo y creación de nuevas claves require el reinicio del servidor. Lo cual puede ser un inconveniente en determinados entornos. Por lo que la creación dinámica de estas contraseñas puede ser un punto fuerte. 

Podemos indicar claves dinámicas a través de variables del entorno o variables del sistema. Para ello primero necesitaremos encriptar las contraseñas, luego setear la variable y posteriormente configurarla.

Para encriptar la variable, podemos utilizar el Micro Integrator CLI o directamente ejecutar el comando:

sh <MI_HOME>/bin/ciphertool.sh

Este comando primero nos pedirá la clave del keystore y posteriormente la contraseña a encriptar, dos veces. 

Una vez echo esto, seteamos la variable. Por ejemplo, para almacenarla en el entorno, ejecutamos:

export env_secret=<ENCRYPTED_VALUE>

Y por último solo nos quedará configurarla. Ejemplo:

[secrets]
env_secret = "$env{env_secret}"

Ya podremos utilizar como vimos anteriormente en nuestros ficheros de configuración o en el código synapse. Ejemplo:

<log level="custom">
   <property name="MSG" value="secretExample_v1_reader_api - GET - /reader/ - init"/>
   <property name="keystore_pwd" expression="wso2:vault-lookup('keystore_pwd')" />
   <property name="env_secret" expression="wso2:vault-lookup('env_secret')" />
</log>

Obteniendo la siguiente salida

wso2mi    | [2022-06-15 10:15:15,424]  INFO {LogMediator} - {api:secretExample_v1_reader_api} 
    MSG = secretExample_v1_reader_api - GET - /reader/ - init, 
    keystore_pwd = wso2carbon, env_secret = envpwd

También podemos configurarlas a través de ficheros o secrets de Docker, con las cuales podremos aumentar el dinamismo de la configuración y utilización de las claves. 


No hay comentarios:

Publicar un comentario