Add Azure user roaming and reproducible Laboratorio wallpaper policy
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
|
||||
@@ -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/).
|
||||
@@ -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.
|
||||
@@ -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)
|
||||
Reference in New Issue
Block a user