# User roaming por rol en Azure El despliegue Azure puede crear almacenamiento privado y políticas distintas para cada tipo de cuenta SGU: | Rol | Datos conservados | Implementación | | --- | --- | --- | | `AL` | `Desktop` y `Documents` | Redirección de carpetas a Azure Files; el resto del perfil local no es autoritativo y no se copia al iniciar o cerrar sesión. | | `AD` / `DO` | Perfil completo | FSLogix: montaje directo del VHDX con endpoint privado o Cloud Cache local sincronizada con Azure Files cuando el endpoint es público. | Linux conserva su solución nativa de directorios personales; no intenta montar un perfil de Windows. ## Arquitectura y seguridad `infra/azure/main.bicep` crea, por omisión, una cuenta `StorageV2` dedicada con dos recursos SMB (`profiles` y `redirected`), soft delete de 14 días, un private endpoint y la zona `privatelink.file.` ligada a la VNet. El endpoint público queda deshabilitado. La VNet entrega el DNS del controlador de dominio a los clientes P2S para que el nombre de Azure Files resuelva a la IP privada. La cuenta de staging usada para transferir paquetes no se reutiliza ni se convierte en almacenamiento de perfiles. Los clientes deben usar el P2S de Azure o disponer de otra ruta privada a la VNet. El modo de enrolamiento público directo no puede usar estos recursos y el script de despliegue exige `-DeployUserRoaming $false` cuando no se despliega el gateway P2S. Para una cuenta SMB ya existente cuyo endpoint público se limite mediante el firewall de Storage a las redes institucionales, el configurador admite `-EndpointAccess Public`. En ese modo no exige una dirección RFC1918, pero sigue comprobando resolución DNS y TCP 445. La creación de los shares y las reglas de red de la cuenta existente se realiza antes de ejecutar el configurador. El host que aplica la integración AD/ACL debe conservar acceso temporal a SMB durante esa ejecución; después se establece `defaultAction=Deny` y se deja únicamente la red institucional autorizada. En el despliegue LCI actual esa regla final es `200.13.89.0/24`. El modo `-StaffProfileStorageMode Auto` es el predeterminado. Selecciona `Direct` con un endpoint privado y `CloudCache` con uno público. Cloud Cache mantiene el VHDX de trabajo en `C:\ProgramData\FSLogix\Cache` y sincroniza sus cambios con Azure Files, evitando que cada operación del perfil dependa de la latencia WAN de SMB. `CCDLocations` y `VHDLocations` son mutuamente excluyentes: el configurador elimina de forma efectiva el valor obsoleto al cambiar de modo, incluso en clientes que ya habían aplicado la GPO anterior. Puede forzarse un modo con `-StaffProfileStorageMode Direct` o `CloudCache`, pero `Direct` sobre un endpoint público sólo debe usarse para diagnóstico. Cloud Cache necesita espacio local suficiente para el perfil (30 GB de máximo por omisión), conserva la caché tras cerrar sesión y exige al menos un proveedor remoto sano al registrar o desmontar el perfil. Si el proveedor no completa la sincronización, el cierre espera como máximo 60 segundos y después conserva la caché local para reintentar; no la descarta. La GPO también impide el inicio con perfil temporal o local cuando FSLogix falla, para que una incidencia no produzca dos perfiles divergentes silenciosamente. Azure Files se integra con el AD DS SGU, no con cuentas o claves guardadas en cada cliente. El script configura AES-256 para Kerberos, una ACL de mínimo privilegio con `CREATOR OWNER`, administradores y los grupos del rol, y permiso SMB predeterminado para identidades autenticadas. La ACL NTFS mantiene aislado el contenido de cada usuario. La clave de la cuenta se usa en memoria sólo para crear las ACL iniciales y no se escribe en el dominio, en GPO ni en disco. Los grupos de rol sólo pueden enumerar la raíz y crear su propio directorio; no reciben `Modify` en la raíz compartida. El directorio creado hereda `CREATOR OWNER`, de modo que un usuario no puede modificar ni eliminar el contenedor de otro usuario. ## 1. Desplegar la infraestructura El soporte está activado por omisión para despliegues P2S: ```powershell $azure = .\scripts\Deploy-SguAzureInfrastructure.ps1 ` -SubscriptionId '00000000-0000-0000-0000-000000000000' ` -ResourceGroupName 'rg-sgu-lab' ` -Location 'centralus' ` -AdministratorUsername 'azureadmin' ` -P2sRootCertificatePath $p2s.RootCertificatePath $azure.UserRoamingStorageAccountName $azure.FsLogixProfilesSharePath $azure.RedirectedFoldersSharePath $azure.UserRoamingSetupArguments ``` Puede definirse un nombre globalmente único con `-UserRoamingStorageAccountName`. Para omitir completamente el almacenamiento: ```powershell -DeployUserRoaming $false ``` ## 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: 1. Instale Azure PowerShell actual (`Az.Accounts` y `Az.Storage` 8.1 o posterior). 2. Descargue y extraiga el módulo oficial [AzFilesHybrid](https://github.com/Azure-Samples/azure-files-samples/releases). 3. Ejecute el configurador incluido en el paquete de servidor: ```powershell $storageAccountName = '' $parameters = @{ SubscriptionId = '00000000-0000-0000-0000-000000000000' ResourceGroupName = 'rg-sgu-lab' StorageAccountName = $storageAccountName FsLogixProfilesShareName = 'profiles' RedirectedFoldersShareName = 'redirected' AzFilesHybridModulePath = 'C:\Admin\AzFilesHybrid' UseDeviceAuthentication = $true } .\payload\scripts\Enable-SguAzureUserRoaming.ps1 @parameters ``` Para reutilizar una cuenta con endpoint público: ```powershell $parameters.EndpointAccess = 'Public' $parameters.StaffProfileStorageMode = 'Auto' # resuelve a CloudCache .\payload\scripts\Enable-SguAzureUserRoaming.ps1 @parameters ``` La operación es idempotente. Crea `OU=AzureFilesConfig`, une la cuenta de almacenamiento al bosque y publica dos GPO: - `SGU - AL redirected folders`, ligada a `OU=Alumnos`; - `SGU - AD-DO FSLogix profiles`, ligada a `OU=Laboratorio` y habilitada sólo mediante configuración `ObjectSpecific` para los SID de `SGU-Docentes` y `SGU-Administrativos`. Por seguridad, el script no borra perfiles locales existentes de AD/DO. Antes de un piloto real, migre o respalde su contenido y elimínelos manualmente. El switch `-DeleteExistingStaffLocalProfiles` habilita la opción de FSLogix que los elimina al aplicar el contenedor; úselo sólo después de respaldar y validar. La identidad de Azure Files queda con contraseña sin expiración en la OU dedicada para evitar que una cuenta de equipo sin agente pierda Kerberos a los 30 días. Si la política exige rotación, use periódicamente el procedimiento oficial `Update-AzStorageAccountADObjectPassword` y no cambie sólo un lado. ## 3. Instalar FSLogix en los clientes Windows FSLogix no forma parte de Windows y su licencia debe validarse para las ediciones y suscripciones usadas. Descargue `FSLogixAppsSetup.exe` directamente de Microsoft y agréguelo a la imagen base, o páselo como quinto argumento al enrolamiento Azure: ```bat Start-SguAzureClientEnrollment.cmd 10.77.0.4 C:\SGU\vpn.zip C:\SGU\client.pfx C:\SGU\root.cer C:\SGU\FSLogixAppsSetup.exe ``` `Install-SguFsLogix.ps1` exige una firma Authenticode válida de Microsoft, instala silenciosamente sin reiniciar y comprueba `frxsvc` y `frx.exe`. Si la imagen ya contiene FSLogix, el instalador puede omitirse. Microsoft recomienda mantener la versión más reciente; FSLogix no se actualiza mediante Windows Update. Para cubrir también equipos ya unidos al dominio —incluidos los que estaban apagados durante el despliegue— publique el instalador como script de inicio de equipo: ```powershell .\payload\scripts\Publish-SguFsLogixClientDeployment.ps1 ``` El script descarga el paquete oficial FSLogix 26.08, valida la firma Authenticode de Microsoft y el SHA-256 esperado, y crea la GPO `SGU - FSLogix client deployment` ligada a `OU=Laboratorio`. El ejecutable queda en el SYSVOL de esa GPO y se instala de forma idempotente durante el arranque; no usa tareas programadas ni requiere que el equipo estuviera encendido al publicarla. Si `frxsvc` y `frx.exe` ya existen, el script de inicio termina sin reinstalar. ## 4. Validar un piloto Después de `gpupdate /force` y reiniciar un cliente: ```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\' Get-ItemProperty 'HKLM:\SOFTWARE\SGU\FSLogixDeployment' & 'C:\Program Files\FSLogix\Apps\frx.exe' list-redirects ``` En modo privado, la resolución debe devolver la IP privada del endpoint; en modo público debe devolver una dirección pública y TCP 445 debe estar permitido desde la red institucional. En Cloud Cache compruebe además que existe `C:\ProgramData\FSLogix\Cache` y que el registro efectivo contiene `CCDLocations`, pero no `VHDLocations`. Inicie primero con un `AL` nuevo y confirme las ubicaciones de Escritorio/Documentos; luego pruebe un `AD` o `DO` sin perfil local previo y confirme la creación de un VHDX en `profiles`. Revise `%ProgramData%\FSLogix\Logs\Profile` para confirmar que el perfil se registró sin `ERROR: 258`, perfil temporal ni retorno a `C:\Users`. No active el borrado de perfiles locales ni despliegue a todos los usuarios hasta probar inicio, cierre, desconexión de VPN, cuota y restauración. 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)