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

160 lines
7.4 KiB
Markdown

# 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 | Un contenedor VHDX único de FSLogix montado desde Azure Files. |
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.<sufijo-de-Azure>` 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`.
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 = '<valor UserRoamingStorageAccountName del despliegue>'
$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
```
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 las imágenes 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.
## 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'
& 'C:\Program Files\FSLogix\Apps\frx.exe' list-redirects
```
La resolución debe devolver la IP privada del endpoint. 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`. 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)
- [Redirección de carpetas](https://learn.microsoft.com/windows-server/storage/folder-redirection/deploy-folder-redirection)