Terraform y Active Directory On-Premise: Automatización de la Creación de Cuentas al Estilo Git
por Raúl UnzuéAutomatización con Terraform de Active Directory
Para el administrador de sistemas, la gestión operativa de Active Directory (AD) tradicionalmente se centra en la interfaz gráfica "dsa.msc" (Usuarios y Equipos de Active Directory). La creación manual de objetos, como usuarios, la asignación a múltiples grupos o la reubicación en Unidades Organizativas (OU), resulta eficiente para tareas esporádicas. Sin embargo, este enfoque se vuelve insostenible y peligroso ante demandas de aprovisionamiento masivo o rotación constante de personal.
El principal problema del modelo de "clics manuales" reside en su falta de control, la gestión es imperativa (paso a paso), altamente propensa a errores humanos (inconsistencias en nombres o atributos), y carece de trazabilidad histórica. Si se produce una modificación crítica en un grupo de seguridad, la ausencia de un registro claro y auditable del cambio compromete la postura de seguridad y el cumplimiento normativo.
Aquí es donde interviene Terraform.
Terraform, el motor líder en Infraestructura como Código (IaC), trasciende su aplicación habitual en entornos de nube (AWS, Azure). Gracias al proveedor Active Directory (AD) On-Premise, ahora es posible aplicar la metodología declarativa directamente a su infraestructura local basada en Windows Server 2025. Esto implica que tu defines el estado ideal de tu Active Directory (los usuarios y grupos que deben existir) en un archivo de configuración de texto (HCL). Terraform garantiza que el estado real de su Dominio (el DC 2025) converja y se mantenga sincronizado con esa definición declarada.
Los beneficios inmediatos son:
- Auditoría y Versionado: Cada cambio se codifica, permitiendo su gestión a través de sistemas de control de versiones (Git) y una trazabilidad perfecta.
- Eficiencia Operativa: Creación rápida y consistente de objetos, eliminando errores tipográficos y minimizando el tiempo de aprovisionamiento.
- Transparencia (Self-Documentation): El código HCL actúa como la documentación viva de la estructura de identidades de su dominio.
A continuación, exploraremos cómo utilizar Terraform para codificar la creación de un nuevo equipo especializado, como "Vigilantes del Código", y sus miembros dentro de su Active Directory local.

Requisitos técnicos y Configuración Inicial Terraform y AD
Para que Terraform pueda "hablar" con tu Windows Server 2025, necesita usar el protocolo WinRM (Windows Remote Management).
Primero comprobamos que se "ven" dentro de nuestra red. Desde Terraform:
ip a
ping controlador-dominio

Upgrade Terraform
Adicionalmente, aseguraros de utilizar la última versión de Terraform:

