Onboarding Microsoft 365 — modalidad archivo
Esta guía es para el administrador del tenant Microsoft 365 del cliente. La envías una vez: nosotros provisionamos en paralelo lado ICS, tú haces los cuatro pasos aquí descritos, y arrancamos.
Tiempo: ~25 minutos si conoces el panel de Entra y Exchange Online. Si no, una hora. Permisos que necesitas: Global Administrator (o Application Administrator + Exchange Administrator).
Antes de empezar — qué cambia y qué no
✅ Lo que NO cambia:
- Tu MX, SPF, DKIM, DMARC permanecen iguales.
- El correo sigue entrando exactamente como hoy a Exchange Online.
- Outlook, móviles, calendarios, contactos — sin tocar.
✅ Lo que añades:
- Una app de Entra ID que solo lee mensajes (no envía, no borra) y solo de los usuarios del piloto.
- Una transport rule que añade BCC ciego a un destinatario nuestro por cada mensaje del piloto.
✅ Resultado:
- Tu factura de M365 (cuota por buzón) sigue creciendo igual.
- Pero a partir del momento del cutover, nosotros tenemos copia perpetua de todo lo que pasa por los buzones piloto.
- Cuando valides que la copia está íntegra, podemos hablar de borrar lo viejo en M365 para liberar cuota — eso es opcional y se discute después del piloto.
Paso 1 — App registration en Entra ID
1.1 — Llegar a App registrations
Abre App registrations en Microsoft Entra Admin Center (el enlace te lleva directo; si haces login, te puede pedir confirmar el tenant).
Si llegas manualmente: panel izquierdo → Identity → Applications → App registrations.
1.2 — Crear la app
Botón + New registration (parte superior).
| Campo | Valor |
|---|---|
| Name | ICS jmail.com.es Archive |
| Supported account types | Accounts in this organizational directory only (single tenant) |
| Redirect URI | (dejar vacío — lo de “Web/Public client” no se toca) |
Pulsa Register abajo. Microsoft te lleva automáticamente a la página Overview de tu nueva app.
1.3 — Anotar los dos IDs
En el panel Essentials del Overview (la cabecera con campos clave):
- Application (client) ID: GUID tipo
abc12345-.... Identifica tu app. No es secreto. - Directory (tenant) ID: GUID tipo
def67890-.... Identifica tu tenant. No es secreto.
💡 El Application (client) ID también aparece en la URL del navegador, justo después de /appId/ — útil para verificar que estás en la app correcta.
⚠️ NO confundir con Object ID (también visible en Essentials): es un identificador interno del directorio que NO necesitamos. Solo los dos “Application (client) ID” y “Directory (tenant) ID”.
📖 Referencia Microsoft: Register an application with the Microsoft identity platform.
1.a — Permisos
Dentro de la app que acabas de crear:
- Panel izquierdo → API permissions → Add a permission → Microsoft Graph → Application permissions (no Delegated permissions).
- Buscar y marcar
Mail.Read. - Volver al listado y pulsar Grant admin consent for <tu organización> (botón azul, requiere rol Global Administrator).
📖 Referencias Microsoft:
Mail.Read permite leer mensajes pero no enviar, no modificar, no borrar. Si en futuro activamos “borrar lo viejo en origen” (opcional), pediremos Mail.ReadWrite adicional. No es necesario para el piloto.1.b — Client secret
Dentro de la app → panel izquierdo → Certificates & secrets → pestaña Client secrets → New client secret.
- Description:
ICS jmail archive - Expires:
24 months(máximo soportado por el portal)
Tras crearlo, copia inmediatamente la columna “Value” (no el Secret ID — el Value es el secret real, solo se ve una vez). Si lo pierdes, créalo de nuevo y revoca el anterior.
📖 Referencia Microsoft: Add credentials to an application.
Paso 2 — Mail-enabled security group para el piloto
Microsoft 365 Admin Center → Teams & groups → Active teams & groups → Add a group.
| Campo | Valor |
|---|---|
| Type | Mail-enabled security |
| Name | archive-pilot-jmail |
| Email address | archive-pilot-jmail@<tu-dominio-principal> |
| Members | los buzones del piloto (los que te diremos al confirmar el alta) |
Paso 3 — Application Access Policy
Por defecto, la app del paso 1 puede leer todos los buzones del tenant. Para piloto restringimos.
Abrir Exchange Online PowerShell (cómo conectar) y ejecutar:
Connect-ExchangeOnline
New-ApplicationAccessPolicy `
-AppId <Application-client-ID-del-paso-1> `
-PolicyScopeGroupId archive-pilot-jmail@<tu-dominio> `
-AccessRight RestrictAccess `
-Description "ICS jmail archive pilot - restricted to pilot users only"Verifica:
Test-ApplicationAccessPolicy `
-Identity usuario-piloto@<tu-dominio> `
-AppId <Application-client-ID-del-paso-1>
# Esperado: AccessCheckResult: Granted
Test-ApplicationAccessPolicy `
-Identity usuario-NO-piloto@<tu-dominio> `
-AppId <Application-client-ID-del-paso-1>
# Esperado: AccessCheckResult: DeniedA partir de este punto, basta con añadir/quitar miembros del grupo archive-pilot-jmail para expandir o reducir el piloto. La app no hay que tocarla.
Paso 4 — Transport rule “BCC al archivo”
Exchange Admin Center → Mail flow → Rules → Add a rule → Create a new rule.
| Campo | Valor |
|---|---|
| Name | ICS jmail archive — BCC |
| Apply this rule if | The recipient → is a member of this group → archive-pilot-jmail |
(Add condition, OR-mode) The sender → is a member of this group → archive-pilot-jmail | |
| Do the following | Add recipients → to the Bcc box → these recipients → archive@<tu-dominio>.jmail.com.es |
| Except if | A message header → includes any of these words → Header: X-Jmail-Archive-Source, Value: m365 |
| Priority | 0 (la primera) |
| Audit severity | Low |
| Mode | Test with Policy Tips durante 24h, después Enforce |
Guardar y activar.
X-Jmail-Archive-Source evita un bucle teórico — si por algún motivo un mensaje archivado vuelve a entrar al tenant (re-delivery, forwarding manual), no se vuelve a capturar.archive@<tu-dominio>.jmail.com.es en lugar de uno por usuario: para piloto es más simple — una sola rule, un solo destino. Nosotros desempaquetamos los mensajes lado servidor mirando los headers To/Cc/From y los archivamos en el buzón del usuario correcto. En producción ofrecemos la modalidad “BCC al buzón del usuario directo” (rule más compleja, lookup por miembro del grupo), pero el piloto va con bucket único.Paso 5 — Datos que nos pasas
Para arrancar nuestro lado:
- Tenant ID y Application (client) ID del paso 1.
- Client secret VALUE del paso 1.b — vía Vaultwarden compartido, no por email, no por chat. Te abrimos un Send de un solo uso si no tienes acceso al vault compartido.
- Dominios piloto (típicamente 1-2).
- Lista de buzones piloto (típicamente 2-5): la dirección email completa de cada uno.
- Cuánto histórico bulk bajamos: por defecto sugerimos los últimos 6 meses — suficiente para validar que la captura está íntegra sin invertir días en bulk. Si quieres todo el histórico, pedimos una ventana de 1-3 días para que el bulk termine antes de activar la transport rule (paso 4).
- Ventana para el cutover: 30 min en los que activamos nuestro lado y tú pasas la transport rule de Test a Enforce. Hablamos por chat durante esa ventana.
Lo que pasa después de cutover
- T+0 a T+1 min: tú activas Enforce. Nosotros vemos llegar mensajes a la cola del bucket.
- T+1 min: te confirmamos por chat que los primeros mensajes están archivados.
- T+24 h: te enviamos un resumen — cuántos mensajes capturados, cuántos buzones tocados, cualquier anomalía.
- T+7 días: revisión del piloto. Decides si:
- Expandes a más usuarios (añadir al grupo)
- Activas borrado en origen (opcional, requiere
Mail.ReadWrite) - Pasas a contrato producción
Si algo va mal
- La transport rule no añade BCC: comprueba que el grupo
archive-pilot-jmailtiene los miembros correctos y que la condición de la rule referencia el email del grupo (no su nombre). Test con un usuario piloto enviándose un mensaje a sí mismo desde un cliente externo. - Recibimos rebotes en
archive@<tu-dominio>.jmail.com.es: avísanos. Significa que nuestro lado no acepta el mensaje — error de provisionamiento del bucket. - La app no puede leer un buzón: ejecuta el
Test-ApplicationAccessPolicydel paso 3. Si dice Denied para un usuario que debería estar permitido, comprueba membresía del grupo.
Para cualquier otra cosa: ticket en el portal habitual.
Resumen ejecutivo — checklist enviable
Versión condensada para reenviar a tu equipo o para tener a mano:
1. App registration "ICS jmail.com.es Archive" en Entra ID (single tenant).
Permiso: Mail.Read (Application) + admin consent. Client secret 24 meses.
Pásanos: tenant_id, client_id, secret_value (vía Vaultwarden, no email).
2. Mail-enabled security group "archive-pilot-jmail" con los usuarios piloto.
3. Application Access Policy restringiendo la app de (1) al grupo de (2).
Comando: New-ApplicationAccessPolicy en Exchange Online PowerShell.
4. Transport rule "ICS jmail archive — BCC":
IF recipient OR sender IS member of archive-pilot-jmail
AND header X-Jmail-Archive-Source NOT m365
THEN add Bcc archive@<tu-dominio>.jmail.com.es
5. Datos del piloto:
- 1-2 dominios
- 2-5 buzones (lista completa)
- histórico a bulkear (default 6 meses)
- ventana de cutover (30 min)