Add Azure user roaming and reproducible Laboratorio wallpaper policy

This commit is contained in:
2026-09-17 16:40:44 -06:00
parent 7460f9316d
commit 7de6e2d867
18 changed files with 1258 additions and 6 deletions
+11
View File
@@ -78,6 +78,17 @@ is deliberately left unset because the verified page does not expose it.
Missing metadata does not clear existing AD values and never changes the
password outcome.
## Azure user roaming
Azure P2S deployments can add a dedicated, private Azure Files account. Student
accounts (`AL`) keep a non-authoritative local profile and redirect only
Documents/Desktop. Administrative and professor accounts (`AD`/`DO`) receive an
FSLogix VHDX profile container through object-specific settings keyed to their
AD security-group SIDs. The storage account uses AD DS Kerberos with AES-256;
share-root ACLs use `CREATOR OWNER` so users cannot browse one another's data.
The bootstrap staging account is deliberately separate. See
[user-roaming.md](user-roaming.md) for rollout and recovery constraints.
Every synchronization also enforces one idempotent security-group membership
from the classified institutional prefix: `AL` to `SGU-Alumnos`, `AD` to
`SGU-Administrativos`, and `DO` to `SGU-Docentes`. Each role group is stored
+17 -3
View File
@@ -13,7 +13,9 @@ La plantilla crea:
- IP pública Standard para la VM, protegida por NSG;
- VPN Gateway opcional `VpnGw1AZ` con IKEv2/OpenVPN y autenticación por certificados;
- pool P2S `172.30.0.0/24`, autorizado en los firewalls SGU;
- DNS de la NIC del servidor apuntando a `10.77.0.4`.
- DNS de la NIC del servidor apuntando a `10.77.0.4`;
- Azure Files privado para user roaming: `AL` conserva sólo Escritorio/Documentos
y `AD`/`DO` usa contenedores de perfil FSLogix.
Los prefijos privados deben ser RFC1918 y no deben solaparse con las redes usadas
por Hyper-V, el `Default Switch`, Wi-Fi o Ethernet locales. Los prefijos de
@@ -82,7 +84,9 @@ pública actual:
No utilice `0.0.0.0/0`. El despliegue de un VPN Gateway suele tardar bastante
más que la VM; omitirlo reduce tiempo y costo. El comando espera hasta que Azure
entregue un resultado final.
entregue un resultado final. User roaming se crea por omisión y requiere la ruta
privada del P2S; para un despliegue de enrolamiento público directo indique
`-DeployUserRoaming $false`.
## 3. Conectarse al servidor
@@ -137,6 +141,12 @@ El JSON debe indicar `NetworkConfigurationMode = PlatformManaged`, el pool P2S
en `TrustedClientNetworks` cuando exista VPN y los CIDR directos en
`PublicEnrollmentNetworks` cuando se hayan habilitado.
Después de terminar la promoción, una Azure Files al nuevo bosque y publique
las políticas por rol con `Enable-SguAzureUserRoaming.ps1`. Esta segunda fase
requiere Azure PowerShell y el módulo oficial AzFilesHybrid porque el SID y GUID
del bosque todavía no existen durante el despliegue Bicep. Consulte
[user roaming por rol en Azure](user-roaming.md).
## 5. Enrolar cada VM Hyper-V
En la estación administrativa, emita una credencial distinta por equipo:
@@ -155,7 +165,7 @@ Copie a la VM Windows 10/11 de Hyper-V:
Desde la carpeta extraída del bootstrap de cliente, instale P2S y enrole:
```bat
Start-SguAzureClientEnrollment.cmd 10.77.0.4 C:\SGU\sgu-azure-vpn-client.zip C:\SGU\sgu-azure-p2s-Windows11.pfx C:\SGU\sgu-azure-p2s-root.cer
Start-SguAzureClientEnrollment.cmd 10.77.0.4 C:\SGU\sgu-azure-vpn-client.zip C:\SGU\sgu-azure-p2s-Windows11.pfx C:\SGU\sgu-azure-p2s-root.cer C:\SGU\FSLogixAppsSetup.exe
```
En una sola ejecución el comando:
@@ -169,6 +179,10 @@ En una sola ejecución el comando:
5. registra mTLS, instala SGU/RustDesk y une el equipo al dominio;
6. reinicia Windows.
El quinto argumento es opcional. Cuando se proporciona, instala el binario
oficial de FSLogix después de validar su firma de Microsoft; puede omitirse si
la imagen ya lo contiene. Las GPO activan el contenedor únicamente para AD/DO.
Para el modo directo, cada Windows 10/11 usa el lanzador normal y la IP pública;
no necesita perfil ni certificado VPN:
+33
View File
@@ -0,0 +1,33 @@
# Protección del fondo de escritorio en Laboratorio
El bootstrap de servidor publica `SGU - Laboratorio wallpaper protection` en
`OU=Laboratorio` y sus OU hijas. Para actualizar un dominio existente sin volver
a ejecutar el bootstrap, ejecute en el DC con permisos para administrar GPO:
```powershell
.\scripts\Set-SguLaboratorioWallpaperPolicy.ps1 `
-TargetOuDn 'OU=Laboratorio,DC=lci,DC=lasalle,DC=mx'
```
El script reutiliza la GPO, respalda una existente antes de modificarla y verifica
los valores escritos. Admite `-WhatIf`. El vínculo está habilitado y forzado, con
prioridad 1, para que también alcance las OU hijas con herencia bloqueada.
- Loopback **Merge** aplica las opciones de usuario según la OU de la computadora
y conserva las otras políticas del usuario.
- `NoChangingWallPaper=1` bloquea el cambio desde Personalización.
- `Wallpaper` fija el archivo generado por SGU:
`%LOCALAPPDATA%\SGU\Wallpapers\welcome-%COMPUTERNAME%.jpg`, con estilo Fill.
Los clientes deben tener el generador, el fondo base y las fuentes que ya entrega
el enrolamiento SGU. La política no reemplaza el generador ni modifica el fondo
de inicio de sesión. No aplica a Linux. Es una restricción de la interfaz de
Windows, no una barrera contra administradores ni contra la modificación directa
del JPG, que está dentro del perfil del usuario.
Tras actualizar las políticas del equipo, cierre e inicie sesión para procesar
loopback y comprobar la política de usuario con `gpresult /h resultado.html`.
Compruebe también visualmente el fondo y Personalización en una sesión de dominio.
La validación por WinRM no sustituye esa prueba de escritorio interactivo.
Referencia: [configuración de fondos mediante GPO de Microsoft](https://learn.microsoft.com/windows/configuration/background/).
+42
View File
@@ -0,0 +1,42 @@
# SGU Credential Provider 0.6.0
Continúa la serie publicada después de `0.5.11`; no sustituye ni renumera versiones anteriores.
## Cambios
- Se incorpora al bootstrap la GPO `SGU - Laboratorio wallpaper protection`:
restringe el cambio de fondo en equipos Windows de Laboratorio y sus OU hijas
mediante loopback Merge, manteniendo el fondo personalizado de SGU.
- Se publican los cambios pendientes de roaming: Azure Files privado, recursos
separados para perfiles y carpetas, configuración de AD DS/ACL, perfiles
FSLogix por grupo AD/DO y rutas de Escritorio/Documentos para AL.
- El enrolamiento Windows admite un instalador FSLogix opcional y verifica su
firma Microsoft. Se incluyen scripts y documentación en los paquetes.
- Se incluyen las mejoras ya presentes en main desde el último lanzamiento:
ubicación del fondo por equipo/OU y pantalla de bloqueo mediante PersonalizationCSP.
## Alcance y precauciones
- Roaming requiere un piloto de inicio/cierre de sesión, permisos entre usuarios,
desconexión de VPN y recuperación de datos. Esta publicación no lo despliega ni
lo activa en el dominio existente. Los perfiles locales no se eliminan por
omisión; no habilite su eliminación sin respaldo y migración.
- La plantilla Azure agrega almacenamiento privado por omisión para P2S. El modo
de enrolamiento público directo requiere `-DeployUserRoaming $false`.
- La GPO de fondo necesita el generador SGU instalado. Las comprobaciones de GPO
no sustituyen la verificación visual tras un inicio de sesión de dominio.
- El bootstrap de servidor crea un bosque nuevo: no restaura SID, contraseñas ni
relaciones de confianza de un bosque anterior.
- Windows Home no admite unión al dominio; use una edición compatible. FSLogix
requiere verificar la licencia correspondiente.
## Descargas
- `sgu-windows-client-bootstrap-0.6.0.zip`
- `sgu-server-bootstrap-0.6.0.zip`
- `sgu-linux-client-bootstrap-0.6.0.zip`
- `sgu-azure-infrastructure-0.6.0.zip`
- `SHA256SUMS-0.6.0.txt`
Verifique los hashes SHA-256 antes de ejecutar los paquetes. No se incluyen
credenciales, certificados privados ni configuración local del entorno desplegado.
+144
View File
@@ -0,0 +1,144 @@
# 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.
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.
## 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)