Implementación con un infraestructura de servidores de extracción - PowerShell DSC en la nube de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Implementación con un infraestructura de servidores de extracción

En esta sección, explicaremos cómo usar un script de configuración de PowerShell DSC junto con una plantilla de AWS CloudFormation para implementar nuestra arquitectura de ejemplo.

Descripción general del script de configuración de DCS

Nuestra infraestructura de servidores de extracción usa un único script de configuración de DSC que se aplica a todos los servidores de la implementación. El script de configuración garantiza que los sistemas implementen los siguientes cambios:

  • Crear el bosque y el dominio de Active Directory crear un controlador de dominio en la primera zona de disponibilidad

  • Configurar la topología de sitios de Active Directory

  • Unir cada nodo al dominio

  • Promover otro servidor a un controlador de dominio en la segunda zona de disponibilidad

  • Instalar los servicios de Puerta de enlace de Escritorio remoto en las puertas de enlace de Escritorio remoto en subredes públicas

  • Implementar IIS y nuestra página web de ejemplo en los servidores en cada zona de disponibilidad

Muchas de estas tareas relacionadas con la creación de esta infraestructura utilizan recursos de DSC que no son nativos del sistema operativo. Microsoft ha creado una serie de recursos de DSC adicionales y experimentales que se pueden descargar en "DSC Resource Kit Waves." Hemos utilizado varios de estos recursos para configurar el estado de los sistemas en esta arquitectura. Además, hemos creado recursos de DSC personalizados para configurar algunos aspectos del entorno que no son actualmente compatibles con los recursos de DSC proporcionados por Microsoft.

Para ayudar a garantizar que estos recursos de DSC siempre estén disponibles, hemos guardado copias en un bucket de Amazon S3. Esto impide que nuestra plantilla de implementación automatizada deje de funcionar si de repente cambian los enlaces en Internet. También ofrece la posibilidad de recuperar versiones anteriores de código, ya que el bucket de Amazon S3 tiene habilitado el control de versiones.

Proceso de arranque del servidor de extracción de PowerShell DSC

La secuencia de arranque del servidor de extracción sienta las bases para crear el resto del entorno. Como se ilustra en la figura 1, cada nodo cliente tiene acceso a servidores de extracción con balanceo de carga a través de Elastic Load Balancing. El proceso de arranque del servidor de extracción incluye lo siguiente:

  • IAM Role— el servidor de extracción se lanza con un rol de IAM, que permite a la instancia llamar a la instanciaDescribeLoadBalancersyDescribeInstancesLas acciones. Este proceso permite que el servidor de extracción determine el nombre DNS de Elastic Load Balancer y consulte las etiquetas definidas en cada instancia Amazon EC2 de la pila.

  • Configuración: se descargan todos los componentes necesarios, como el script de configuración del servidor de extracción, el script de configuración principal, los módulos de recursos de DSC y otros scripts auxiliares. Estas descargas de archivos se realizan mediante el recurso de archivos de AWS CloudFormation.

  • Certificado autofirmado: el servidor de extracción crea un certificado autofirmado mediante un script auxiliar. El nombre DNS del Elastic Load Balancer interno se obtiene del cmdlet Get-ELBLoadBalancer. El nombre DNS se utiliza como el nombre común en el certificado autofirmado. Esto permite que los nodos cliente extraigan sus configuraciones a través del punto de enlace con balanceo de carga usando conexiones HTTPS seguras.

  • Arranque del servicio web DSCEl servidor de extracción ejecuta el script de configuración CreatePullServer.ps1, que crea un archivo MOF para el servidor de extracción. La configuración se aplica entonces localmente para crear un servicio web de DSC que esté a la escucha en el puerto TCP 8080, que está configurado para utilizar la huella digital del certificado autofirmado creada anteriormente para proteger el servicio web.

  • Generación de configuracionesEl servidor de extracción ejecuta el script de configuración principal, que produce un archivo MOF para cada servidor del entorno. Debe cambiarse el nombre de cada archivo al ConfigurationID del nodo asociado, que se representa como un identificador global único (GUID). Cada instancia se etiqueta en Amazon EC2 con un GUID mediante elAWS CloudFormationplantilla de. El servidor de extracción puede obtener estos ConfigurationID, cotejarlos con cada nodo de la topología, y cambiar el nombre y realizar una suma de comprobación del archivo.

