Compartir a través de


Implementación de pruebas de cumplimiento con Terraform y Azure

Terraform habilita la definición, vista previa e implementación de la infraestructura en la nube. Con Terraform, se crean archivos de configuración mediante la sintaxis de HCL. La sintaxis de HCL permite especificar el proveedor de la nube, como Azure, y los elementos que componen la infraestructura de la nube. Después de crear los archivos de configuración, se crea un plan de ejecución que permite obtener una vista previa de los cambios de infraestructura antes de implementarlos. Una vez que compruebe los cambios, aplique el plan de ejecución para implementar la infraestructura.

Muchas veces, las pruebas de cumplimiento forman parte del proceso de integración continua y se usan para asegurarse de que se siguen las directivas definidas por el usuario. Por ejemplo, puede definir convenciones de nomenclatura geopolítica para los recursos de Azure. Otro ejemplo común es crear máquinas virtuales a partir de un subconjunto definido de imágenes. Las pruebas de cumplimiento se usarían para aplicar reglas en estos y muchos otros escenarios.

En este artículo aprenderá a:

  • Comprender cuándo usar las pruebas de cumplimiento
  • Aprenda a realizar una prueba de cumplimiento
  • Consulte y ejecute una prueba de cumplimiento de ejemplo.

1. Configuración del entorno

  • Suscripción de Azure: si no tiene una suscripción de Azure, cree una cuenta gratuita antes de comenzar.
  • Docker:Instale Docker.

  • Python:Instalar Python.

  • Herramienta de cumplimiento de Terraform: Instale la herramienta de cumplimiento de Terraform ejecutando el siguiente comando: pip install terraform-compliance.

  • Código y recursos de ejemplo: Con la herramienta DownGit, descargue desde GitHub el proyecto de pruebas de cumplimiento y descomprima en un nuevo directorio para contener el código de ejemplo. Este directorio se conoce como directorio de ejemplo.

2. Descripción de las pruebas y comprobaciones de cumplimiento

Las pruebas de cumplimiento son una técnica de prueba no funcional para determinar si un sistema cumple los estándares prescritos. Las pruebas de cumplimiento también se conocen como pruebas de conformidad.

La mayoría de los equipos de software realizan un análisis para comprobar que los estándares se aplican e implementan correctamente. A menudo trabajando simultáneamente para mejorar los estándares que, a su vez, conducen a un aumento de la calidad.

Con las pruebas de cumplimiento, hay dos conceptos importantes que se deben tener en cuenta: pruebas de cumplimiento y comprobaciones de cumplimiento.

  • Las pruebas de cumplimiento garantizan que la salida de cada fase del ciclo de vida de desarrollo se ajuste a los requisitos acordados.
  • Las comprobaciones de cumplimiento deben integrarse en el ciclo de desarrollo al principio de los proyectos. Intentar agregar comprobaciones de cumplimiento en una fase posterior se vuelve cada vez más difícil cuando el propio requisito no está documentado adecuadamente.

Realizar comprobaciones de cumplimiento es sencillo. Se desarrolla y documenta un conjunto de estándares y procedimientos para cada fase del ciclo de vida de desarrollo. La salida de cada fase se compara con los requisitos documentados. Los resultados de la prueba identifican las "brechas" en el cumplimiento de los estándares predeterminados. Las pruebas de cumplimiento se realizan a través del proceso de inspección y se debe documentar el resultado del proceso de revisión.

Echemos un vistazo a un ejemplo específico.

Un problema común es los entornos que se interrumpen cuando varios desarrolladores aplican cambios incompatibles. Supongamos que una persona trabaja en un cambio y aplica recursos como la creación de una máquina virtual en un entorno de prueba. A continuación, otra persona aplica una versión diferente del código que aprovisiona una versión diferente de esa máquina virtual. Lo que se necesita aquí es la supervisión para garantizar la conformidad con las reglas indicadas.

Una manera de solucionar este problema sería definir una directiva de etiquetado de los recursos, como con role etiquetas y creator . Una vez definidas las directivas, se usa una herramienta como Terraform-compliance para asegurarse de que se siguen las directivas.

El cumplimiento con Terraform se centra en las pruebas negativas. Las pruebas negativas son el proceso de asegurarse de que un sistema pueda controlar correctamente la entrada inesperada o el comportamiento no deseado. Las pruebas de vulnerabilidad ante datos aleatorios o inesperados son un ejemplo de prueba negativa. Con el fuzzing, se prueba un sistema que recibe datos de entrada para asegurarse de que puede controlar de forma segura una entrada inesperada.

Afortunadamente, Terraform es una capa de abstracción para cualquier API que cree, actualice o destruya entidades de infraestructura en la nube. Terraform también garantiza que la configuración local y las respuestas de api remota estén sincronizadas. Dado que Terraform se usa principalmente en las API en la nube, todavía necesitamos una manera de asegurarse de que el código implementado en la infraestructura sigue directivas específicas. Terraform-compliance: una herramienta gratuita y de código abierto, proporciona esta funcionalidad para las configuraciones de Terraform.

Con el ejemplo de máquina virtual, una directiva de cumplimiento podría ser la siguiente: "Si va a crear un recurso de Azure, debe contener una etiqueta".

