Skip to content

Desplegando ms-microsoftgraph: El Puente Hacia la Identidad

Llegamos al despliegue del último microservicio central de nuestro ecosistema: ms-microsoftgraph. Este componente no gestiona un dominio de negocio tradicional, sino que cumple una función de infraestructura crítica: actúa como un adaptador o puente entre nuestro mundo interno y el proveedor de identidad externo, Microsoft Entra ID.

Su operación es bidireccional y altamente reactiva:

  1. Reacciona a eventos externos: A través de sus endpoints REST, recibe las llamadas de las Custom Authentication Extensions de Entra ID durante el registro de un usuario e inicia el proceso de replicación interna.
  2. Reacciona a eventos internos: A través de su Async Worker, escucha eventos de dominio (como RoleCreated de ms-roles o UserUpdated de ms-users) y sincroniza esos cambios de vuelta a Microsoft Entra ID.

Un Vistazo a la Arquitectura de ms-microsoftgraph

Section titled “Un Vistazo a la Arquitectura de ms-microsoftgraph”
Diagrama de Flujo CQRS de ms-microsoftgraph
  • REST: Expone los endpoints que son invocados por las Custom Authentication Extensions de Entra ID (OnAttributeCollectionSubmit y TokenIssuanceStart).
  • Async Workers: Escucha una amplia gama de eventos de dominio de otros microservicios (ms-roles, ms-users) para mantener sincronizado Entra ID.
  • Casos de Uso: Los Commands como ReplicateUser (manejado por CreateUserCiamCommandHandler) inician el proceso de creación de un usuario en nuestro sistema después de un registro exitoso en Entra ID.
Diagrama de Agregado de Dominio de ms-microsoftgraph

El dominio de ms-microsoftgraph se centra en mantener una representación coherente de las entidades de identidad.

  • UserAggregate y RoleAggregate: Mantienen una copia o “sombra” de los usuarios y roles para facilitar la sincronización.
  • UserCiamAggregate: Actúa como un registro de auditoría de los usuarios que provienen del proveedor de identidad (CIAM), rastreando si ya han sido replicados.

Parte 1: Prerrequisitos - Creando la Identidad en Microsoft Entra ID

Section titled “Parte 1: Prerrequisitos - Creando la Identidad en Microsoft Entra ID”

