Skip to content

Desplegando ms-rbac: Autorización Dinámica en Tiempo Real

Con los roles definidos por ms-roles, ahora necesitamos el “guardia de seguridad” que decida qué puede hacer cada rol. Desplegaremos ms-rbac (Role-Based Access Control), el microservicio responsable de gestionar la asignación de permisos a los roles.

ms-rbac actúa como la fuente de verdad central para la autorización. Mientras que la autenticación (quién eres) es manejada por Entra ID, la autorización (qué puedes hacer) es gobernada por ms-rbac. Este servicio permite definir políticas granulares, como “el rol ‘Editor’ puede hacer POST en /api/products pero no DELETE”.

El Mecanismo de Autorización en Tiempo Real

Section titled “El Mecanismo de Autorización en Tiempo Real”

La verdadera magia de ms-rbac se revela en cómo interactúa con el resto del ecosistema a través de la biblioteca CodeDesignPlus.Net.Security, que está integrada en todos nuestros microservicios.

Diagrama de interacción entre la librería de seguridad y ms-rbac

Este diagrama ilustra un flujo inteligente y optimizado:

  1. Sincronización en Segundo Plano: Cada microservicio (ej. ms-users) tiene un RefreshRbacBackgroundService corriendo. Periódicamente, este servicio realiza una llamada gRPC a ms-rbac para obtener la lista actualizada de permisos que le conciernen.
  2. Caché en Memoria: Los permisos obtenidos se almacenan en la memoria del microservicio. Esto es una optimización de rendimiento crucial: evita que se tenga que llamar a ms-rbac en cada petición entrante.
  3. Petición Entrante: Cuando una petición llega a un endpoint de ms-users, un middleware de RBAC se activa.
  4. Validación Local: El middleware consulta la caché en memoria para verificar si los roles del usuario (obtenidos del token JWT) tienen los permisos necesarios para acceder a ese endpoint específico. Si los tienen, la petición continúa; si no, se devuelve un error 403 Forbidden.
Diagrama de Flujo CQRS de ms-rbac
  • REST y gRPC: ms-rbac expone una API REST para la gestión de permisos y una API gRPC optimizada para que otros servicios consulten las políticas de autorización.
  • Casos de Uso: La lógica se separa en Commands (para crear/modificar políticas) y Queries (para consultar permisos).
Diagrama de Agregado de Dominio de ms-rbac

El RbacAggregate es el corazón del dominio. Gestiona una lista de RbacPermissionEntity, que asocia un Role con un Resource (un endpoint específico definido por su Módulo, Servicio, Controlador y Método HTTP).

  1. Configurando los Secretos en Vault ms-rbac requiere las credenciales base para conectarse a RabbitMQ, Redis y MongoDB.

    Terminal window
    vault kv put -mount=inventory-keyvalue ms-roles `
    "RabbitMQ:UserName=<USERNAME_FROM_RABBITMQ_SECRET>" `
    "RabbitMQ:Password=<PASSWORD_FROM_RABBITMQ_SECRET>" `
    "Redis:Instances:Core:ConnectionString=<CONNECTION_STRING_FROM_REDIS>" `
    "Mongo:ConnectionString=<VAULT_TRANSIT_PASSWORD>"
    Creando los secretos para ms-rbac en Vault

    Verificamos que los secretos se hayan guardado correctamente en la interfaz web de Vault.

    Verificando los secretos de ms-rbac en la UI de Vault
  2. Desplegando los Entrypoints con Helm Desplegaremos los dos entrypoints de ms-rbac: REST para gestión y gRPC para la comunicación interna.

    • Preparar los Archivos values.yaml Necesitamos dos archivos, values-rest.yaml y values-grpc.yaml, muy similares a los que usamos para ms-services. El primero incluirá la configuración del VirtualService para la API REST, mientras que el segundo solo contendrá la configuración base.

    • Ejecutar el Despliegue con Helm Instalamos ambos charts en el namespace inventory.

      Terminal window
      # Desplegar el entrypoint REST
      helm upgrade --install ms-rbac-rest codedesignplus/ms-rbac-rest -f ./values-rest.yaml --namespace inventory
      # Desplegar el entrypoint gRPC
      helm upgrade --install ms-rbac-grpc codedesignplus/ms-rbac-grpc -f ./values-grpc.yaml --namespace inventory
      Instalando el Helm chart de ms-rbac-rest Instalando el Helm chart de ms-rbac-grpc
  1. Verificar los Pods en Lens En Lens, bajo “Workloads > Pods”, ahora vemos los dos nuevos pods, ms-rbac-rest y ms-rbac-grpc, corriendo en el namespace inventory.

    Verificando los pods de ms-rbac en Lens
  2. Verificar el VirtualService de Istio El Helm chart de ms-rbac-rest ha creado automáticamente el VirtualService. En Lens, podemos ver la nueva regla que enruta el tráfico para /ms-rbac/.

    Verificando el VirtualService de ms-rbac en Lens
  3. Probar el Acceso a la API

    • Endpoint de Salud: Verificamos que el servicio está vivo accediendo a su endpoint de salud: https://services.codedesignplus.app/ms-rbac/health/ready

      Deberías ver una respuesta “Healthy”.

      Petición exitosa al endpoint de salud de ms-rbac
    • Swagger UI: Para explorar la API de gestión, usamos la interfaz de Swagger UI: https://services.codedesignplus.app/ms-rbac/index.html

      Aquí puedes ver todos los endpoints disponibles para crear políticas de RBAC, asociando Roles a Permisos específicos.

      Visualizando Swagger UI de ms-rbac-rest

Has desplegado ms-rbac, el servicio que completa nuestro ciclo de identidad y acceso. Con ms-roles definiendo quién es quién y ms-rbac definiendo quién puede hacer qué, hemos sentado las bases para una seguridad a nivel de aplicación extremadamente granular y flexible.

Más importante aún, hemos visto cómo el SDK de CodeDesignPlus.Net.Security abstrae esta complejidad, proporcionando a los desarrolladores un mecanismo de autorización en tiempo real, optimizado y automático. En los próximos artículos, veremos cómo ms-users y otros servicios se benefician de esta potente integración.