Script de configuración del servidor de extracción

En la figura 5 se muestra el código de CreatePullServer.ps1, que es el script de configuración usado para crear el servidor de extracción.


    Script de configuración del servidor de extracción

Figura 5: Script de configuración del servidor de extracción

El script de configuración CreatePullServer.ps1 depende del módulo de recursos xPSDesiredConfiguration. Se trata de un módulo no nativo que se puede obtener de Microsoft. La plantilla de AWS CloudFormation está configurada para descargar este módulo de Amazon S3 como un archivo .zip, que luego se desempaqueta en$env:ProgramFiles\ WindowsPowerShell\ DSCService\ Modulesen el servidor de extracción.

Veamos algunos puntos interesantes de este script de configuración:

  • Línea 9: declaramos DSCServiceFeature, que garantiza que DSC-Service WindowsFeature esté presente e instalado en el servidor.

  • Línea 19Observe que el valor de la huella digital del certificado se recupera del almacén de certificados local del equipo. Esto se debe a que previamente generamos e instalamos el certificado autofirmado durante el proceso de arranque.

  • Línea 23: el recurso PSDSCPullServer usa el atributo DependsOn para garantizar que DSC-Service se instale primero antes de intentar configurar DSC Web Service.

  • Línea 29— La llamada aStart-DscConfigurationnos indica que se trata de una operación «push» de DSC. El servidor de extracción extrae su configuración en sí mismo. Otros nodos del entorno se configurarán en modo de extracción.

Se llama al script CreatePullServer.ps1 en el servidor de extracción mediante AWS CloudFormation.


    Ejecución del script de configuración CreatePullServer.ps1 en Pull1 medianteAWS CloudFormation

Figura 6: Ejecución del script de configuración CreatePullServer.ps1 en Pull1 mediante AWS CloudFormation

Recuerde que existen dos servidores de extracción en este entorno para ofrecer una alta disponibilidad. Cada instancia de servidor de extracción se arranca mediante los pasos descritos aquí.

Una vez que haya implementado su entorno, tendrá que asegurarse de que el contenido descargable (archivos MOF, módulos de recursos y sumas de comprobación) se mantenga actualizado en ambos servidores de extracción. Esto puede realizarse como un procedimiento de su proceso de implementación o mediante un servicio de sincronización de archivos para mantener sincronizados los módulos y directorios de configuración de los servidores de extracción.

Proceso de arranque de instancias cliente

El proceso de arranque de cada instancia cliente incluye lo siguiente:

  • IAM Role: cada servidor se lanza con un rol de IAM, que permite a la instancia llamar a la claseDescribeLoadBalancersyDescribeInstancesLas acciones. Este proceso permite que el servidor determine el nombre DNS de Elastic Load Balancer y consulte las etiquetas definidas en cada instancia Amazon EC2 de la pila.

  • Configuración: se descargan los scripts auxiliares de Amazon S3. Estas descargas de archivos se realizan mediante el recurso de archivos de AWS CloudFormation.

  • Certificados: además de conectar con el nombre DNS correcto, los clientes también deben confiar en el certificado instalado en el servidor de extracción. El certificado autofirmado se descarga del servidor de extracción y se instala localmente. Tenga en cuenta que esto es así para fines de demostración y que una solución de PKI empresarial probablemente sea el mejor método para hacer esto en producción.

  • Configuración del LCM: a continuación, se configura Local Configuration Manager con el punto de enlace HTTPS que debe utilizarse como el servidor de extracción. En este caso, el punto de enlace será Elastic Load Balancer. Además, se define el ConfigurationID del nodo. De nuevo, cada instancia Amazon EC2 se etiqueta con un ConfigurationID único, que también se puede obtener de Amazon EC2.

Script de configuración de arranque del cliente

En la figura 7 se muestra el código de SetPullMode.ps1, que es el script de configuración usado para configurar el cliente.


    Script de configuración del cliente de DSC

Figura 7: Script de configuración del cliente de DSC

