OpenStack – El Servicio de Identidad: Keystone

Keystone es el Proyecto OpenStack que proporciona el Servicio de Identidad centralizado, un directorio común, encargado de almacenar y gestionar las credenciales de usuarios y de todos los servicios OpenStack, así cómo de ofrecer la autenticación y autorización de acceso a los diferentes recursos mediante Tokens, sería el equivalente a IAM en AWS. Además es capaz de integrarse con LDAP y con Active Directory. Veremos sus principales conceptos, un esbozo de su flujo de autenticación, y cómo trabajar con Keystone desde OpenStack CLI.

Continuando con la serie de Posts sobre OpenStack, después de que tratáramos hace unos días cómo instalar OpenStack en CentOS 7 con PackStack así como un breve introducción a OpenStack, y también viéramos una introducción al Dashboard y CLI de OpenStack, ahora llega el momento de conocer un poco mejor el Servicio de Identidad de OpenStack, el Proyecto Keystone, uno de los principales. Comenzamos.

Introducción a Keystone

Keystone es el Proyecto OpenStack que proporciona el Servicio de Identidad centralizado, un directorio común, encargado de almacenar y gestionar las credenciales de usuarios y de todos los servicios OpenStack, así cómo de ofrecer la autenticación y autorización de acceso a los diferentes recursos. Además es capaz de integrarse con LDAP y con Active Directory. Sería el equivalente a IAM en AWS. Es un componente core y muy importante de OpenStack. Los principales conceptos a tener en cuenta cuando hablamos de Keystone, son los siguientes:

  • Un usuario en Keystone, es la representación de una persona, de un sistema, de un servicio, o de cualquier otra cosa que necesite autenticarse para obtener un Token que le proporcione acceso a los recursos de OpenStack, que pueden estar localizados en uno u otro Proyecto.
  • Un Proyecto (o Tenant) permite agrupar los recursos que creamos en OpenStack (como podrían ser las Instancias, las Imágenes, las Redes, o los Volúmenes), actuando como un contenedor lógico de recursos. Sería algo similar al concepto de Suscripción o Grupo de Recursos de Azure, al concepto de Cuenta de AWS, o quizás el más directo sería el concepto de Proyecto de Digital Ocean.
  • Un Role permite asignar a un grupo de usuarios, un conjunto de permisos que les permita realizar determinadas tareas en OpenStack, ya sea con un alcance Global (todos los Proyectos) o local de un Proyecto en concreto.
  • Un Token, reduciéndolo a lo absurdo, es una cadena de texto, capaz de permitirnos el acceso a las APIs y recursos de OpenStack. Un usuario, al autenticarse recibe un Token que incluye el listado de Roles que tiene asignados, y que podrá en las siguientes peticiones de autorización. Cuando el usuario accede a un recurso, presenta su Token, lo que permite al recurso comprobar la validez del mismo, y permitir la operación siempre que sea una tarea para la que el usuarios tiene permisos suficientes. Un Token siempre tiene un tiempo de validez determinado, y además puede ser revokado en cualquier momento.
  • Un Dominio es una colección de Proyectos y Usuarios, que define un nivel de gestión adicional a los propios Proyectos.
  • Keystone mantiene un Catálogo de Servicios y EndPoints de cada uno de los componentes de OpenStack, una especie de Registro o Directorio de Servicios. Cada componente de OpenStack registra sus Servicios en este Catálogo, para facilitar su acceso a los diferentes usuarios de OpenStack, pero también al resto de Servicios cuando necesiten comunicarse entre sí.

Explicados estos primeros conceptos, lo siguiente es conocer el Flujo de Autenticación de OpenStack. Sin entrar en mucho detalle (por hacerlo fácil), lo podríamos resumir así: Un usuario al autenticarse obtiene un Token, que contiene el detalle de sus Roles y Proyectos. Ese Token es el que presenta el usuario a los servicios de OpenStack a los que necesita acceder (ej: Nova), los cuales pueden validarlos contra Keystone, y a su vez se lo pueden pasar a otros servicios (ej: Glance, Neutron, etc. – que también lo validarán contra Keystone) para así poder procesar la petición completa realizada por el usuario, validando la identidad y permisos del usuario en cada servicio.

Keystone y OpenStack CLI

Ya vimos en el anterior Post sobre el Dashboard de OpenStack, como realizar varias tareas en el Dashboard relacionadas con Keystone, como la creación de Proyectos y Usuarios, listado de Roles, asignación de Roles a Usuarios, etc. En general, el Dashboard es bastante intuitivo para operar Keystone, especialmente cuando tienes claro qué es lo que quieres hacer. Así que, para continuar, vamos a ver cómo trabajar con Keystone desde OpenStack CLI, que además nos vendrá muy bien si pretendemos automatizar (fundamental).

Podemos listar todos los comando que proporciona OpenStack CLI relacionados con el Servicio de Identidad (Keystone), con un comando como el siguiente.

source keystonerc_admin
openstack command list | grep openstack.identity.v3 -A 130

Vamos a listar todos los EndPoints de nuestra instalación de OpenStack, y seguidamente obtener los detalles del EndPoint de Keystone. Esto lo podemos hacer ejecutando los siguientes comandos:

source keystonerc_admin
openstack endpoint list
openstack endpoint show aa538d19982d4764b1eb608a51a35449

A continuación se muestra la ejecución de los comandos anteriores. Podremos ver que algunos servicios ofrecen varias versiones de su API, como ocurre con Cinder, que incluye cinderv2 y cinderv3.

Podemos mostrar el Catálogo de OpenStack con el siguiente comando.

openstack catalog list

Podemos listar los Proyectos existentes, crear un Proyecto nuevo, y mostrar sus propiedades, con comandos como los siguientes.

openstack project list
openstack project create elwillie
openstack project list
openstack project show 83fd86c808934c728365c0baf98c3171
openstack project show elwillie

A continuación se muestra la salida de ejecución de los comandos anteriores.

Podemos modificar un Proyecto, como en el siguiente ejemplo, en el que actualizamos su descripción, y luego mostramos su detalle.

openstack project set --description "ElWillie - infra Blog personal" elwillie
openstack project show elwillie

A continuación se muestra la ejecución de los comandos anteriores. Como se puede apreciar, es bastante sencillo y directo.

Podemos también, por ejemplo, crear usuarios y asignarles roles mediante OpenStack CLI, por ejemplo, ejecutando los siguientes comandos.

openstack role list
openstack user create --project elwillie --password-prompt willie
openstack role assignment list --project elwillie --user willie
openstack role add --project elwillie --user willie _member_
openstack role add --project elwillie --user willie admin
openstack role assignment list --project elwillie --user willie

A continuación se muetra la salida de ejecución de los comandos anteriores.

Una vez ejecutados dichos comandos, podremos comprobar su resultado accediendo al Dashboard en una ventana de incógnito y logándonos con el nuevo usuario que acabamos de crear programáticamente con OpenStack CLI, al igual que podremos ver el nuevo Proyecto que hemos creado.

Despedida y Cierre

Hasta aquí llega este Post de OpenStack, en el que hemos podido conocer un poco mejor el Servicio de Identidad de OpenStack (Proyecto Keystone), uno de los servicios más core, pudiendo comprender sus principales conceptos y como trabajar con Keystone desde OpenStack CLI, lo que nos permitirá además automatizar tareas para aumentar la productividad.

Poco más por hoy. Como siempre, confío que la lectura resulte de interés.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

diez + 18 =