Files
SGU-CredentialProvider/docs/user-roaming.md
T

181 lines
7.9 KiB
Markdown

# User roaming por rol en Azure (opcional)
> **Estado predeterminado:** desactivado. Todas las cuentas `AL`, `AD`, `DO` y
> cualquier otra cuenta de dominio usan un perfil local normal bajo `C:\Users`.
> Escritorio y Documentos permanecen en el disco del equipo; no se mapean shares
> de perfiles ni se monta un contenedor FSLogix.
La implementación se conserva para un posible piloto futuro, pero no forma parte
del enrolamiento normal. Activarla requiere dos decisiones explícitas: desplegar
la infraestructura con `-DeployUserRoaming $true
-AcknowledgeUserRoamingRisks` y después ejecutar el configurador con
`-AcknowledgeUserRoamingRisks`.
## Diseño opcional
Cuando se habilita expresamente, el comportamiento es:
| Rol | Datos conservados | Implementación |
| --- | --- | --- |
| `AL` | `Desktop` y `Documents` | Redirección de carpetas a Azure Files; el resto del perfil sigue local. |
| `AD` / `DO` | Perfil completo | FSLogix VHDX: montaje directo con endpoint privado o Cloud Cache con endpoint público. |
Linux conserva su directorio personal nativo y no monta un perfil de Windows.
`infra/azure/main.bicep` puede crear una cuenta `StorageV2` dedicada con shares
`profiles` y `redirected`, soft delete de 14 días, private endpoint y zona
`privatelink.file.<sufijo-de-Azure>`. Su valor predeterminado
`deployUserRoaming=false` evita crear estos recursos. La cuenta de staging usada
para paquetes no se reutiliza automáticamente como almacenamiento de perfiles.
Los clientes de un endpoint privado requieren P2S u otra ruta privada a la VNet.
Un endpoint público exige resolución DNS, salida TCP 445 y reglas de red de
Storage limitadas a redes institucionales. El modo `Auto` selecciona `Direct`
para endpoint privado y `CloudCache` para uno público. `CCDLocations` y
`VHDLocations` son mutuamente excluyentes.
Azure Files se integra con AD DS mediante Kerberos AES-256. Las ACL de la raíz
usan `CREATOR OWNER` para aislar los directorios de usuarios. La clave de la
cuenta se usa sólo en memoria durante la creación de ACL y no se guarda en GPO.
## Riesgos que deben aceptarse
El piloto de septiembre de 2026 confirmó que esta función puede aumentar de
forma considerable el tiempo de inicio y cierre de sesión. Antes de activarla se
deben aceptar y probar, como mínimo, estos escenarios:
- latencia o indisponibilidad de Azure Files que mantiene `Welcome` o `Sign out`
durante varios minutos;
- VHDX remoto en estado abierto, pendiente de eliminación o de creación, con
fallos como `0x80070050`;
- caché o proxy local obsoleto de Cloud Cache y fallos de registro como
`0xE000000B`;
- recuperación que puede exigir detener por fuerza los servicios FSLogix y
reiniciar el equipo;
- datos todavía no sincronizados, caché local insuficiente o divergencia si se
fuerza una recuperación;
- dependencia de DNS, Kerberos, TCP 445, la red y el servicio de Storage tanto
para registrar como para desmontar el perfil.
No se debe desplegar a todos los usuarios sin un piloto de inicio, cierre,
desconexión, cuota, restauración y pérdida temporal del proveedor. Cloud Cache
reduce I/O WAN síncrono, pero no elimina la dependencia al cerrar sesión.
## 1. Desplegar la infraestructura opcional
El despliegue normal no incluye user roaming. Para crear deliberadamente sus
recursos:
```powershell
$azure = .\scripts\Deploy-SguAzureInfrastructure.ps1 `
-SubscriptionId '00000000-0000-0000-0000-000000000000' `
-ResourceGroupName 'rg-sgu-lab' `
-Location 'centralus' `
-AdministratorUsername 'azureadmin' `
-P2sRootCertificatePath $p2s.RootCertificatePath `
-DeployUserRoaming $true `
-AcknowledgeUserRoamingRisks
```
Puede definirse un nombre con `-UserRoamingStorageAccountName`. Si no se pasan
los dos parámetros de aceptación, la infraestructura de perfiles no se crea.
## 2. Unir Azure Files al dominio y publicar las GPO
Primero termine `Initialize-SguDomainController.ps1`. Después, en Windows
PowerShell 5.1 elevado dentro del DC, instale Azure PowerShell y el módulo oficial
[AzFilesHybrid](https://github.com/Azure-Samples/azure-files-samples/releases),
y ejecute:
```powershell
$parameters = @{
SubscriptionId = '00000000-0000-0000-0000-000000000000'
ResourceGroupName = 'rg-sgu-lab'
StorageAccountName = '<cuenta de perfiles>'
FsLogixProfilesShareName = 'profiles'
RedirectedFoldersShareName = 'redirected'
AzFilesHybridModulePath = 'C:\Admin\AzFilesHybrid'
UseDeviceAuthentication = $true
AcknowledgeUserRoamingRisks = $true
}
.\payload\scripts\Enable-SguAzureUserRoaming.ps1 @parameters
```
Para una cuenta autorizada con endpoint público:
```powershell
$parameters.EndpointAccess = 'Public'
$parameters.StaffProfileStorageMode = 'Auto'
.\payload\scripts\Enable-SguAzureUserRoaming.ps1 @parameters
```
El script crea las GPO `SGU - AL redirected folders` y `SGU - AD-DO FSLogix
profiles`, y vuelve a habilitar el enlace de instalación de FSLogix si ya existe.
No borra perfiles locales existentes salvo que se proporcione deliberadamente
`-DeleteExistingStaffLocalProfiles`.
## 3. Instalar FSLogix sólo para un piloto
FSLogix no forma parte de Windows. Valide su licencia y descargue
`FSLogixAppsSetup.exe` directamente de Microsoft. Puede pasarse como quinto
argumento al enrolamiento Azure o publicarse con:
```powershell
.\payload\scripts\Publish-SguFsLogixClientDeployment.ps1
```
El publicador valida firma y SHA-256 y crea `SGU - FSLogix client deployment`.
El rollback descrito abajo deshabilita su enlace para que no se instale en más
equipos.
## 4. Desactivar y volver a perfiles locales
Ejecute desde Windows PowerShell 5.1 elevado en el controlador de dominio:
```powershell
.\payload\scripts\Disable-SguAzureUserRoaming.ps1
```
Es idempotente y realiza lo siguiente:
- fija `Profiles\Enabled=0` y `ODFC\Enabled=0`;
- deshabilita `frxsvc` y `frxccds` mediante GPO;
- elimina `CCDLocations`, `VHDLocations` y valores de contenedor específicos de
los grupos `SGU-Administrativos` y `SGU-Docentes`;
- restaura Escritorio y Documentos de alumnos a
`%USERPROFILE%\Desktop` y `%USERPROFILE%\Documents`;
- deshabilita el enlace de despliegue del cliente FSLogix;
- limpia `profilePath`, `homeDirectory` y `homeDrive` de los usuarios de las OU
SGU, salvo que se use `-PreserveLegacyUserMappings`.
Después aplique `gpupdate /force` y reinicie cada Windows administrado antes de
probar un nuevo inicio de sesión. El primer ingreso vuelve a crear o reutilizar
un perfil local. El script no borra automáticamente VHDX, shares de Azure ni
cachés existentes: conservarlos permite recuperación y evita destrucción de
datos. Su eliminación debe ser una decisión separada y posterior a la validación.
## 5. Validar un piloto futuro
Después de `gpupdate /force` y reiniciar un cliente de prueba:
```powershell
Resolve-DnsName "$($azure.UserRoamingStorageAccountName).file.core.windows.net"
Test-NetConnection "$($azure.UserRoamingStorageAccountName).file.core.windows.net" -Port 445
Get-Service frxsvc
Get-ItemProperty 'HKLM:\SOFTWARE\FSLogix\Profiles\ObjectSpecific\<SID-del-grupo>'
& 'C:\Program Files\FSLogix\Apps\frx.exe' list-redirects
```
Revise `%ProgramData%\FSLogix\Logs\Profile`, pruebe inicio y cierre varias veces,
simule indisponibilidad y valide restauración. No active el borrado de perfiles
locales ni amplíe el alcance antes de superar esas pruebas.
Referencias de Microsoft:
- [Autenticación AD DS para Azure Files](https://learn.microsoft.com/azure/storage/files/storage-files-identity-ad-ds-enable)
- [Permisos SMB para FSLogix](https://learn.microsoft.com/fslogix/how-to-configure-storage-permissions)
- [Contenedores de perfil FSLogix](https://learn.microsoft.com/fslogix/how-to-configure-profile-containers)
- [Configuración ObjectSpecific de FSLogix](https://learn.microsoft.com/fslogix/how-to-configure-object-specific-settings)
- [Cloud Cache de FSLogix](https://learn.microsoft.com/fslogix/concepts-fslogix-cloud-cache)
- [Redirección de carpetas](https://learn.microsoft.com/windows-server/storage/folder-redirection/deploy-folder-redirection)