Veamos algunos puntos interesantes de este script de configuración:

  • Línea 7— el GUID asignado a la instancia se recupera del Amazon EC2guidy se almacena en una variable.

  • Línea 8: almacenamos el nombre DNS de Elastic Load Balancer en una variable llamada $PullServer.

  • Línea 13— El de Local Configuration ManagerConfigurationModetoma el valorApplyAndAutoCorrect. Esta configuración ayuda a garantizar que las modificaciones y los problemas de desviación de la configuración se corrijan y que el sistema permanezca en el estado deseado.

  • Línea 14— ElConfigurationIDPara el nodo cliente se establece mediante el valor de la propiedadguidetiqueta en la instancia Amazon EC2.

  • Línea 15— ElCertificateIDse establece en la huella digital del certificado autofirmado que se ha obtenido del servidor de extracción. Además de utilizar el certificado autofirmado del servidor de extracción para proteger las conexiones HTTPS, también se utiliza para el cifrado. La definición de CertificateID permite que el nodo cliente descifre las credenciales en los documentos MOF.

  • Línea 22: ServerUrl se configura para usar la variable $PullServer, que está establecida en el nombre DNS de Elastic Load Balancer.

Se llama al script SetPullMode.ps1 en cada instancia desde AWS CloudFormation. Los valores de los parámetros Instance y Region se pasan en tiempo de ejecución.


    Ejecución del script de configuración SetPullMode.ps1 medianteAWS CloudFormation

Figura 8: Ejecución del script de configuración SetPullMode.ps1 mediante AWS CloudFormation

Una vez establecido el modo de extracción en la instancia, se invoca una operación de extracción manualmente. Para ello, se llama al cmdlet Update-DscConfiguration con el paquete acumulativo de actualizaciones de noviembre de 2014 para Windows Server 2012 R2 (KB3000850).

Para ver la configuración de Local Configuration Manager (metaconfiguración) de un nodo, puede utilizar el cmdlet Get-DscLocalConfigurationManager.

El script de configuración

Ahora que sabemos cómo se arrancan los servidores de extracción y las instancias, vamos a examinar más de cerca el script de configuración responsable de definir el estado de cada servidor en el entorno.

Es importante tener en cuenta que en esta implementación de referencia de inicio rápido, el servidor de extracción se utiliza como un "servidor de compilación", lo que significa que descarga y ejecuta el script de configuración, generando archivos MOF para todos los servidores del entorno. Esto significa que todos los recursos adicionales deben descargarse y extraerse en $env:ProgramFiles\WindowsPowerShell\Modules en el servidor de extracción durante el proceso de arranque.

Echemos un vistazo a la estructura del script de configuración que se muestra en la siguiente figura. Varios bloques de código están contraídos y se explicarán más detalladamente en las siguientes secciones de esta guía.


    La estructura del script de configuración principal

Figura 9: La estructura del script de configuración principal

  • Líneas 1 a 13— Elparambloque incluye una serie de parámetros que se utilizan para definir la configuración de nuestro entorno. Todos estos parámetros se asignan a los parámetros de la plantilla de AWS CloudFormation. Al lanzar la pila, se le ofrecerá la oportunidad de personalizar el entorno en el momento del lanzamiento. Podrá cambiar los intervalos de CIDR de la subred, las direcciones IP, el nombre DNS del dominio de Active Directory, etc. Estos valores de parámetros se pasan desde AWS CloudFormation al servidor de extracción que compila las configuraciones utilizando los ajustes que haya proporcionado.

  • Línea 16— Una sola llamada aGet-ELBLoadBalancerpara obtener el nombre DNS de Elastic Load Balancer. Este será el punto de enlace que usen los nodos cliente para extraer las configuraciones del servidor de extracción.

  • Líneas 19 y 20 : importación de funciones auxiliares usadas para recuperar los GUID de nodo y ayudar a formatear la información de IP usada por el recurso de DSC xNetworking.

  • Línea 23: los datos de configuración del entorno, descritos de forma más detallada en las siguientes secciones de esta guía.

  • Líneas 62 y 63: las credenciales usadas por los servidores miembro para unirse al dominio de Active Directory.

  • Línea 66Configuración de DSC llamada «ServerBase». En la configuración, importamos los recursos de DSC xNetworking, xActiveDirectory y xComputerManagement, ya que no son nativos de Windows Server 2012 R2.

  • Línea 294 en adelante: el código usado para crear los archivos MOF, cambiarlos de nombre y moverlos al directorio correspondiente del servidor de extracción.

