> For the complete documentation index, see [llms.txt](https://docs.realmjoin.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.realmjoin.com/es/automatizacion/runbooks/runbook-references/org/security/sync-mfa-secure-users-to-group_scheduled.md).

# Sincronizar usuarios con MFA segura con grupo programado

### Descripción

Este runbook sincroniza un grupo de Entra ID con todos los usuarios miembros que tienen registrado al menos un método de autenticación "seguro", basándose en el informe de registro de métodos de autenticación de Entra ID. Qué grupos de métodos cuentan como seguros es configurable mediante conmutadores (Passkeys/FIDO2, credenciales de plataforma, la aplicación Microsoft Authenticator, OTP de software, OTP de hardware, autenticación basada en certificado). Los usuarios que ya no tienen registrado ningún método seguro se eliminan del grupo. Un modo estricto opcional ("SecureOnly") además descalifica a los usuarios que tienen cualquier método inseguro (teléfono, correo electrónico, preguntas de seguridad) registrado junto con su método seguro. Los usuarios invitados y los miembros del grupo que no son usuarios nunca se tocan.

Opcionalmente, se puede enviar un informe detallado por correo electrónico y/o cargarlo en un Azure Storage Account (devolviendo enlaces de descarga con tiempo limitado). El informe contiene archivos CSV y un libro de trabajo de Excel con formato, con una hoja de portada informativa (parámetros elegidos y recuentos de resultados), los cambios realizados y una evaluación por usuario de todos los usuarios miembros. Los archivos del informe solo se generan cuando el correo electrónico o el enlace de descarga está habilitado.

### Cómo funciona

El runbook lee el Entra ID [informe de registro de métodos de autenticación](https://learn.microsoft.com/en-us/graph/api/authenticationmethodsroot-list-userregistrationdetails) (`userRegistrationDetails`) y refleja el grupo de destino frente a todos los **usuarios miembros** que califican:

* Un usuario califica cuando al menos uno de sus métodos registrados está en el conjunto configurado **seguro** .
* En **modo estricto** (`SecureOnly`), un usuario además no debe tener registrado ningún método del **inseguro** conjunto registrado — un usuario de passkey que además conserva un factor SMS no califica.
* Los usuarios que califican y que aún no son miembros del grupo se agregan; los miembros que ya no califican se eliminan (sincronización espejo).
* Los usuarios invitados nunca se agregan ni se eliminan. Los miembros del grupo que no son usuarios (dispositivos, Service Principals, grupos anidados) nunca se tocan.

El grupo de destino debe ser administrado exclusivamente por este runbook.

### Grupos de métodos seguros

Cada conmutador controla qué `methodsRegistered` valores cuentan como seguros:

| Conmutador                           | Predeterminado | Valores cubiertos                                                                    |
| ------------------------------------ | -------------- | ------------------------------------------------------------------------------------ |
| Passkeys / claves de seguridad FIDO2 | activado       | `fido2SecurityKey`, `passKeyDeviceBound`, `passKeyDeviceBoundAuthenticator`          |
| Credenciales de plataforma           | activado       | `windowsHelloForBusiness`, `passKeyDeviceBoundWindowsHello`, `macOsSecureEnclaveKey` |
| Aplicación Microsoft Authenticator   | activado       | `microsoftAuthenticatorPush`, `microsoftAuthenticatorPasswordless`                   |
| OTP de software                      | desactivado    | `softwareOneTimePasscode`                                                            |
| OTP de hardware                      | desactivado    | `hardwareOneTimePasscode`                                                            |
| Autenticación basada en certificado  | activado       | `certificateBasedAuthentication`                                                     |

### Modo estricto (SecureOnly)

Con el modo estricto habilitado, los usuarios que tienen cualquiera de los siguientes métodos inseguros integrados nunca califican:

`mobilePhone`, `alternateMobilePhone`, `officePhone`, `email`, `securityQuestion`

Si un método termina tanto en el conjunto seguro como en el inseguro (solo posible mediante los parámetros de anulación), prevalece el inseguro — esos usuarios nunca califican en modo estricto. El runbook advierte sobre esto al iniciarse.

### Referencia de clasificación de métodos

Use los valores exactos de Graph de esta tabla al construir las cadenas de anulación separadas por comas:

| `methodsRegistered` valor            | Nombre descriptivo                                                   | Clasificación | Cubierto por el conmutador (predeterminado)    |
| ------------------------------------ | -------------------------------------------------------------------- | ------------- | ---------------------------------------------- |
| `fido2SecurityKey`                   | clave de seguridad FIDO2                                             | Seguro        | Passkeys / FIDO2 (activado)                    |
| `passKeyDeviceBound`                 | Passkey (vinculada al dispositivo)                                   | Seguro        | Passkeys / FIDO2 (activado)                    |
| `passKeyDeviceBoundAuthenticator`    | Passkey en Microsoft Authenticator                                   | Seguro        | Passkeys / FIDO2 (activado)                    |
| `windowsHelloForBusiness`            | Windows Hello for Business                                           | Seguro        | Credenciales de plataforma (activado)          |
| `passKeyDeviceBoundWindowsHello`     | Passkey en Windows Hello                                             | Seguro        | Credenciales de plataforma (activado)          |
| `macOsSecureEnclaveKey`              | Credencial de plataforma para macOS                                  | Seguro        | Credenciales de plataforma (activado)          |
| `microsoftAuthenticatorPush`         | Microsoft Authenticator (notificación push)                          | Seguro        | Aplicación Microsoft Authenticator (activado)  |
| `microsoftAuthenticatorPasswordless` | Microsoft Authenticator (inicio de sesión telefónico sin contraseña) | Seguro        | Aplicación Microsoft Authenticator (activado)  |
| `softwareOneTimePasscode`            | Token OATH de software (app TOTP)                                    | Seguro        | OTP de software (desactivado)                  |
| `hardwareOneTimePasscode`            | Token OATH de hardware                                               | Seguro        | OTP de hardware (desactivado)                  |
| `certificateBasedAuthentication`     | Autenticación basada en certificado                                  | Seguro        | Autenticación basada en certificado (activado) |
| `mobilePhone`                        | Teléfono (SMS / llamada de voz)                                      | Inseguro      | lista insegura integrada                       |
| `alternateMobilePhone`               | Teléfono alternativo (llamada de voz)                                | Inseguro      | lista insegura integrada                       |
| `officePhone`                        | Teléfono de oficina (llamada de voz)                                 | Inseguro      | lista insegura integrada                       |
| `email`                              | Correo electrónico (solo SSPR)                                       | Inseguro      | lista insegura integrada                       |
| `securityQuestion`                   | Preguntas de seguridad (solo SSPR)                                   | Inseguro      | lista insegura integrada                       |
| `temporaryAccessPass`                | Temporary Access Pass                                                | Neutral       | nunca califica, nunca descalifica              |

Los valores desconocidos o futuros de Graph se tratan como neutrales, a menos que estén enumerados explícitamente en un parámetro de anulación.

### Parámetros de anulación

Ambos parámetros de anulación están ocultos de forma predeterminada y están destinados a la personalización del runbook de RealmJoin:

* **SecureMethodsOverride** — lista separada por comas de `methodsRegistered` valores que define el conjunto seguro. Cuando se establece, **todos** los conmutadores de grupos de métodos se ignoran. Ejemplo: `fido2SecurityKey,passKeyDeviceBound,passKeyDeviceBoundAuthenticator,windowsHelloForBusiness`
* **UnsecureMethodsOverride** — lista separada por comas que reemplaza la lista insegura integrada. Solo se evalúa en modo estricto. Ejemplo: `mobilePhone,alternateMobilePhone,officePhone,email,securityQuestion,softwareOneTimePasscode`

Los valores desconocidos generan una advertencia, pero aun así se evalúan, de modo que los futuros valores de Graph se pueden usar antes de que esta documentación se ponga al día.

### Informe por correo electrónico y enlaces de descarga

Opcionalmente, se puede entregar un informe detallado, especialmente útil para revisar la primera ejecución (idealmente combinado con el modo de ejecución en seco):

* **Enviar informe por correo electrónico** (`SendEmail`, desactivado de forma predeterminada): envía el informe a los destinatarios configurados. El campo de destinatario solo aparece cuando el correo electrónico está habilitado. Requiere la `RJReport.EmailSender` configuración del Tenant (véase la [configuración del informe por correo electrónico](https://github.com/realmjoin/realmjoin-runbooks/tree/master/docs/general/setup-email-reporting.md)).
* **Crear enlaces de descarga de archivos** (`CreateDownloadLink`, desactivado de forma predeterminada): carga los archivos del informe en un Azure Storage Account y devuelve enlaces de descarga con tiempo limitado (usa las `RJReport.StorageAccount.*` configuraciones del Tenant).

Los archivos del informe solo se generan cuando al menos una de las dos opciones está habilitada. El informe consta de:

* **mfa-secure-users-group-sync-changes.csv** - todos los cambios realizados (o, en ejecución en seco, pendientes) con detalles de método por usuario
* **mfa-secure-users-group-sync-all-users.csv** - la evaluación de cada usuario miembro: métodos registrados, clasificación seguro/inseguro, calificación y pertenencia al grupo
* **mfa-secure-users-group-sync-report.xlsx** - los mismos datos en un libro de trabajo de Excel con formato: una hoja de portada "Info" con los parámetros elegidos y los recuentos de resultados, una hoja de cálculo "Changes" (usuarios agregados resaltados en verde, eliminados en rojo) y una hoja "All Users"

En tenants grandes, los archivos CSV sin procesar pueden superar el límite de tamaño de los adjuntos de correo electrónico (Graph rechaza los correos con un total aproximado de 4 MB). Cuando los archivos CSV superan un presupuesto de 2.5 MB, el correo se envía con solo el libro de Excel adjunto (que contiene los datos completos en forma comprimida) y una nota que explica la omisión; un envío completo fallido también se reintenta automáticamente con solo el libro de trabajo. La carga para enlace de descarga siempre incluye todos los archivos independientemente del tamaño.

### Notas y limitaciones

* El informe de registro requiere una **Entra ID P1 or P2** licencia.
* El informe no incluye **deshabilitados** ni usuarios eliminados temporalmente — esas cuentas se eliminan del grupo en la siguiente ejecución.
* Los datos del informe pueden ir retrasados respecto a cambios recientes de registro; un método recién registrado puede tardar un ciclo de sincronización en reflejarse.
* El runbook procesa tenants grandes (20k+ usuarios) mediante lecturas paginadas del informe y escrituras por lotes en el grupo con reintentos automáticos por limitación de tasa.

### Programación

La sincronización es idempotente — una sola programación recurrente (p. ej., diaria) mantiene el grupo actualizado, y las reejecuciones tras fallos parciales se autorreparan. Recomendación: ejecútelo una vez con **Ejecución en seco (WhatIf)** habilitado y revise la salida del trabajo antes de programar el runbook en modo real.

### Ubicación

Organización → Seguridad → Sincronizar usuarios seguros de MFA al grupo (Programado)

**Nombre completo del runbook**

rjgit-org\_security\_sync-MFA-secure-users-to-group\_scheduled

### Permisos

#### Permisos de aplicación

* **Tipo**: Microsoft Graph
  * AuditLog.Read.All
  * Group.Read.All
  * GroupMember.ReadWrite.All
  * User.Read.All
  * Organization.Read.All
  * Mail.Send

### Parámetros

#### TargetGroupId

El grupo de Entra ID con el que sincronizar. Los miembros de este grupo serán administrados exclusivamente por este runbook.

| Propiedad            | Valor  |
| -------------------- | ------ |
| Obligatorio          | true   |
| Valor predeterminado |        |
| Tipo                 | Cadena |

#### IncludePasskeys

Cuenta los passkeys y las claves de seguridad FIDO2 como seguros (fido2SecurityKey, passKeyDeviceBound, passKeyDeviceBoundAuthenticator).

| Propiedad            | Valor    |
| -------------------- | -------- |
| Obligatorio          | false    |
| Valor predeterminado | True     |
| Tipo                 | Booleano |

#### IncludePlatformCredentials

Cuenta las credenciales de plataforma como seguras (windowsHelloForBusiness, passKeyDeviceBoundWindowsHello, macOsSecureEnclaveKey).

| Propiedad            | Valor    |
| -------------------- | -------- |
| Obligatorio          | false    |
| Valor predeterminado | True     |
| Tipo                 | Booleano |

#### IncludeMicrosoftAuthenticator

Cuenta la aplicación Microsoft Authenticator como segura (microsoftAuthenticatorPush, microsoftAuthenticatorPasswordless).

| Propiedad            | Valor    |
| -------------------- | -------- |
| Obligatorio          | false    |
| Valor predeterminado | True     |
| Tipo                 | Booleano |

#### IncludeSoftwareOtp

Cuenta las aplicaciones TOTP del autenticador / OTP de software como seguras (softwareOneTimePasscode).

| Propiedad            | Valor    |
| -------------------- | -------- |
| Obligatorio          | false    |
| Valor predeterminado | False    |
| Tipo                 | Booleano |

#### IncludeHardwareOtp

Cuenta los tokens OTP de hardware como seguros (hardwareOneTimePasscode).

| Propiedad            | Valor    |
| -------------------- | -------- |
| Obligatorio          | false    |
| Valor predeterminado | False    |
| Tipo                 | Booleano |

#### IncludeCertificateBasedAuth

Cuenta la autenticación basada en certificado como segura (certificateBasedAuthentication).

| Propiedad            | Valor    |
| -------------------- | -------- |
| Obligatorio          | false    |
| Valor predeterminado | True     |
| Tipo                 | Booleano |

#### SecureOnly

Modo estricto: los usuarios que tienen registrado cualquier método inseguro (mobilePhone, alternateMobilePhone, officePhone, email, securityQuestion) nunca califican, incluso si también tienen un método seguro. Se eliminan del grupo si ya son miembros.

| Propiedad            | Valor    |
| -------------------- | -------- |
| Obligatorio          | false    |
| Valor predeterminado | False    |
| Tipo                 | Booleano |

#### SecureMethodsOverride

Opcional. Lista separada por comas de valores de methodsRegistered que definen el conjunto seguro. Cuando se establece, se ignoran TODOS los conmutadores de grupos de métodos. Consulte la documentación del runbook para ver todos los valores conocidos.

| Propiedad            | Valor  |
| -------------------- | ------ |
| Obligatorio          | false  |
| Valor predeterminado |        |
| Tipo                 | Cadena |

#### UnsecureMethodsOverride

Opcional. Lista separada por comas de valores de methodsRegistered que reemplazan la lista insegura integrada. Solo se evalúa en modo estricto (SecureOnly).

| Propiedad            | Valor  |
| -------------------- | ------ |
| Obligatorio          | false  |
| Valor predeterminado |        |
| Tipo                 | Cadena |

#### WhatIfMode

Ejecución en seco: registra qué usuarios se agregarían o eliminarían sin cambiar el grupo.

| Propiedad            | Valor    |
| -------------------- | -------- |
| Obligatorio          | false    |
| Valor predeterminado | False    |
| Tipo                 | Booleano |

#### SendEmail

Si se habilita, el informe se envía por correo electrónico con adjuntos CSV y Excel (xlsx). Deshabilitado de forma predeterminada.

| Propiedad            | Valor    |
| -------------------- | -------- |
| Obligatorio          | false    |
| Valor predeterminado | False    |
| Tipo                 | Booleano |

#### EmailTo

Dirección o direcciones de correo electrónico del destinatario para el informe. Puede ser una sola dirección o varias direcciones separadas por comas (cadena). Solo se usa cuando SendEmail está habilitado.

| Propiedad            | Valor  |
| -------------------- | ------ |
| Obligatorio          | false  |
| Valor predeterminado |        |
| Tipo                 | Cadena |

#### EmailFrom

La dirección de correo electrónico del remitente. Procede de la configuración del Tenant de RJReport.

| Propiedad            | Valor  |
| -------------------- | ------ |
| Obligatorio          | false  |
| Valor predeterminado |        |
| Tipo                 | Cadena |

#### ReportFileFormat

Controla qué formatos de archivo del informe se generan y entregan: "solo CSV", "CSV y XLSX" (predeterminado) o "solo XLSX".

| Propiedad            | Valor      |
| -------------------- | ---------- |
| Obligatorio          | false      |
| Valor predeterminado | CSV & XLSX |
| Tipo                 | Cadena     |

#### CreateDownloadLink

Si está habilitado, los archivos del informe se cargan en una Storage Account de Azure y se devuelven enlaces de descarga con tiempo limitado. Deshabilitado de forma predeterminada.

| Propiedad            | Valor    |
| -------------------- | -------- |
| Obligatorio          | false    |
| Valor predeterminado | False    |
| Tipo                 | Booleano |

#### ContainerName

Nombre del contenedor de almacenamiento utilizado para la carga. Configurado por runbook (no es una configuración global de RJReport).

| Propiedad            | Valor                          |
| -------------------- | ------------------------------ |
| Obligatorio          | false                          |
| Valor predeterminado | sync-mfa-secure-users-to-group |
| Tipo                 | Cadena                         |

#### ResourceGroupName

Grupo de recursos que contiene la Storage Account. Obtenido de la configuración del Tenant de RJReport.

| Propiedad            | Valor  |
| -------------------- | ------ |
| Obligatorio          | false  |
| Valor predeterminado |        |
| Tipo                 | Cadena |

#### StorageAccountName

Nombre de la Storage Account utilizada para la carga. Obtenido de la configuración del Tenant de RJReport.

| Propiedad            | Valor  |
| -------------------- | ------ |
| Obligatorio          | false  |
| Valor predeterminado |        |
| Tipo                 | Cadena |

#### LinkExpiryDays

Número de días hasta que expire el enlace de descarga generado. Obtenido de la configuración del Tenant de RJReport.

| Propiedad            | Valor |
| -------------------- | ----- |
| Obligatorio          | false |
| Valor predeterminado | 6     |
| Tipo                 | Int32 |

[Volver al resumen de referencia del runbook](/es/automatizacion/runbooks/runbook-references.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.realmjoin.com/es/automatizacion/runbooks/runbook-references/org/security/sync-mfa-secure-users-to-group_scheduled.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
