Roles en Openstack: Cómo crear roles con permisos específicos

GESTIONAR ROLES EN OPENSTACK

En este artículo vamos a aprender a gestionar los roles en Openstack para poder crear permisos específicos a cualquier rol que creemos.

Por defecto en Openstack cuando creamos un rol no podemos asignarle ningún tipo de permiso mediante comandos.

Esto nos limita bastante porque tener un rol sin permisos específicos no sirve de mucho.

Por eso he creado este artículo en el que voy a contarte como podemos darle permisos a un rol en Openstack.

Te recomiendo que antes de seguir eches un ojo a este artículo sobre permisos en Openstack para que entiendas como funcionan los permisos a usuarios y grupos en los distintos proyectos de Openstack.

Ah y como siempre, si quieres puedes seguir este artículo en video

Ver el video Cómo gestionar roles en Openstack de manera avanzada

Cómo editar un rol en Openstack

Para editar un rol en Openstack tenemos que visitar siempre el mismo archivo pero en los distintos servicios.

El archivo en concreto se llama policy.json y está en la siguiente ruta:

/etc/”SERVICIO”/policy.json

Es decir que si queremos editar los permisos de cinder debemos editar la siguiente ruta

/etc/cinder/policy.json

Cuando lo editemos nos mostrará lo siguiente:

roles en openstack 1En la parte de arriba de este fichero nos encontramos los roles creados.

roles en openstack 2La parte de la izquierda es el nombre que podemos elegir libremente y la parte de la derecha es el rol que asignamos a ese nombre.

Es decir que si queremos utilizar el rol admin u owner, como vemos en la imagen tendríamos que asignarle “default” a cualquier permiso.

En la parte de abajo tenemos los permisos de este servicio. En el ejemplo estos permisos son los de Cinder.

roles en openstack 3Para asignar un rol a este permiso solo tenemos que escribir el nombre dentro de las comillas en el permiso específico.

“voume:create”: “rule:default”,

 

Asignar un permiso a un rol en Openstack

Vamos a crear un nombre y asignarle un rol para después asignar este nombre a un permiso y por lo tanto asignarle ese rol a ese permiso.

Parece un lío pero es bastante sencillo.

Creamos un nombre entre comillas y le asignamos un rol. Por ejemplo vamos a llamarlo “admin_probando” y le voy a dar el rol de admin.

“admin_probando”: “role:admin”,

Ahora voy a asignar esto al permiso crear volumen

“volume:create”: “rule:admin_probando

Quedaría de la siguiente manera:

roles en openstack 4Ten cuidado con utilizar la palabra role y rule donde corresponde y de poner las comillas y la , al final.

Esto significa que ahora mismo solo un admin puede crear un volumen.

Por defecto si lo dejas vacío significa que todos pueden crear un volumen.

Para que todo esto surja efecto tenemos que guardar el fichero y reiniciar el servicio.

En el caso de Cinder el servicio que hay que reiniciar es:

openstack-cinder-api.service

systemctl restart openstack-cinder-api.service

Si ahora intentamos crear un volumen con un usuario que no tiene rol admin (ojo, el rol, no el nombre de usuario admin que es distinto) nos dará el siguiente mensaje de error.

roles en openstack 5

Asignar un permiso a varios roles en Openstack

Para asignar un permiso a varios roles en Openstack se hace de la siguiente manera.

Vamos a crear primero el rol “operator” para ver esto con mas profundidad. Desde el CLI puedes utilizar este comando.

openstack role create operator

Ahora vamos a asignar al permiso “crear volumen” a los roles de “admin” y “operator”.

Para ello creamos un nombre por ejemplo “admin_y_operador” y le asignamos los roles de la siguiente manera:

“admin_y_operador”: “role:admin or role:operator”,

Como ves la forma correcta es utilizando los dos roles y entre medias un “or”.

Ahora solo nos faltaría asignar este nombre al permiso “crear volumen”.

“volume:create”: “rule:admin_y_operador”,

roles en openstack 6Como siempre ten cuidado con los espacios, comillas y comas.

Volvemos a reiniciar el servicio y ¡listo!

systemctl restart openstack-cinder-api.service

Ahora sólo los usuarios con el rol de “admin” u “operator” en el proyecto, pueden crear volúmenes.

Esto puedes utilizarlo con cualquier tipo de permiso.

Solo tienes que irte al servicio y editar el permiso que corresponda.

Espero que te haya servido este artículo en el que hemos aprendido como gestionar los roles en Openstack de manera avanzada.

Si te gusta, ¡Comparte!. Gracias por leer y nos vemos en el siguiente artículo.

Compartir
CEO y fundador de Virtualiza Desde Zero, vExpert2017-2018, Certified Openstack Administrator, VCP5, VCP550, VCP6-DCV Y VCP6.5-DCV, cuenta a sus espaldas con más de 8 años en el mundo de la virtualización de Sistemas Operativos, un mundo que le encanta. Además es Instructor Oficial Openstack. Los perros, la tecnología y las motos son sus otras pasiones.

3 Comentarios

  1. Hola Manuel,

    creo que es importante mencionar que a partir de Newton, las políticas por defecto se han movido a codigo. Por ejemplo, en OpenStack Compute nova el fichero /etc/nova/policy.json está vacio [1], y para generarlo tienes que hacer:

    oslopolicy-policy-generator –namespace nova –output-file nova-policy.json

    Esto también se aplica a los servicios Ironic, Keystone.

    Saludos

    [1] http://specs.openstack.org/openstack/nova-specs/specs/newton/implemented/policy-in-code.html

      • Hola Pedro. En las versiones que yo he tocado de Ocata y Pike los ficheros de la mayoría de servicios siguen en esta ruta. Lo he revisado por si acaso y Nova, Cinder, Keystone… todos están en /etc/SERVICIO/policy.json. Desconozco si finalmente lo llegaron a integrar o lo cambiaron. De todas formas muchas gracias por el aporte. ¡Lo tendré en cuenta si en algún momento no encuentro los ficheros jeje!. Un saludo

Dejar respuesta

Please enter your comment!
Please enter your name here

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.