Active Directory : uso de un gMSA en una tarea programada
Table of Contents
I. Introducci贸n
En este tutorial, aprenderemos c贸mo crear una cuenta gMSA y utilizarla dentro de una tarea programada en Windows Server para ejecutar un script PowerShell (o cualquier otra cosa) de forma segura.
Ejecutar un script de PowerShell como parte de una tarea programada es una pr谩ctica muy habitual, incluso cuando se utiliza una cuenta con privilegios elevados en el dominio de Active Directory, para poder realizar las tareas adecuadas. Cuando configures la tarea programada, tendr谩s que asociar una cuenta de usuario que ser谩 utilizada por Windows para ejecutar la tarea. Para esta cuenta, tienes varias opciones, incluyendo :
- Asociar la cuenta de administrador del dominio (o equivalente), lo que es realmente malo;
- Asociar una cuenta de usuario con una convenci贸n de nomenclatura espec铆fica para que parezca una cuenta de servicio, por ejemplo "CDS-Srv-01", tampoco es lo ideal, ya que la contrase帽a de esta cuenta nunca se cambiar谩.
- Asociar una gMSA, es decir, una cuenta de servicio real almacenada en el Directorio Activo, con una contrase帽a que se renueva autom谩ticamente a intervalos regulares (sin ninguna configuraci贸n por tu parte): 隆eso s铆 que es bueno!
Por supuesto, en este tutorial voy a presentarte la 煤ltima opci贸n: usar una cuenta gMSA para ejecutar una tarea programada en Windows. Si eres nuevo en el concepto de gMSA, te recomiendo que leas el siguiente art铆culo, publicado hace alg煤n tiempo. Recuerda que las cuentas gMSA est谩n disponibles desde Windows Server 2012.
II. Creaci贸n de una cuenta gMSA
Para crear una cuenta gMSA en nuestro Directorio Activo, necesitamos generar una clave ra铆z KDS: este es un prerrequisito. Sin detenerme en el tema, como ya he hecho anteriormente, aqu铆 est谩 el comando a ejecutar para crear esta famosa clave KDS (el comando Get-KdsRootKey le permitir谩 ver si ya tiene uno) en un entorno de producci贸n(activo dentro de 10h, tiempo suficiente para permitir que la clave se replique en todos los DCs):
Add-KdsRootKey -EffectiveImmediately
Si quieres poder utilizar la clave KDS de inmediato sin tener que esperar 10 horas, puedes hacer trampa utilizando este comando:
Add-KdsRootKey -EffectiveTime ((Get-Date).AddHours(-10))
El cmdlet New-ADServiceAccount nos permitir谩 crear una gMSA llamada "gMSA-SRV-APPS" que el servidor "SRV-APPS" podr谩 utilizar. La contrase帽a de esta cuenta gMSA se regenerar谩 autom谩ticamente cada 30 d铆as. Aqu铆 est谩 el comando correspondiente:
New-ADServiceAccount -Name "gMSA-SRV-APPS" `
-Description "gMSA pour t芒ches planifi茅es SRV-APPS" `
-DNSHostName "gmsa-srv-apps.it-connect.local" `
-ManagedPasswordIntervalInDays 30 `
-PrincipalsAllowedToRetrieveManagedPassword "SRV-APPS$" `
-Enabled $True
La cuenta gMSA llamada "gMSA-SRV-APPS" est谩 creada en mi Directorio Activo. A煤n nos quedan dos cosas por hacer:
- Asociarlo con el servidor SRV-APPS en el Directorio Activo.
Add-ADComputerServiceAccount -Identity "SRV-APPS" -ServiceAccount "gMSA-SRV-APPS
- A帽谩dalo al grupo "Administradores de dominio", ya que debe poder realizar tareas que requieran privilegios elevados.
Add-ADGroupMember -Identity "Domain Admins" -Members "gMSA-SRV-APPS$"
Por supuesto, el grupo "Domain Admins" puede a帽adirse a trav茅s de la consola gr谩fica de gesti贸n de Active Directory, como cualquier otro objeto. De hecho, puedes comprobar que el gMSA est谩 en el directorio :

Cambiemos al servidor SRV-APPS y utilic茅moslo en una tarea programada.
III. A帽adir gMSA al servidor
El gMSA debe estar "instalado" en el servidor, para utilizar el t茅rmino del comando "Install-ADServiceAccount" que vamos a utilizar. Para usar este cmdlet, necesitas el m贸dulo PowerShell Active Directory en el host local (Add-WindowsFeature RSAT-AD-PowerShell). A continuaci贸n, inst谩lalo, llam谩ndolo por su nombre:
Install-ADServiceAccount "gMSA-SRV-APPS"S贸lo queda crear la tarea programada y utilizar gMSA.
IV. Creaci贸n de una tarea programada con gMSA
Para crear la tarea programada, ver谩s que es, salvo un detalle, un procedimiento cl谩sico para crear una tarea programada en una m谩quina Windows. Abre la consola "Administraci贸n de equipos" y, en el men煤 de la izquierda, "Programador de tareas". Haga clic con el bot贸n derecho y seleccione "Crear nueva tarea". Podr铆amos crear la tarea programada utilizando PowerShell, pero no es la forma m谩s intuitiva.

Se iniciar谩 el asistente y podremos configurar la tarea programada. Por mi parte, llamo a la tarea "PowerShell Script - Copiar un archivo a todos los ordenadores", 隆pero no te importar谩! 馃檪
Esta tarea programada ejecutar谩 el script "C:\Scripting\Copier-Fichier-PC.ps1", que tiene un objetivo muy simple: copiar un fichero a cada m谩quina AD contenida bajo la OU "PC". Aqu铆 est谩 el c贸digo, para su informaci贸n:
$PCList = (Get-ADComputer -Filter * -SearchBase "OU=PC,DC=it-connect,DC=local").name
Foreach($PC in $PCList){
Copy-Item -Path "C:PartageIT-Connect.txt" -Destination "\$PCPartage"
}Lo importante son las opciones de seguridad. Haga clic en el bot贸n "Usuario o grupo" para seleccionar gMSA como la cuenta utilizada por la tarea programada. Se abrir谩 una ventana... Haga clic en "Ubicaciones" y seleccione "Todo el directorio" (no su dominio) luego "Tipos de objetos" para seleccionar "Cuentas de servicio".

Una vez hecho esto, introduzca el nombre de su gMSA (o el principio de su nombre) y haga clic en "Comprobar nombres". La gMSA ya deber铆a estar localizada: s贸lo queda hacer clic en "Aceptar".

Ya est谩, 隆la tarea programada se ejecutar谩 con nuestra cuenta gMSA! 馃檪
En la pesta帽a "General", marque "Ejecutar aunque el usuario no est茅 conectado" y "Configurar para:", y elija la versi贸n de Windows m谩s alta de la lista.
Por lo dem谩s, tenemos que definir un activador y, a continuaci贸n, una acci贸n. Para la acci贸n, utilizaremos nuestro script PowerShell: haga clic en la pesta帽a "Acciones" y, a continuaci贸n, en "Nuevo". Especifique :
- Programa/script: powershell.exe
- A帽adir argumentos: Archivo "<ruta al script>" (para m铆: -File "C:\Scripting\Copier-Fichier-PC.ps1")
Lo que da:

Todo lo que tiene que hacer es confirmar, y la tarea programada estar谩 lista. Por 煤ltimo, le dejo que ajuste los dem谩s par谩metros para adaptarlos a sus necesidades, si lo desea.

V. Permitir que gMSA se conecte como una tarea
Para que la cuenta gMSA pueda ejecutar el script a trav茅s de la tarea programada, debe estar autorizada para iniciar sesi贸n como tarea. De lo contrario, el script no podr谩 ejecutarse en principio (pero me he encontrado casos en los que funciona sin este par谩metro). Para ello, es necesario crear una GPO y aplicarla al servidor o servidores que vayan a utilizar el gMSA, o modificar la pol铆tica local (gpedit.msc).
Si se utiliza un GPO, que ser谩 el caso en producci贸n, este par谩metro debe modificarse:
Configuraci贸n del ordenador > Estrategias > Configuraci贸n de Windows > Configuraci贸n de seguridad > Asignaci贸n de derechos de usuario > Inicio de sesi贸n como tarea
Este par谩metro debe ser definido y el gMSA seleccionado, de la misma manera que para la selecci贸n dentro de la tarea programada.

Gracias a este cambio adicional, el script PowerShell se ejecutar谩 como una tarea programada sin ninguna dificultad. 馃檪
Le recomiendo encarecidamente que ejecute sus tareas programadas (y otros servicios) con cuentas gMSA para reforzar la seguridad de su infraestructura basada en Active Directory.