Para que ms-microsoftgraph pueda interactuar con la API de Microsoft Graph, necesita su propia identidad (un “App Registration”) con los permisos adecuados.

  1. Navegar a App Registrations En el Microsoft Entra admin center, ve a Identity > Applications > App registrations y haz clic en + New registration.

    Navegando a App Registrations Creando un nuevo registro de aplicación
  2. Registrar la Aplicación InventoryAppMicrosoftGraph Dale un nombre descriptivo y haz clic en “Register”.

    Panel de control de la nueva aplicación InventoryAppMicrosoftGraph
  3. Crear un Secreto de Cliente Ve a Certificates & secrets, haz clic en + New client secret.

    Creando un nuevo secreto de cliente Copiando el valor del secreto de cliente
  4. Añadir Permisos de API Ve a API permissions, haz clic en + Add a permission, y selecciona Microsoft Graph.

    Añadiendo permisos de Microsoft Graph

    Elegimos Application permissions y añadimos los siguientes permisos:

    • Directory.ReadWrite.All
    • Group.ReadWrite.All
    • GroupMember.ReadWrite.All
    • User.ReadWrite.All
    • DeviceManagementServiceConfig.ReadWrite.All
    • DeviceManagementConfiguration.ReadWrite.All
    Seleccionando permisos de aplicación Añadiendo el permiso Directory.ReadWrite.All
  5. Otorgar Consentimiento de Administrador Una vez añadidos todos los permisos necesarios, haz clic en el botón Grant admin consent for ... para activarlos.

    Lista de permisos pendientes de consentimiento Otorgando consentimiento de administrador Permisos concedidos exitosamente
  1. Configurando los Secretos en Vault Almacenamos en Vault las credenciales base y, muy importante, el ClientSecret que acabamos de generar para la App Registration de ms-microsoftgraph.

    Terminal window
    vault kv put -mount=inventory-keyvalue ms-microsoftgraph `vault kv put -mount=inventory-keyvalue ms-microsoftgraph `
    "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>"
    "Graph:ClientSecret=<CLIENT_SECRET_FROM_GRAPH>" `
    "Vault:Transit:SecretContexts:vault_transit_password_temp=<VAULT_TRANSIT_PASSWORD>"
    Creando los secretos para ms-microsoftgraph en Vault Verificando los secretos de ms-microsoftgraph en la UI de Vault
  2. Desplegando los Entrypoints con Helm Desplegaremos los dos entrypoints de ms-microsoftgraph: REST para los webhooks de Entra ID y el Worker para los eventos internos.

    • Preparar los Archivos values.yaml Necesitaremos dos archivos, values-rest.yaml y values-worker.yaml, que definirán las variables de entorno no sensibles y la conexión a Vault. Las variables clave son las GRAPH__*, que le dicen al microservicio cómo identificarse ante la API de Microsoft Graph.

      ms-base:
      resources:
      limits:
      cpu: 500m
      memory: 256Mi
      requests:
      cpu: 100m
      memory: 128Mi
      env:
      - name: RESOURCES__ENABLE
      value: "true"
      - name: RESOURCES__SERVER
      value: "http://ms-services-grpc.inventory.svc.cluster.local:5001"
      - name: SECURITY__VALIDISSUER
      value: "https://devcodedesignplus.ciamlogin.com/dfee7752-2c8a-4171-ad95-62ddc82d6ed8/v2.0/"
      - name: SECURITY__CLIENTID
      value: "305f759d-d1d2-467b-9eab-4a61389c7329"
      - name: SECURITY__VALIDAUDIENCES__0
      value: "305f759d-d1d2-467b-9eab-4a61389c7329"
      - name: RABBITMQ__HOST
      value: "rabbitmq-cluster.srv-rabbitmq.svc"
      - name: LOGGER__OTELENDPOINT
      value: "http://inventory-opentelemetry-collector.otel-collector.svc.cluster.local:4317"
      - name: OBSERVABILITY__SERVEROTEL
      value: "http://inventory-opentelemetry-collector.otel-collector.svc.cluster.local:4317"
      - name: GRAPH__CLIENTID
      value: "4e52651c-1c59-4d91-9817-e57ed0256e9c"
      - name: GRAPH__TENANTID
      value: "dfee7752-2c8a-4171-ad95-62ddc82d6ed8"
      - name: GRAPH__ISSUERIDENTITY
      value: "devcodedesignplus.ciamlogin.com"
      vault:
      server: http://vault.vault.svc.cluster.local:8200
      solution: inventory
      token: ANGq0*B2acD1n5%F
      virtualService:
      create: true
      namespace: istio-ingress
      hosts:
      - services.codedesignplus.app
      gateways:
      - istio-ingress/istio-inventory-gateway
      http:
      - name: ms-microsoftgraph
      match:
      - uri:
      prefix: /ms-microsoftgraph/
      rewrite:
      uri: /
      route:
      - destination:
      host: ms-microsoftgraph-rest.inventory.svc.cluster.local
      port:
      number: 5000
    • Ejecutar el Despliegue con Helm Instalamos ambos charts en el namespace inventory.

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

    Verificando los pods de ms-microsoftgraph en Lens
  2. Verificar el VirtualService de Istio El Helm chart de ms-microsoftgraph-rest ha creado automáticamente el VirtualService. Este es el endpoint al que apuntarán nuestras Custom Authentication Extensions en Entra ID.

    Verificando el VirtualService de ms-microsoftgraph en Lens

Conclusión Final de la Fase de Despliegue

Section titled “Conclusión Final de la Fase de Despliegue”

¡Lo has logrado! Con el despliegue de ms-microsoftgraph, hemos instalado el último microservicio central del ecosistema CodeDesignPlus. Ahora tienes una plataforma completamente funcional, donde la identidad externa y el dominio de negocio interno están perfectamente sincronizados a través de una arquitectura reactiva y orientada a eventos.

Este despliegue no solo añade una pieza más; marca la finalización de la Fase 2 de nuestra serie. Has construido y desplegado con éxito un ecosistema de microservicios de nivel empresarial desde cero. La plataforma está viva y todos los componentes base están en su lugar, comunicándose entre sí.

Para cerrar esta monumental fase de construcción y despliegue con broche de oro, en nuestro próximo y último artículo de esta etapa, haremos una pausa para consolidar todo nuestro trabajo. Recapitularemos la increíble plataforma que hemos levantado y, lo más importante, te proporcionaremos un script de despliegue optimizado para que puedas levantar todo este ecosistema de forma automatizada en el futuro. También repasaremos los puntos más importantes y las lecciones aprendidas en el camino.

Te invitamos a unirte a nosotros para este capítulo final de resumen, que te dejará con una base sólida y una herramienta poderosa para tus propios proyectos.