Si en Windows Server 2012 R2 el valor HKLM\SOFTWARE\Microsoft\Azure Connected Machine Agent\ArcESU\Enabled
permanece en 0
(o vuelve a 0
) pese a tener prerrequisitos instalados, esta guía explica por qué sucede y cómo corregirlo paso a paso sin trucos de registro.
Resumen en una frase
El agente de Azure Arc calcula y establece ArcESU\Enabled
según la elegibilidad real del servidor (licencia ESU vinculada + conectividad + prerrequisitos); si algo no cumple, siempre lo forzará a 0
aunque lo cambies manualmente.
Qué significa realmente ArcESU\Enabled
La clave de registro HKLM\SOFTWARE\Microsoft\Azure Connected Machine Agent\ArcESU\Enabled
es un reflejo del estado de licenciamiento ESU del equipo según la evaluación del agente de Azure Arc. No es un interruptor que puedas forzar:
Enabled = 1
: el agente ha validado criptográficamente una licencia ESU activa para ese equipo y detecta prerrequisitos y conectividad adecuados. El equipo es elegible para recibir parches ESU.Enabled = 0
: falta la licencia, hay problemas de conectividad/validación, los prerrequisitos no están completos o la edición/entorno no es compatible.
Internamente, el agente sincroniza este valor con un documento de licencia (por ejemplo, %ProgramData%\AzureConnectedMachineAgent\Certs\license.json
) y con las comprobaciones de elegibilidad. Por eso, cuando lo cambias a mano a 1
, vuelve a 0
.
Solución recomendada (orden lógico)
A continuación, un flujo de trabajo probado de menor a mayor impacto. Síguelo en orden y valida después de cada paso.
Verificar conexión y versión del agente
- Confirma que el servidor aparece como Connected en Azure Arc y que reporta estado saludable.
- Comprueba la versión del Azure Connected Machine agent. Se recomienda 1.34 o superior para ESU en Windows Server 2012/2012 R2.
# Ejecuta en PowerShell (administrador)
azcmagent version
azcmagent show
azcmagent check
Get-Service himds
Si el servicio himds
no está en ejecución, inícialo y revisa los logs del agente en %ProgramData%\AzureConnectedMachineAgent\Log\
(por ejemplo, himds.log
).
Crear y vincular la licencia ESU en Azure
Que el sistema tenga los prerrequisitos no basta: debes crear la licencia ESU y vincularla explícitamente al recurso Arc del servidor.
- En el portal de Azure, crea una Windows Server ESU license con la edición y el recuento de núcleos correctos.
- Desde la licencia, vincula los recursos Arc elegibles (Eligible resources → Enable ESUs).
- Para habilitar a escala, usa las built-in policies de Azure Policy para ESU.
Sin esta vinculación, el agente mantendrá Enabled = 0
.
Instalar los prerrequisitos en Windows Server 2012/2012 R2
En 2012/2012 R2 es necesario instalar el paquete de licenciamiento y la SSU especificados en la documentación de ESU posterior al fin de soporte (KB5031043 menciona el procedimiento). Tras aplicar los prerrequisitos, reinicia el servidor.
# Validar que el KB clave está presente (ejemplo)
Get-HotFix -Id KB5031043 -ErrorAction SilentlyContinue
Revisar las últimas SSU/LCU instaladas
Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 10
Comprobar conectividad y certificados
El agente debe poder salir a Internet para validar la licencia y comunicarse con los servicios de Arc y de Guest Configuration. Verifica si tu proxy/firewall permite la salida 80/443 a los endpoints de Arc y la obtención de certificados intermedios necesarios (Azure RSA TLS). En redes muy cerradas, instala manualmente los certificados intermedios requeridos.
Componente | Necesidad principal | Notas |
---|---|---|
Azure Arc (HIMDS) | Salida TCP 443 a <región>.his.arc.azure.com | Usa azcmagent check para diagnosticar. |
Guest Configuration | Salida TCP 443 a *.guestconfiguration.azure.com | Validación de políticas y estado. |
Validación ESU | Acceso a www.microsoft.com/pkiops/certs (80/443) | O instalar manualmente los intermedios Azure RSA TLS si no hay salida. |
# Pruebas rápidas (reemplaza <region> por tu región, ej. eastus)
Test-NetConnection eastus.his.arc.azure.com -Port 443
Test-NetConnection guestconfiguration.azure.com -Port 443
Forzar una nueva validación de licencia en el agente
Si actualizaste el agente o cambiaste la vinculación, fuerza la reevaluación borrando el artefacto local y reiniciando el servicio:
# PowerShell con permisos elevados
Remove-Item "$env:ProgramData\AzureConnectedMachineAgent\Certs\license.json" -Force -ErrorAction SilentlyContinue
Restart-Service himds
Start-Sleep -Seconds 30
reg query "HKLM\SOFTWARE\Microsoft\Azure Connected Machine Agent\ArcESU" /v Enabled
Confirmar compatibilidad del sistema
- ESU por Arc aplica a Windows Server 2012/2012 R2 Standard y Datacenter.
- No aplica a ediciones de Storage.
- Las VM en Azure o Azure VMware Solution usan beneficios ESU distintos; no deben inscribirse mediante Arc ESU.
Comprobar proveedores de recursos y políticas en la suscripción
- Confirma que
Microsoft.HybridCompute
yMicrosoft.GuestConfiguration
están registrados. - Revisa que no exista una política con efecto Deny que bloquee la creación o modificación de licencias ESU.
Validar estado desde el propio servidor
- Registro:
Enabled = 1
indica licencia válida;0
indica no habilitado. - Archivo de licencia: verifica la presencia de
C:\ProgramData\AzureConnectedMachineAgent\Certs\license.json
. - Logs: revisa
%ProgramData%\AzureConnectedMachineAgent\Log\
para mensajes de license, certificate o policy.
Checklist express (para cuando el tiempo apremia)
- El servidor aparece Connected en Arc y
azcmagent version
≥ 1.34. - La licencia ESU existe y está vinculada al recurso Arc correcto.
- Prerrequisitos instalados (paquete de licenciamiento + SSU, por ejemplo, KB5031043).
- Conectividad 443 a
<región>.his.arc.azure.com
y*.guestconfiguration.azure.com
; certificados intermedios válidos. - Se forzó reevaluación (
Remove-Item license.json
+Restart-Service himds
). - Edición/entorno compatible (no Storage, no VM de Azure/AVS).
- Resource providers registrados y políticas sin Deny.
Tabla de síntomas ⇄ causas ⇄ acciones
Síntoma | Causa más probable | Acción recomendada |
---|---|---|
Enabled permanece en 0 | La licencia ESU no está vinculada o caducó | Crear/vincular licencia ESU al recurso Arc y refrescar validación |
Enabled cambia a 1 y vuelve a 0 | Conectividad inestable o validación TLS fallida | Corregir proxy/firewall y cadena de certificados; probar con azcmagent check |
Arc muestra Disconnected | Servicio himds detenido o credenciales rotas | Iniciar himds , revisar logs y re-connect si procede |
Prerrequisitos instalados pero sin ESU | Falta SSU/paquete específico o requiere reinicio | Verificar KB requeridos (p. ej., KB5031043) y reiniciar |
Servidor elegible en portal pero registro en 0 | El agente no ha refrescado licencia | Borrar license.json y reiniciar himds |
Servidor con edición Storage | No soportado por ESU via Arc | Plan alternativo (actualización/migración) |
Diagnóstico en profundidad
Rutas y elementos clave
Elemento | Ruta / Ubicación | Propósito |
---|---|---|
Registro ESU | HKLM\SOFTWARE\Microsoft\Azure Connected Machine Agent\ArcESU\Enabled | Estado de elegibilidad según el agente |
Archivo de licencia | %ProgramData%\AzureConnectedMachineAgent\Certs\license.json | Token/licencia firmada para ESU |
Servicio del agente | himds (Azure Hybrid Instance Metadata Service) | Motor del agente de Azure Arc |
Binario CLI | C:\Program Files\AzureConnectedMachineAgent\azcmagent.exe | Comandos de comprobación y estado |
Logs del agente | %ProgramData%\AzureConnectedMachineAgent\Log\ | Eventos de conexión, TLS y licencias |
Pruebas con PowerShell para tu caja de herramientas
# 1) Información general de Arc
$arcInfo = azcmagent show | Out-String
$arcInfo
2) Versión del agente
\$arcVersion = azcmagent version
"Agent version: \$arcVersion"
3) Estado del servicio HIMDS
Get-Service himds | Format-List \*
4) Validación básica de ESU
\$esuReg = Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Azure Connected Machine Agent\ArcESU" -ErrorAction SilentlyContinue
\$licensePath = Join-Path \$env\:ProgramData "AzureConnectedMachineAgent\Certs\license.json"
\[PSCustomObject]@{
RegEnabled = \$esuReg.Enabled
LicenseJson = Test-Path \$licensePath
LicensePath = \$licensePath
}
5) Prerrequisitos (ejemplo de KB)
Get-HotFix -Id KB5031043 -ErrorAction SilentlyContinue
6) Conectividad (ajusta la región)
Test-NetConnection eastus.his.arc.azure.com -Port 443
Test-NetConnection guestconfiguration.azure.com -Port 443
Script de diagnóstico y autoreparación
Este script agrupa comprobaciones y, si lo autorizas (-Repair
), fuerza la reevaluación de la licencia:
function Test-ArcEsuEligibility {
[CmdletBinding()]
param(
[switch]$Repair
)
$result = [ordered]@{}
try {
$result.AgentVersion = (azcmagent version) 2>&1
} catch {
$result.AgentVersion = "No se pudo obtener versión (¿agente instalado?)"
}
try {
$result.AgentShow = (azcmagent show | Out-String)
} catch {
$result.AgentShow = "No disponible"
}
$svc = Get-Service -Name himds -ErrorAction SilentlyContinue
$result.HimdsStatus = if ($svc) { $svc.Status } else { "No existe el servicio himds" }```
$regPath = "HKLM:\SOFTWARE\Microsoft\Azure Connected Machine Agent\ArcESU"
$reg = Get-ItemProperty -Path $regPath -ErrorAction SilentlyContinue
$result.ArcEsuEnabled = if ($reg) { $reg.Enabled } else { "Clave no encontrada" }
$licensePath = Join-Path $env:ProgramData "AzureConnectedMachineAgent\Certs\license.json"
$result.LicenseJsonExists = Test-Path $licensePath
$kb = Get-HotFix -Id KB5031043 -ErrorAction SilentlyContinue
$result.KB5031043 = if ($kb) { "Instalado: $($kb.InstalledOn)" } else { "No encontrado" }
if ($Repair) {
if (Test-Path $licensePath) {
Remove-Item $licensePath -Force -ErrorAction SilentlyContinue
$result.RepairLicenseJson = "license.json eliminado"
} else {
$result.RepairLicenseJson = "license.json no estaba presente"
}
if ($svc) {
Restart-Service himds -ErrorAction SilentlyContinue
Start-Sleep -Seconds 20
$result.HimdsAfterRestart = (Get-Service himds).Status
}
$reg2 = Get-ItemProperty -Path $regPath -ErrorAction SilentlyContinue
$result.ArcEsuEnabledAfter = if ($reg2) { $reg2.Enabled } else { "Clave no encontrada" }
}
return [PSCustomObject]$result
```
}
Uso:
Solo diagnóstico
Test-ArcEsuEligibility
Diagnóstico + forzar reevaluación
Test-ArcEsuEligibility -Repair
Buenas prácticas y advertencias
- No edites manualmente
ArcESU\Enabled
: el agente lo sincroniza y revertirá cualquier cambio local. - Versiona el agente en tus imágenes/plantillas. Mantenerse en una versión antigua suele ser la causa oculta de muchas incidencias ESU.
- Etiqueta correctamente los recursos Arc en Azure (por ejemplo, edición y recuento de núcleos) para evitar vincular licencias incorrectas.
- Automatiza la habilitación con Azure Policy/Blueprints y revisiones periódicas de cumplimiento.
- Audita los cambios de red/proxy: un cambio en TLS/inspección puede romper la validación de licencias.
Comprobaciones posteriores: ¿estoy recibiendo ESU?
Una vez que Enabled = 1
, el equipo es elegible para recibir actualizaciones ESU. Puedes distribuir parches mediante tu herramienta habitual (Azure Update Manager, WSUS, ConfigMgr o un motor de parches de terceros). Valida que las LCU/SEC más recientes para 2012/2012 R2 se instalan correctamente.
# Historial de actualización (quick & dirty)
Get-HotFix | Where-Object { $_.Description -like "Security Update" } |
Sort-Object InstalledOn -Descending |
Select-Object -First 15
Verificar una KB específica de un mes concreto (ejemplo)
Get-HotFix -Id KB\ -ErrorAction SilentlyContinue
Preguntas frecuentes
¿Puedo “forzar” Enabled = 1
desde el registro?
No. El agente valida la elegibilidad en cada ciclo y volverá a escribir el valor conforme a la realidad (licencia + conectividad + prerrequisitos).
El portal dice “Eligible” pero el registro sigue en 0
.
Fuerza la reevaluación (license.json
+ reinicio de himds
). Si persiste, revisa conectividad TLS/PKI y que el recurso Arc vinculado corresponda exactamente a ese servidor (idempotencia en entornos clonados).
Instalé KB5031043 y reinicié, pero nada cambia.
Asegúrate de que la licencia ESU esté realmente creada y vinculada. Sin licencia activa, no se moverá a 1
.
Es una VM en Azure/AVS.
Esos entornos usan beneficios ESU distintos; no habilites ESU de 2012/2012 R2 mediante Arc para esas máquinas.
Estoy detrás de un proxy con inspección TLS.
Asegúrate de excluir del descifrado los endpoints de Arc y de contar con la cadena de confianza correcta; de lo contrario, la validación fallará y el valor volverá a 0
.
Plantilla de runbook de recuperación
- Ver
azcmagent version
≥ 1.34 yhimds
en Running. - Confirmar licencia ESU creada y vinculada al recurso Arc correcto (edición y núcleos correctos).
- Instalar paquete de licenciamiento + SSU conforme a KB y reiniciar.
- Validar conectividad 443 a servicios de Arc/Guest Configuration y disponibilidad de certificados intermedios.
- Eliminar
license.json
y reiniciarhimds
. - Verificar
Enabled = 1
y distribuir actualizaciones con tu gestor de parches.
Casos especiales y matices
- Servidores clonados: si clonaste una VM conectada a Arc, puede haber colisiones de identidad. Re-connect o regenera la identidad del agente antes de vincular ESU.
- Cambio de nombre de host o dominio: no afecta al valor si la identidad Arc permanece estable, pero planifica una revalidación.
- Ediciones Core: ESU cuenta por núcleos; sincroniza inventario/contabilidad para evitar underlicensing.
- Ambientes sin Internet: requieren gestión manual de certificados y posibles excepciones de proxy; documenta el procedimiento interno para auditoría.
Conclusión
Cuando ArcESU\Enabled
se resiste y permanece en 0
, no es un problema de registro, sino de elegibilidad real. Al alinear los cuatro pilares —agente actualizado y conectado, licencia ESU correctamente vinculada, prerrequisitos en el SO y conectividad/PKI válidas— el valor cambia a 1
de forma sostenible y el servidor vuelve a recibir parches de seguridad extendidos.
Anexo: lista de verificación imprimible
Ítem | Estado | Notas |
---|---|---|
Agente Arc ≥ 1.34 | [ ] | azcmagent version |
Estado Connected | [ ] | azcmagent show |
Licencia ESU creada | [ ] | Edición/núcleos correctos |
Licencia ESU vinculada al recurso Arc | [ ] | Recurso correcto |
Prerrequisitos (KB/SSU) instalados | [ ] | Incluye KB5031043 |
Conectividad a endpoints Arc/GC | [ ] | 443 permitido; proxy OK |
Certificados intermedios válidos | [ ] | Azure RSA TLS |
Revalidación forzada realizada | [ ] | Eliminar license.json + reinicio himds |
ArcESU\Enabled = 1 | [ ] | Listo para recibir ESU |
Créditos rápidos
Este artículo condensa prácticas de campo y la semántica operativa del agente de Azure Arc para ESU en Windows Server 2012/2012 R2, incluyendo la interpretación de ArcESU\Enabled
, el rol de license.json
, la vinculación de licencias y la verificación de conectividad/certificados, además de un enfoque de resolución por etapas y un set de scripts reutilizables.