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
Microsoft Entra Admin Center → Identity → Applications → App registrations → New registration.
| Campo | Valor |
|---|---|
| Name | ICS jmail.com.es Archive |
| Supported account types | Accounts in this organizational directory only (single tenant) |
| Redirect URI | (dejar vacío) |
Tras crearla, anota de la pestaña Overview:
- Application (client) ID
- Directory (tenant) ID
1.a — Permisos
En la app → API permissions → Add a permission → Microsoft Graph → Application permissions (no Delegated) → buscar y marcar:
- Mail.Read
Después: Grant admin consent for <tu organización> (botón azul, requiere Global Admin).
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
En la app → Certificates & secrets → Client secrets → New client secret.
- Description:
ICS jmail archive - Expires:
24 months
Tras crearlo, copia el valor inmediatamente (solo se ve una vez). Si lo pierdes, créalo de nuevo.
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)