Ahora vamos a examinar más de cerca cada aspecto del script de configuración.

Recursos de DSC

El único recurso de DSC utilizado en nuestro script de configuración que es nativo de Windows Management Framework 4.0 es el recurso WindowsFeature. Los demás recursos, que incluyen recursos de los módulos de recursos xNetworking, xActiveDirectory y xComputerManagment, los proporcionaba Microsoft en una versión fuera de banda. Estos módulos de recursos se han almacenado en Amazon S3 y los descargan los servidores de extracción en formato .zip. Los servidores de extracción se configuran a continuación para alojar los módulos de recursos comprimidos, de forma que se puedan descargar desde los nodos cliente de DSC.

Datos de configuración

Los datos de configuración ofrecen una forma de definir valores del entorno adicionales para los nodos en una configuración. Los datos de configuración son una tabla hash de valores que se pueden pasar a una configuración cuando se generan los documentos MOF. En la figura 10 se muestra un ejemplo de los datos de configuración para la configuración de DSC principal de nuestro entorno.


    Datos de configuración de DSC

Figura 10: Datos de configuración de DSC

En el ejemplo de la figura 10 (que está resumido por motivos de brevedad), los datos de configuración contienen una tabla hash para cada nodo de nuestra implementación. Cada propiedad se describe a continuación:

  • NodeName: el nombre de host de la instancia, que se corresponde con el nombre del nodo en el script de configuración.

  • Guid: el ConfigurationID (en forma de un GUID) que el servidor de extracción y el cliente de DSC utilizarán para determinar qué configuración se debe extraer del servidor.

  • AvailabilityZone: se trata de una propiedad personalizada para indicar en qué zona de disponibilidad de AWS se encuentra la instancia. Como veremos, esta propiedad personalizada se utiliza en el script de configuración para aplicar los ajustes específicos de la ubicación de la instancia.

  • CertificateFileRuta física del «servidor de compilación» (en este caso, el servidor de extracción) del certificado que se utilizará para cifrar las credenciales incrustadas en el archivo MOF resultante. Recuerde que los nodos cliente deben tener la clave privada para descifrar las credenciales.

  • Thumbprint: la huella digital del certificado en el nodo cliente para indicar qué certificado instalado debe utilizarse para descifrar los datos.

Configuración del cliente DNS

Como nuestra arquitectura se distribuirá entre dos zonas de disponibilidad, es lógico que los servidores unidos al dominio usen el servidor DNS de Active Directory de la zona de disponibilidad local. Damos cuenta de esto en nuestra configuración utilizando lógica adicional y el recurso xDnsServerAddress, que está disponible como parte del módulo de recursos xNetworking.


        Configuración de DNS

Figura 11: Configuración de DNS

Como puede ver en la figura 11, filtramos $AllNodes (que se definirá mediante nuestros datos de configuración), para que las instancias de AZ1 apunten al controlador de dominio de la primera zona de disponibilidad de su servidor DNS principal, y viceversa.

Configuración del controlador de dominio

La configuración del controlador de dominio se realiza sobre todo con los recursos del módulo de recursos xActiveDirectory. A fin de implementar totalmente una topología distribuida de Active Directory, añadimos una serie de recursos adicionales al módulo.


        Configuración de DC1

Figura 12: Configuración de DC1

Veamos algunos puntos de la configuración de DC1 que se muestra en la figura 12:

  • El recurso cIPAddress establece la dirección IP del controlador de dominio a través del parámetro de la plantilla de AWS CloudFormation. La gateway y la máscara de subred predeterminadas se establecen en función de la dirección IP y el CIDR de subred utilizando un par de funciones auxiliares.

  • LacADSubnetEste recurso se utiliza para crear definiciones de subred para cada subred de la VPC Amazon. cADSubnet es un recurso personalizado que no estaba incluido originalmente en el módulo de recursos xActiveDirectory. Lo hemos añadido para ayudar a configurar la topología de sitios de Active Directory (AD) para esta implementación de referencia de inicio rápido.

  • El recurso cADSite se utiliza para crear objetos de sitios de AD para cada zona de disponibilidad que aloje un controlador de dominio. cADSite es un recurso personalizado que no estaba incluido originalmente en el módulo de recursos xActiveDirectory. Lo hemos añadido para ayudar a configurar la topología de sitios de Active Directory para esta implementación de referencia de inicio rápido.

  • El recurso cADSiteLinkUpdate se utiliza para vincular los dos sitios de AD, de forma que los controladores de dominio repliquen datos entre sí. cADSiteLinkUpdate es un recurso personalizado que no estaba incluido originalmente en el módulo de recursos xActiveDirectory. Lo hemos añadido para ayudar a configurar la topología de sitios de Active Directory para esta implementación de referencia de inicio rápido.

Una vez creado el primer controlador de dominio, DC2 se instala en la segunda zona de disponibilidad mediante la siguiente configuración de nodos:


        Configuración de DC2

Figura 13: Configuración de DC2

Como el bosque y el dominio fueron creados por DC1, puede ver en la figura 13 que DC2 simplemente debe añadirse al dominio y promoverse a un controlador de dominio.

Configuración de Puerta de enlace a Escritorio remoto

La configuración de nodos para los servidores de Puerta de enlace a Escritorio remoto es relativamente sencilla. El servicio RDGateway y las herramientas de administración de servidores remota (RSAT) asociadas están instalados en el servidor, y el servidor se une entonces al dominio de Active Directory.


        Configuración de RDGW1

Figura 14: Configuración de RDGW1

La configuración de RDGW2 es idéntica a la que se muestra en la figura 14 para RDGW1, con la excepción del nombre de nodo. Una vez implementado el entorno, puede iniciar una conexión de Escritorio remoto a cualquier gateway usando una conexión al puerto TCP 3389 estándar. Para configurar totalmente el rol RDGateway con certificados (de modo que pueda protegerse a través de HTTPS), debe seguir los pasos adicionales de nuestra Implementación de referencia de inicio rápido de Puerta de enlace de Escritorio remoto.

Configuración del servidor web

La configuración del servidor web es la misma para los servidores WEB1 y WEB2. Después de unir cada servidor al dominio, IIS, ASP.NET y las páginas web "hello world" de ejemplo se instalan en los sistemas.


        Configuración de WEB1

Figura 15: Configuración de WEB1

La configuración de la figura 15 crea un único sitio web de IIS a la escucha en el puerto TCP 80 que aloja una sola página web. Puede desplazarse al servidor web después de la implementación para confirmar que IIS funciona correctamente.

Generación de los documentos MOF

Como ya se ha indicado, el servidor de extracción ejecuta el script de configuración que produce un archivo MOF para cada servidor del entorno. Cada archivo MOF tiene inicialmente un nombre base que coincide con el nombre de host del servidor asociado. Por ejemplo, el primer archivo de controladores de dominio se llamará DC1.MOF.

Para que los nodos cliente extraigan estas configuraciones, los archivos deben renombrase usando el ConfigurationID de los nodos, que es el GUID almacenado en elAWS CloudFormationPlantilla de y etiquetado en la instancia Amazon EC2.


        Fragmento de código

Figura 16: Fragmento de código

El fragmento mostrado en la figura 16 es el código incluido al final del script de configuración que se ejecuta en el servidor de extracción y genera los archivos MOF, cambia el nombre de los archivos y los mueve a la carpeta correspondiente. El nombre de la configuración es ServerBase y almacenamos el resultado de la ejecución de la configuración en la variable $mofFiles, que almacenará el conjunto de objetos del sistema de archivos que representan cada archivo MOF. A continuación, recorremos en bucle la lista de archivos, cotejando el GUID (ConfigurationID) con el nombre de cada nodo y cambiando el nombre del archivo. Por último, movemos los archivos a la carpeta Configuration, donde se realiza una suma de comprobación y se encuentran listos para su descarga.