Seguís las instrucciones de la página oficial:
wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(grep -oP '(?<=UBUNTU_CODENAME=).*' /etc/os-release || lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraform

Y validamos:

Habilitar WinRM en Windows Server 2025
En entornos de laboratorio, podéis ejecutar el siguiente comando en consola de PowerShell con privilegios de Administrador (para otras configuraciones utilizar configuraciones seguras con HTTPs y reglas específicas):
winrm quickconfig -force
| Parámetro | Propósito |
winrm quickconfig |
Configura los ajustes básicos de WinRM. |
-force |
Omite las peticiones de confirmación (Y/N). |

Verificación:
- Servicio: Verifique que el servicio WinRM esté en ejecución.
- Listener: Escriba winrm enumerate winrm/config/listener para ver los listeners activos. Debería ver un listener en Transport: HTTP y Port - 5985.
- Firewall: En el Firewall de Windows, busque la regla "Windows Remote Management (HTTP-In)".

Validar comunicación desde la máquina de Terraform con un Telnet:

Preparar entorno para Terraform
Una vez preparado el entorno, tenemos que pasar a configurar los parámetros para poder generar los usuarios y grupos de Active Directory que necesitemos. Creamos una carpeta donde guardar los ficheros:
root@TERRAFORM01:~# mkdir w2005ad
La configuración de Terraform va a estar compuesta por estos componentes:
| Fichero | Propósito Principal | Función Detallada |
provider.tf |
El Conector y las Credenciales | Es el punto de partida. Define qué proveedor (módulo de software) usará Terraform (hashicorp/ad) y cómo conectarse a su servidor. Aquí se establecen los datos de acceso para que Terraform pueda comunicarse de forma remota con su Windows Server 2025 mediante WinRM. |
groups.tf |
La Declaración de Grupos | Define el recurso (resource) de tipo ad_group. Declara que debe existir un grupo de seguridad llamado "Grupo_Vigilantes_Codigo" en una ubicación específica (container). |
users.tf |
La Declaración de Identidades | Define los recursos de tipo ad_user. Declara la existencia de dos usuarios (neo y trinity) con sus atributos clave: nombre de usuario (sam_account_name), nombre visible (display_name) y la política de contraseña inicial. |
membership.tf |
Las Relaciones de Pertenencia | Define el recurso ad_group_membership. Este fichero es el que enlaza los recursos creados previamente. Es crucial: utiliza las referencias internas de Terraform (ad_group.vigilantes_codigo.id y ad_user.neo.id) para asegurar que los usuarios se añadan al grupo solo después de que ambos hayan sido creados. |
Configurar Provider de Terraform
Nos ponemos manos a la obra, generamos provider.tf para que sepa como autenticarse con el DC:
# provider.tf
terraform {
required_providers {
ad = {
source = "hashicorp/ad"
version = ">= 0.1.0" # Aseg rate de usar una versi n compatible.
}
}
}
provider "ad" {
# Direccion IP o nombre de host del Controlador de Dominio (su WS 2025)
winrm_hostname = "neguad01.negu.local"
# Le decimos a Terraform que use las variables de entorno:
# TF_VAR_ad_user y TF_VAR_ad_pass
winrm_username = var.ad_user
winrm_password = var.ad_pass
# Eliminamos la credencial codificada
}
# Anadir el bloque 'variables' para declarar que espera estos valores:
variable "ad_user" {
type = string
description = "Usuario para conexion WinRM (e.g., Administrador@dominio.local)"
}
variable "ad_pass" {
type = string
description = "Password para conexion WinRM"
}

Agregamos las variables en Terraform:
export TF_VAR_ad_user="Administrador@midominio.local"
export TF_VAR_ad_pass="SuPasswordSuperSegura123"
Configurar Unidad Organizativa (OU)
Aseguramos que exista la unidad organizativa donde vamos a dejar los usuarios, por ejemplo:
- Ruta de la OU:
OU=Usuarios_Terraform,DC=negu,DC=local

Código Terraform: Usuarios y Grupos
Ahora vamos a declarar un nuevo grupo y dos usuarios, y luego agregaremos esos usuarios al grupo.
Grupo de Directorio Activo
Para ello definimos "groups.tf":
# group.tf
resource "ad_group" "vigilantes_codigo" {
name = "Grupo_Vigilantes_Codigo"
sam_account_name = "VigilantesCodigo"
container = "OU=Usuarios_Terraform,DC=midominio,DC=local"
description = "Equipo encargado de las revisiones de c digo de alto riesgo."
}

Creación Usuarios de DA
Creamos dos usuarios, "Neo" y "Trinity".
# users.tf
# Usuario 1: Neo
resource "ad_user" "neo" {
principal_name = "neo.anderson"
sam_account_name = "neo.anderson"
display_name = "Neo Anderson"
# Especificamos la OU donde se creará el usuario.
container = "OU=Usuarios_Terraform,DC=midominio,DC=local"
# Establecemos la contraseña inicial (¡debe ser compleja!)
initial_password = "LaMatrixEsReal123"
# Forzamos el cambio de contraseña en el primer login
pwd_last_set = 0
}
# Usuario 2: Trinity
resource "ad_user" "trinity" {
principal_name = "trinity.adams"
sam_account_name = "trinity.adams"
display_name = "Trinity Adams"
container = "OU=Usuarios_Terraform,DC=midominio,DC=local"
initial_password = "LaMatrixEsReal123"
pwd_last_set = 0
}

Añadir usuarios a grupo
Finalmente, añadimos los usuarios al grupo creado, ¡usando referencias cruzadas de Terraform!
# membership.tf
resource "ad_group_membership" "vigilantes_miembros" {
# Referencia al nombre del grupo creado en el paso 2.1
group_id = ad_group.vigilantes_codigo.id
# Referencias a los IDs de los usuarios creados en el paso 2.2
group_members = [
ad_user.neo.id,
ad_user.trinity.id
]
}

Implementación código Terrafom
Ahora sólo tenemos que ejecutar el código generado de la siguiente forma:
- Lanzamos "terraform init":
- Lanzamos "terraform plan":
- Y aplicamos con "terraform apply":
Si os da error de autenticación, y habéis revisado el usuario, es porque por defecto se intenta usar Kerberos, para una prueba podéis relajar la seguridad y habilitar posteriormente HTTPS como indicamos al principio de la entrada:

Por último, validamos la creación:

Terraform: El Futuro de la Gestión de Identidades
Hemos dejado atrás la época de trabajar "a martillazos y con suerte". Al unir la herramienta Terraform con nuestro Active Directory en Windows Server 2025, hemos convertido la tarea de dar de alta o baja de usuarios, en un proceso automatizado seguro.
Ya no habrá que cruzar los dedos por si alguien puso un guion bajo donde iba un espacio, o si un permiso importante se quedó sin dar. Todo queda escrito, guardado en un libro de registro digital (Git) y puede ser revisado por cualquiera.
Pero la joya de la corona es esto, la detección de intrusos automáticos. Si alguien (incluso tú, por error) toca un permiso a mano y estropea un grupo clave, Terraform, al ejecutar su revisión, levanta la mano y dice: "¡Eh! Esto no está como debería".
Fin del Artículo. ¡Cuéntanos algo en los Comentarios!