La herramienta de cumplimiento de Terraform proporciona un marco de pruebas en el que se crean directivas como el ejemplo. Después, esas directivas se ejecutan en el plan de ejecución de Terraform.

Terraform-compliance le permite aplicar principios de BDD, o desarrollo impulsado por comportamientos. BDD es un proceso colaborativo en el que todas las partes interesadas trabajan conjuntamente para definir lo que debe hacer un sistema. Estas partes interesadas generalmente incluyen a los desarrolladores, probadores y a cualquier persona con un interés en, o que se verá afectado por, el sistema que se está desarrollando. El objetivo de BDD es animar a los equipos a crear ejemplos concretos que expresen una comprensión común de cómo debe comportarse el sistema.

3. Examen de un ejemplo de prueba de cumplimiento

Anteriormente en este artículo, leíste sobre un ejemplo de prueba de cumplimiento al crear una máquina virtual para un entorno de test. En esta sección se muestra cómo traducir ese ejemplo en una característica y un escenario de BDD. La regla se expresa por primera vez mediante Cucumber, que es una herramienta que se usa para apoyar BDD.

when creating Azure resources, every new resource should have a tag

La regla anterior se traduce de la siguiente manera:

If the resource supports tags
Then it must contain a tag
And its value must not be null

A continuación, el código HCL de Terraform se adhiere a la regla como se indica a continuación.

resource "random_uuid" "uuid" {}

resource "azurerm_resource_group" "rg" {
  name     = "rg-hello-tf-${random_uuid.uuid.result}"
  location = var.location

  tags = {
    environment = "dev"
    application = "Azure Compliance"
  } 
}

La primera directiva podría escribirse como un escenario de características BDD de la siguiente manera:

Feature: Test tagging compliance  # /target/src/features/tagging.feature
    Scenario: Ensure all resources have tags
        If the resource supports tags
        Then it must contain a tag
        And its value must not be null

El código siguiente muestra una prueba para una etiqueta específica:

Scenario Outline: Ensure that specific tags are defined
    If the resource supports tags
    Then it must contain a tag <tags>
    And its value must match the "<value>" regex

    Examples:
      | tags        | value              |
      | Creator     | .+                 |
      | Application | .+                 |
      | Role        | .+                 |
      | Environment | ^(prod\|uat\|dev)$ |

4. Ejecutar el ejemplo de prueba de cumplimiento

En esta sección, descarga y prueba el ejemplo.

  1. En el directorio de ejemplo, vaya al directorio src.

  2. Ejecute terraform init para inicializar el directorio de trabajo.

    terraform init
    
  3. Ejecute terraform validate para validar la sintaxis de los archivos de configuración.

    terraform validate
    

    Puntos clave:

    • Verá un mensaje que indica que la configuración de Terraform es válida.
  4. Ejecute terraform plan para crear un plan de ejecución.

    terraform plan -out main.tfplan
    
  5. Ejecute terraform show para convertir el plan de ejecución en JSON para el paso de cumplimiento.

    terraform show -json main.tfplan > main.tfplan.json
    
  6. Ejecute docker pull para descargar la imagen de terraform-compliance.

    docker pull eerkunt/terraform-compliance
    
  7. Ejecute Docker run para ejecutar las pruebas en un contenedor de Docker.

    docker run --rm -v $PWD:/target -it eerkunt/terraform-compliance -f features -p main.tfplan.json
    

    Puntos clave:

    • Se producirá un error en la prueba porque, aunque la primera regla que requiere la existencia de etiquetas se realiza correctamente, se produce un error en la segunda regla en la que faltan las Role etiquetas y Creator .

    Ejemplo de una prueba con errores

  8. Corrija el error modificando main.tf como se indica a continuación (donde se agrega una Role etiqueta y Creator ).

      tags = {
        Environment = "dev"
        Application = "Azure Compliance"
        Creator     = "Azure Compliance"
        Role        = "Azure Compliance"
      } 
    
    

    Puntos clave:

    • La configuración ahora cumple con la directiva.

5. Comprobación de los resultados

  1. Vuelva a ejecutar terraform validate para comprobar la sintaxis.

    terraform validate
    
  2. Vuelva a ejecutar terraform plan para crear un nuevo plan de ejecución.

    terraform plan -out main.tfplan
    
  3. Ejecute terraform show para convertir el plan de ejecución en JSON para el paso de cumplimiento.

    terraform show -json main.tfplan > main.tfplan.json
    
  4. Ejecuta docker run de nuevo para probar la configuración. Si se ha implementado la especificación completa, la prueba se realiza correctamente.

    docker run --rm -v $PWD:/target -it eerkunt/terraform-compliance -f features -p main.tfplan.json
    

    Ejemplo de una prueba correcta

  5. Ejecute terraform apply para aplicar el plan de ejecución.

    terraform apply main.tfplan -target=random_uuid.uuid
    

    Puntos clave:

    • Se crea un grupo de recursos con un nombre que sigue al patrón : rg-hello-tf-<random_number>.

Solución de problemas de Terraform en Azure

Solución de problemas comunes al usar Terraform en Azure

Pasos siguientes