# Local Admin Password Solution (LAPS)

Nuestra solución de contraseña para Administrador Local (LAPS) se creó para resolver el problema de usar cuentas idénticas en su entorno para soporte a usuarios o escalado de privilegios. LAPS crea contraseñas seguras para cuentas locales, que se almacenan de forma segura en *su propio* [Azure Key Vault](https://docs.realmjoin.com/es/agente-de-realmjoin/realmjoin-client/local-admin-password-solution-laps/keyvault). Para auditoría, tiene la opción de proporcionar una instancia de [Application Insights](https://docs.realmjoin.com/es/agente-de-realmjoin/realmjoin-client/local-admin-password-solution-laps/application-insights) o un [Log Analytics Workspace](https://docs.realmjoin.com/es/registros/log-analytics).

## Requisitos previos

Antes de poder empezar con LAPS, debe cumplir los siguientes requisitos previos:

* Configurar [Application Insights](#application-insights) O [Log Analytics Workspace](https://docs.realmjoin.com/es/registros/log-analytics)
* Habilite explícitamente los tipos de cuenta de LAPS mediante la configuración de grupos (o usuarios)

A continuación veremos ambos.

## Registro

Application Insights y Log Analytics desempeñan un papel importante al usar LAPS. Las solicitudes de contraseña activadas por LAPS son registradas por RealmJoin y enviadas a la instancia de Application Insights o al Log Analytics Workspace configurado. De este modo, tiene una visión completa de quién está recuperando contraseñas.&#x20;

Solo es necesario elegir una forma de registro: Application Insights o Log Analytics. El registro es opcional al configurar LAPS y puede omitirse si su organización no necesita esta información.

Puede encontrar más detalles en nuestros [Application Insights](https://docs.realmjoin.com/es/agente-de-realmjoin/realmjoin-client/local-admin-password-solution-laps/application-insights) y [Log Analytics](https://docs.realmjoin.com/es/registros/log-analytics) artículos.

## Configuración de grupo

LAPS admite la siguiente configuración global.

| Clave de configuración             | Valor predeterminado | Descripción                                                                                                                                                         |
| ---------------------------------- | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| LocalAdminManagement.Inactive      | `false`              | Establezca `true` para desactivar forzosamente esta característica. Esto limpiará y **eliminará** todas las cuentas locales.                                        |
| LocalAdminManagement.CheckInterval | `"01:00"`            | Intervalo para las comprobaciones internas de configuración ([HH:mm](https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-timespan-format-strings)) |

Se admiten los siguientes tipos de cuenta.

| Clave de configuración                 | Valor predeterminado     |
| -------------------------------------- | ------------------------ |
| LocalAdminManagement.EmergencyAccount  | `undefined` (*inactivo*) |
| LocalAdminManagement.SupportAccount    | `undefined` (*inactivo*) |
| LocalAdminManagement.PrivilegedAccount | `undefined` (*inactivo*) |

Cada tipo de cuenta puede configurarse de forma independiente mediante la siguiente configuración común. Algunos tipos tienen ajustes especiales descritos en su sección correspondiente.

{% hint style="info" %}
En la siguiente tabla `$` representa cualquiera de las tres `cuenta` objeto JSON anterior.
{% endhint %}

| Clave de configuración | Valor predeterminado                                                 | Descripción                                                                                        |
| ---------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
| $.NamePattern          | `"ADM-{HEX:8}"`                                                      | Especial. Consulte [cuenta privilegiada](#privileged-account). Debe tener 20 caracteres o menos.   |
| $.DisplayName          | `"RealmJoin Local Administrator"`                                    | nombre para mostrar                                                                                |
| $.PasswordCharSet      | `"!#%+23456789:=?@ABCDEFGHJKLMNPRSTUVWXYZabcdefghijkmnopqrstuvwxyz"` | Conjunto de caracteres para el generador de contraseñas (excluye caracteres parecidos)             |
| $.PasswordLength       | 20                                                                   | longitud de la contraseña                                                                          |
| $.PasswordPreset       | 0                                                                    | Plantillas de contraseña predefinidas, consulte [Generación de contraseñas](#password-generation). |
| $.MaxStaleness         | Especial. Consulte [recreación de la cuenta](#account-recreation).   | Plantillas de contraseña predefinidas, consulte [Generación de contraseñas](#password-generation). |
| $.OnDemand             | Especial. Consulte [cuenta de soporte](#support-account).            | Crear la cuenta solo cuando se solicite.                                                           |
| $.Expiration           | Especial. Consulte [cuenta de soporte](#support-account).            | Fecha de expiración fija de la cuenta (formato ISO-8601)                                           |
| $.PasswordRenewals     | Especial. Consulte [cuenta privilegiada](#privileged-account).       | Fecha de expiración fija de la cuenta (formato ISO-8601)                                           |

## Contraseña **generación**

De forma predeterminada, se generarán contraseñas verdaderamente aleatorias basadas en la configuración `PasswordCharSet` y `PasswordLength`. El conjunto de caracteres predeterminado se eligió para excluir caracteres de aspecto similar como `I1l` y `O0`. Se utiliza el generador de números aleatorios criptográficos de Windows para proporcionar una aleatoriedad de alta calidad para la generación.

{% hint style="info" %}
RealmJoin gestionará automáticamente los problemas con los requisitos de complejidad de Windows al crear cuentas. Como ocurre con todas las contraseñas verdaderamente aleatorias, a veces las contraseñas generadas pueden no cumplir los requisitos de complejidad. Si esto ocurre, RealmJoin realizará hasta tres rondas de generación de contraseñas hasta que se genere una contraseña viable. Existe una probabilidad estadísticamente pequeña de que se agoten todos los reintentos. En este caso verá un mensaje en el archivo de registro del servicio similar a `Se agotaron todos los reintentos`. El proceso completo se reiniciará en la siguiente ejecución de las comprobaciones internas de configuración (consulte el ajuste `CheckInterval`).
{% endhint %}

Las contraseñas verdaderamente aleatorias pueden ser difíciles de manejar, por eso también se admiten plantillas predefinidas especiales.

* Predefinido 1 ⇒ `[1 mayúscula][3 minúscula][4 dígitos]`
  * `Tuci9325`
  * `Lnso5050`
  * `Khwn2174`
* Predefinido 2 ⇒ `Key-[6 dígitos]-[6 dígitos]-[6 dígitos]-[6 dígitos]-[6 dígitos]-[6 dígitos]-[6 dígitos]-[6 dígitos]`
  * ¡Se admite el ajuste PasswordLength! El ajuste determina el número de bloques de dígitos.
  * `Key-012993-230956-976475` (PasswordLength = 3)
  * `Key-497254-679158-631224-278319` (PasswordLength = 4)
  * `Key-506179-861369-706482-613244-730371-097689-404350-340073` (predeterminado)
* Predefinido 3 ⇒ `[palabra]-[palabra]-[palabra]-[palabra]-[palabra]-[palabra]` generado a partir de [Eff Long List](https://www.eff.org/files/2016/07/18/eff_large_wordlist.txt)​
  * ¡Se admite el ajuste PasswordLength! El ajuste determina el número de palabras.
  * `Exciting-Unearth-Cried-87` (PasswordLength = 3)
  * `Neurology-Astute-Debate-Marshy-15` (PasswordLength = 4)
  * `Marshy-Darkened-Undertake-Reset-Shrouded-Wise-26` (predeterminado)

## recreación de la cuenta

Después de usar una cuenta, RealmJoin puede configurarse para eliminar y recrear la cuenta usando el ajuste `MaxStaleness` . De este modo, las cuentas estarán siempre limpias. Si no se configura, las cuentas nunca se recrearán y permanecerán indefinidamente.

{% hint style="danger" %}
RealmJoin eliminará la cuenta y su perfil. **Todos los archivos se eliminarán permanentemente.**

Si una cuenta sigue en uso —todavía con sesión iniciada, sesión abierta, aplicación iniciada con ella como ADM y aún en ejecución—, la cuenta seguirá expirada, pero no podrá eliminarse. **No se puede crear una nueva cuenta mientras la cuenta antigua no se haya eliminado.**
{% endhint %}

## Evitación de conflictos

Aunque RealmJoin hace todo lo posible por evitar conflictos de nomenclatura al administrar las cuentas en un dispositivo, siempre existe la posibilidad de que ya existan cuentas en un dispositivo y provoquen conflictos. Por eso el ajuste `NamePattern` admite estos tokens con significado especial para RealmJoin. Los tokens se transformarán mediante la función especificada y su parámetro de longitud tras los dos puntos.

* `{HEX:8}` ⇒ `F4D027EF`, `B3C4F74E`, ... (caracteres hexadecimales aleatorios)
* `{DEC:6}` ⇒ `506453`, `066946`, ... (caracteres decimales aleatorios)
* `{COUNT:2}` ⇒ `01`, `02`, ... (contador, se mantendrá `01` si no existen conflictos)

## Cuenta de emergencia

Este tipo de cuenta es su acceso de respaldo al dispositivo en caso de un fallo catastrófico. Se creará de forma proactiva. De este modo, siempre tendrá acceso para la recuperación. Recomendamos configurarla para [recreación de la cuenta](#account-recreation).

*Ejemplo*

Clave `LocalAdminManagement.EmergencyAccount` (para la configuración común consulte [configuración de grupo](#group-settings))

```json
{
  "NamePattern": "ADM-Emergency-{HEX:4}",
  "DisplayName": "Emergency Access",
  "MaxStaleness": "04:00",
  "PasswordPreset": 2
}
```

## cuenta de soporte

Este tipo de cuenta puede configurarse para creación bajo demanda. Está diseñado para usarse en una ventana de tiempo limitada de 12 horas en modo bajo demanda.

{% hint style="danger" %}
Las cuentas de soporte y sus perfiles se eliminarán 12 horas después de solicitar la cuenta, independientemente del uso (después de que el usuario de soporte haya cerrado sesión). **Todos los archivos se eliminarán permanentemente.**
{% endhint %}

{% hint style="danger" %}
Al usar el modo bajo demanda, la recreación de la cuenta (`MaxStaleness`) *no debe usarse*. Puede interferir con su flujo de trabajo de soporte.
{% endhint %}

Requisitos para el flujo de trabajo bajo demanda:

* El modo se habilita estableciendo `"OnDemand": true`.
* Un usuario ha iniciado sesión
* El agente de RealmJoin se está ejecutando
* El dispositivo está conectado a Internet
* El dispositivo puede الوصول al backend de RealmJoin

{% hint style="info" %}
Puede tardar hasta 30 minutos en que el agente de RealmJoin detecte la solicitud. El usuario que ha iniciado sesión puede acelerar este proceso eligiendo "Sync this device" en el menú de la bandeja de RealmJoin.
{% endhint %}

Cuando no está en modo bajo demanda, se creará de forma proactiva.

*Ejemplo*

Clave `LocalAdminManagement.SupportAccount` (para la configuración común consulte [configuración de grupo](#group-settings))

```json
{
  "NamePattern": "ADM-Support-User-{HEX:2}",
  "DisplayName": "Support User",
  "OnDemand": true,
  "PasswordPreset": 1
}
```

## cuenta privilegiada

Este tipo de cuenta está diseñado para ser utilizado por usuarios avanzados que necesitan privilegios de administrador regulares pero controlados en sus propios dispositivos. Se puede especificar una fecha fija de expiración de la cuenta (`Expiration`).

{% hint style="danger" %}
Para este tipo, la recreación de la cuenta (`MaxStaleness`) *no debe usarse*. La idea es tener una cuenta persistente para sus usuarios.
{% endhint %}

Se admiten rotaciones forzadas de contraseña:

1. `2021-11-20T12:34:56+01:00`: Cualquier marca de tiempo explícita en ISO-8601. Se pueden especificar varias marcas de tiempo.
2. `DayAfterCreate`: Después de crear la cuenta, se cambiará la contraseña de la cuenta. Esto es útil cuando se supone que los usuarios deben configurar Windows Hello para opciones adicionales de inicio de sesión.
3. `Anual`, `Mensual` o `Semanal`: El intervalo más corto tiene prioridad (`Semanal` > `Mensual` > `Anual`). Si no se especifican más condiciones, los valores predeterminados son "1er día del mes" para `Mensual` o "lunes" para `Semanal`. Además, `Anual` se establece por defecto en la fecha del último cambio de contraseña + 365 días. Se pueden especificar los siete días de la semana. Así que, si `Wednesday` y `Semanal` se especifican, la contraseña se cambiará cada miércoles. Si `Wednesday` y `Mensual` se especifican, la contraseña se cambiará el primer miércoles de cada mes. Combinar `Anual` con días de la semana fijará la fecha límite en el último día de la semana especificado posible justo antes de que se cumplan 365 días.

*Ejemplo*

Clave `LocalAdminManagement.PrivilegedAccount` (para la configuración común consulte [configuración de grupo](#group-settings))

```json
{
  "NamePattern": "Privileged-User-{COUNT:1}",
  "DisplayName": "Privileged User",
  "PasswordRenewals": ["DayAfterCreate", "Monthly", "Thursday"],
  "PasswordPreset": 3,
  "PasswordLength": 3
}
```

## Acceso a las contraseñas

Utilice el RealmJoin Portal para acceder a las contraseñas.<br>

<figure><img src="https://3832142177-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkrcM7cKOpXKri1kVrh%2Fuploads%2FnrPze5jW4F0Fdr83WluM%2Fimage.png?alt=media&#x26;token=5c42cafc-c92a-4803-8ab7-254e0df392e0" alt=""><figcaption></figcaption></figure>

## Habilitar autoservicio

Los usuarios pueden acceder a las cuentas creadas en sus dispositivos *propios* (son "PrimaryUser") cuando está habilitado mediante el *RealmJoin Portal* a partir de la versión `2022.5.1`. Para habilitarlo, defina un ajuste usando la clave `Allow.SelfLAPS`. Este ajuste puede definirse en grupos y usuarios. Como ocurre con todos los ajustes con el prefijo `Allow.*` se combinan mediante AND entre el usuario y todos sus grupos.

```json
{
  "EmergencyAccount": true,
  "SupportAccount": true,
  "PrivilegedAccount": true
}
```

El valor también puede ser un booleano puro `true`/`false`. Esto puede usarse como comodín y abarca todos los tipos de cuenta actuales y futuros. Tenga en cuenta que esto solo se recomienda para deshabilitar el acceso (`false`).

{% hint style="info" %}
En el pasado se recomendaba establecer este ajuste en `true`. Sin embargo, a medida que seguimos ampliando RealmJoin, se añadirán nuevos tipos de cuenta. Por tanto, se recomienda encarecidamente migrar todos los `true` valores a la notación de objeto más explícita
{% endhint %}

Una configuración de ejemplo podría verse así:

| Grupo                          |                                                           | Comentario                                                                                                                                                           |
| ------------------------------ | --------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Todos los trabajadores remotos | `{ "EmergencyAccount": true }`                            | Los trabajadores remotos pueden acceder a la cuenta de emergencia de sus propios dispositivos.                                                                       |
| Todos los desarrolladores      | `{ "EmergencyAccount": true, "PrivilegedAccount": true }` | Los desarrolladores pueden acceder a su cuenta de emergencia y a su cuenta privilegiada, sin importar si son trabajadores remotos o no.                              |
| Todos los aprendices           | `false`                                                   | Los aprendices nunca deben tener acceso a ninguno de los tres tipos de cuenta **y** a todos los tipos futuros, incluso si son trabajadores remotos o desarrolladores |

{% hint style="info" %}
SelfLAPS es más potente que el rol LAPS habitual. Dicho esto, si un usuario administrador está administrando LAPS con su cuenta de usuario habitual, no podrá administrar su propio LAPS.

Mitigación: habilite SelfLAPS para estas cuentas de administrador o use cuentas de administrador separadas.
{% endhint %}
