ARM series: uniendo máquinas Windows a dominio desde JSON

ARM series: uniendo máquinas Windows a dominio desde JSON

No dejo el tema de Active Directory Domain Services y el unir máquinas a dominio, y es que si la semana pasada os contaba cómo unir las máquinas basadas en GNU/Linux, esta vengo a contaros algo tan sencillo como ponente: unir en Azure máquinas Windows a dominio automáticamente desde nuestra plantilla JSON en ARM (Azure Resource Manager).

Imaginad la siguiente situación hipotética de infraestructura en Azure:

  • Tenemos 4 máquinas virtuales que hacen de controlador de dominio de ADDS.
  • Vamos a implementar 25 servidores Windows adicionales, todos ellos unidos a dominio usando estos controladores.

¡Phew! Nos vamos a tirar un rato ¿no? Los super-saiyans de la automatización sugerirán que lo más inteligente es desplegar las 25 máquinas con una imagen pre-cocinada preparada para aceptar conexiones WinRM y ya mediante PowerShell procedemos a unir automáticamente todas las máquinas. No está nada mal... ¡pero hay un camino mucho más sencillo y sin cocinar imágenes!

En la Azure QuickStart Templates Gallery encontramos esta interesante plantilla para unir máquinas Windows a dominio. Podemos ver como llama a la extensión JsonADDomainExtension para ejecutar la tarea una vez nuestra máquina está aprovisionada.

El código JSON para utilizarla tiene el siguiente aspecto:

{
  "apiVersion": "2015-06-15",
  "type": "Microsoft.Compute/virtualMachines/extensions",
  "name": "[concat('miMaquinaVirtual','/joindomain')]",
  "location": "[resourceGroup().location]",
  "dependsOn": [
            "[concat('Microsoft.Compute/virtualMachines/','miMaquinaVirtual')]"         
          ],
   "properties": {
       "publisher": "Microsoft.Compute",
       "type": "JsonADDomainExtension",
       "typeHandlerVersion": "1.3",
       "autoUpgradeMinorVersion": true,
       "settings": {
          "Name": "calnus.com",
          "OUPath": "CN=Computers,DC=calnus,DC=com",
          "User": "Administrator@calnus.com",
          "Restart": "true",
          "Options": "3"
       },
       "protectedsettings": {
          "Password": "[parameters('adminPassword')]"
       }
   }
}

¡Y con esto la tenemos! Aplicad la sustitución de cadenas por parámetros o variables e incluso utilizar copy() para unir de tirón varias máquinas virtuales sin escribir el JSON de todas ellas.

Hagamos un repaso rápido a los atributos:

  • Evidentemente, no olvidar la dependencia de la máquina virtual en cuestión, como ocurriría con cualquier extensión.
  • Name. Es el FQDN del dominio al que nos estamos uniendo.
  • OUPath (opcional). ¿Queréis unir vuestra máquina a una OU distinta de la de por defecto? Especificádlo aquí en formato distinguishedName.
  • User. El usuario apoderado para hacer la unión a dominio.
  • Restart. ¿Reiniciamos la máquina automáticamente tras completar la operación?
  • Options. El parámetro más esotérico, que recomiendo encarecidamente dejar siempre a 3, es la máscara de bits con la que se llama a la función de la API de Windows para realizar la operación de incorporación al dominio. Si tienes curiosidad puedes consultarlo aquí, prestando atención al parámetro fJoinOptions.
  • Password. La contraseña de la cuenta con permisos para unir a dominio, como SecureString. No dejar escrita en ningún archivo de texto plano.

¡Y eso es todo por hoy! Espero que esto os haga la vida un poquito más fácil.

Related Article