Autenticación, autorización y audit logging - CONABIO/dev-for-solr GitHub Wiki
Solr nos permite hacer la administración de la seguridad en tres rubros principales: autenticación, autorización y audit logging. Para ello se apoya de distintos plugins oficiales y externos.
Para autenticación se puede utilizar:
- Kerberos
- Hadoop
- BasicAuthPlugin
- JWT (Jason Web Token)
Para autorización (control de accesos) es posible usar la autorización basada en reglas.
Para audit logging se puede usar:
- Solr log
- Multi-destination
Independientemente del tipo de autenticación elegida, se debe crear un archivo llamado security.json el cuál tendrá los bloques authentication y authorization. Este archivo deberá vivir en SOLR_HOME, que es el directorio donde se almacenan nuestros cores y puede ser identificado por la presencia del archivo solr.xml en la misma carpeta. Un ejemplo que podemos encontrar en la documentación de Solr para este archivo es el que sigue:
{ "authentication":{ "blockUnknown": true, "class":"solr.BasicAuthPlugin", "credentials":{"solr":"IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c="}, "realm":"My Solr users", "forwardCredentials": false }, "authorization":{ "class":"solr.RuleBasedAuthorizationPlugin", "permissions":[{"name":"security-edit", "role":"admin"}], "user-role":{"solr":"admin"} }}
En el bloque de authentication debemos indicar en la clase el plugin utilizado, en este caso fue BasicAuthPlugin. Dentro de credentials irán los usuarios seguido de su contraseña codificada. realm será sustituido por el mensaje que tiene a su derecha en la ventana de inicio de sesión. Por otro lado, el bloque de authorization nos permite definir los permisos para cada usuario y su rol.
El archivo security.json podrá estar almacenado de forma local si usamos Solr en modo standalone (local). En caso de estar usando SolrCloud, debemos cargar dicho archivo a ZooKeeper.
Una vez creado el archivo y cargado a la ubicación específicada es necesario reiniciar Solr en todos sus puertos. Por ejemplo:
$ bin/solr restart -p 8989
Cuando intentemos volver a acceder al localhost nos aparecerá lo siguiente
Como vimos en la imagen anterior, si queremos realizar consultas desde la interfaz web debemos ingresar con nuestras credenciales al Login Screen. También sabemos que se pueden hacer las solicitudes desde terminarl mediante comandos curl. Usualmente sólo tendríamos que ejecutar lo siguiente:
curl localhost:<puerto>/solr/<nombre_del_core>/select?q=*:*
Pero como ahora queremos acceder con nuestras credenciales debemos agregar la bandera -- user:
curl --user <usuario>:<contraseña_sin_codificar> localhost:<puerto>/solr/<nombre_del_core>/select?q=*:*
Para esto existen dos puntos de entrada http://localhost:8983/solr/admin/authentication o http://localhost:8983/api/cluster/security/authentication
Si usamos el primer punto de entrada tendríamos que correr lo siguiente en terminal:
curl --user <usuario>:<contraseña_sin_codificar> http://localhost:<puerto>/solr/admin/authentication -H 'Content-type:application/json' -d '{"set-user": {"nuevousuario1":"contraseñausuario1", "nuevousuario2":"contraseñausuario2"}}'
Referencias:
