Realizar tests de nuestra infraestructura es importante porque nos ayuda entre otras cosas a saber que la infraestructura que estamos desplegando esta correctamente implementada, tal y como la queremos.

Es por eso que en este post os voy a hablar de Inspec. Inspec es un framework creado por Chef y programado con Ruby que nos permite hacer tests y auditar nuestra infraestructura, ya sea en proveedores de cloud como Azure o AWS, un IIS, la configuración SSH o la configuración de un servidor Windows o Linux. Actualmente en el momento de escribir este post, Inspec va por la versión 4.12.

Para empezar a trabajar con Inspec con Azure tenemos varias opciones, siendo la más rápida hacer uso de Azure Cloud Shell https://shell.azure.com/, ya que de forma nativa está instalado Inspec.

Escribiendo inspec –version vemos que inspec está instalado. Lo que si es cierto es que la versión de inspec incluida en Azure Cloud Shell siempre es más antigua que la podríais tener instalada en vuestro equipo, por ejemplo, la versión disponible ahora en Azure Cloud Shell es la 3.6.6.

Si queremos trabajar con Inspec desde plataformas Windows, la mejor forma es instalarlo a través de Chocolatey (https://chocolatey.org/packages/inspec). Desde Powershell o línea de comandos (acordaros de ejecutarlo en modo administrador) ponemos choco install inspec

Una cosa también a deciros es que no os desesperéis, ya que al escribir el comando inspec tarda un poco en “arrancar” (10 segundos más o menos).

Una vez ya instalado inspec debemos de crearnos un Service principal con rol de Contributor en la subscripción de Azure donde se van a realizar los tests. A continuación, paso los diferentes métodos para crear un Service principal:

https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-authenticate-service-principal-cli

https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-authenticate-service-principal

https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-service-principal-portal

Una vez creado el service principal, ya podemos empezar a trabajar con inspec. Lo primero que escribimos es inspec init profile AzureFirstTests

Este comando lo que hace es crearnos un profile. Podríamos definir un profile como un “contenedor” que nos crea una estructura de carpetas predefinida en la que están contenidas una serie de tests /controls dentro de la carpeta controls. 

Una vez creado el profile, vamos a modificar el fichero inspec.yml quedando el contenido de la siguiente manera:

Aquí las dos partes importantes son depends y support. Con depends indicamos que vamos a usar el Azure InSpec Resource Pack ubicado en la url de Github que podéis ver arriba en código. Podemos decir de forma muy simple que un Resource Pack en Inspec es una librería escrita en Ruby que nos ayuda a realizar los tests, en este caso tests de Azure.

En el caso de supports, lo que definimos cual va a ser la plataforma contra los que van a ser lanzados nuestros tests, en nuestro caso Azure. Por último, respecto al fichero inspec.yml, saber que debéis usar espacios y no tabulaciones. Acordándose de esto puede ahorrarnos muchos quebraderos de cabeza y tiempo.

Una ya creado nuestro service principal y configurado así como instalado inspec, también creado nuestro profile y modificado el fichero inspec.yml, llega por fin lo mejor que es crear nuestros primeros tests contra Azure. Para ello vamos a la carpeta controls y borramos el fichero example.rb y creamos uno llamado virtualmachines.rb

Dentro de virtualmachines.rb vamos a crear unos tests sobre ciertas características de una máquina virtual en azure. El contenido a poner es el siguiente:

Lo que más me encanta de Inspec es que viendo los tests sabes a simple vista que se esta probando. En nuestro ejemplo se comprueba los siguiente:

  • Que la máquina virtual existe y se llama 2fawinserver
  • Que esta creada en West Europe
  • Que el recurso que se comprueba es de verdad una máquina virtual
  • Que el tamaño de la máquina virtual es Standard B1ms

Una vez creado el test/tests vamos a ejecutar nuestro profile. Para ello lanzamos:

inspec exec AzureFirstTests -t azure://

Intencionadamente 1 de los tests falla. Inspec nos dice que el tipo de máquina virtual no es Standard_B1ms sino Standard_DS1_v2. Modificamos nuestro test para que ahora si ya pase correctamente.

Volvemos a lanzar el comando inspec exec AzureFirstTests -t azure://, y ahora si ya los tests funcionan correctamente.

Para ver ejemplos de cómo realizar más tests de Azure podéis visitar la página de github del Resource Pack de Azure https://github.com/inspec/inspec-azure.

También deciros que en esta página de ejemplos no encontrareis todas las propiedades por las que podéis realizar los tests contra los recursos de Azure.

Para ello lo mejor es hacer uso de Azure Resource Explorer para poder ver que propiedades podemos consultar. La url de Azure Resource Explorer es https://resources.azure.com/ . Vamos a ver un ejemplo, en este caso dentro de Azure Resource Explorer vamos a la parte donde consultamos la información en nuestro caso la máquina virtual 2fawinserver

En nuestro caso vamos a hacer test de las propiedades marcadas en rojo en la imagen de abajo

Esto trasladado a nuestro tests quedaría de la siguiente manera:

Ahora si lanzamos de nuevo los tests con inspec exec AzureFirstTests -t azure:// los tests nuevos pasan correctamente.

El código de este profile de inspec lo teneís disponible en https://github.com/recetasdevops/InspecAzureFirstSteps

Y esto es todo, soy consciente que queda mucho que contar sobre Inspec, pero espero que al menos este artículo os pique la curiosidad para investigar sobre el tema y os ayude a empezar con Inspec y los tests de Azure.

Leave a Reply

Your email address will not be published. Required fields are marked *