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
[secrets]
server_secret = "[secret_1]"
synapse_secret = "[secret_2]"
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
[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