En este post, te explicaré cómo usar un módulo de Terraform para desplegar un Azure Key Vault con varios recursos relacionados. Este módulo está diseñado para ser reutilizable y configurable según tus necesidades. A continuación, te detallaré los archivos necesarios y cómo estructurarlos.
¿Qué es Azure Key Vault?
Azure Key Vault es un servicio de Microsoft Azure diseñado para almacenar y acceder a secretos de manera segura. Los secretos pueden ser contraseñas, claves API, certificados y otros datos sensibles. Key Vault proporciona una manera segura y centralizada para gestionar estos secretos, reduciendo el riesgo de exposición no autorizada.
Beneficios de usar Azure Key Vault
Seguridad Centralizada: Permite almacenar secretos en un lugar seguro, controlando quién puede acceder a ellos.
Gestión de Certificados: Facilita la emisión y gestión de certificados SSL/TLS.
Integración con Otros Servicios: Se integra fácilmente con otros servicios de Azure y aplicaciones externas.
Auditoría y Supervisión: Proporciona capacidades de auditoría y monitoreo para rastrear el acceso y uso de los secretos.
Estructura del proyecto
Nuestro proyecto de Terraform constará de los siguientes archivos:
main.tf: Contiene la definición de los recursos principales.
locals.tf: Define variables locales.
outputs.tf: Define los outputs del módulo.
variables.tf: Define las variables que se utilizarán para configurar el módulo.
terraform.tfvars: Contiene los valores de las variables que se aplicarán.
key_vault.tftest.hcl: Contiene los tests para validar nuestro módulo.
Archivo main.tf
El archivo main.tf es el corazón de nuestro módulo, donde definimos los recursos principales que queremos gestionar, incluyendo Key Vault, secretos, claves y configuraciones de diagnóstico. Este archivo debe incluirse en la raíz de tu proyecto de Terraform.
Contenido del archivo main.tf:
Explicación de main.tf
Proveedor de Azure: Configura el proveedor de Azure (azurerm), que es necesario para interactuar con los recursos de Azure.
Datos del Cliente: Obtiene la configuración actual del cliente de Azure, necesaria para configurar los recursos.
Generación de Cadenas Aleatorias: Crea cadenas aleatorias para los secretos que no tienen valor especificado.
Azure Key Vault: Define el recurso Key Vault, incluyendo políticas de acceso y configuraciones de SKU.
Claves y Secretos: Configura las claves y secretos dentro del Key Vault.
Cuenta de Almacenamiento: Crea una cuenta de almacenamiento para almacenar los logs de diagnóstico.
Configuración de Diagnóstico: Configura la supervisión y los logs de diagnóstico para el Key Vault.
Política de Gestión de Almacenamiento: Define las políticas de gestión para la cuenta de almacenamiento, como la eliminación de blobs antiguos.
Archivo locals.tf
En locals.tf definimos las variables locales que se usarán dentro del módulo, permitiendo la reutilización de configuraciones y la simplificación del código.
Contenido del archivo locals.tf:
Explicación de locals.tf
ID de Usuario Actual: Obtiene el ID del usuario actual, que se usará en las políticas de acceso del Key Vault.
Secretos sin Valor: Filtra los secretos que no tienen valor especificado para generar valores aleatorios.
Archivo outputs.tf
En outputs.tf definimos las salidas del módulo, es decir, los valores que queremos obtener después de aplicar la configuración de Terraform, como el ID del Key Vault y los nombres de las claves y secretos.
Contenido del archivo outputs.tf:
Explicación de outputs.tf
Nombres y IDs de Recursos: Proporciona los nombres y IDs del Key Vault, las claves y los secretos para facilitar su uso en otras partes de tu infraestructura.
Detalles de la Cuenta de Almacenamiento: Proporciona información sobre la cuenta de almacenamiento de diagnóstico, como el nombre y el punto de conexión del blob.
Archivo variables.tf
El archivo variables.tf contiene la definición de todas las variables que pueden ser configuradas por el usuario del módulo, proporcionando flexibilidad y personalización.
Contenido del archivo variables.tf:
Explicación de variables.tf
Variables de Configuración: Define las variables necesarias para configurar el Key Vault, incluyendo el nombre, ubicación, SKU, grupo de recursos y políticas de acceso.
Validación de Variables: Asegura que las variables tienen valores válidos antes de aplicarlas.
Archivo terraform.tfvars
En terraform.tfvars establecemos los valores específicos para las variables definidas en variables.tf, permitiendo una fácil modificación de los parámetros del módulo sin cambiar el código fuente.
Contenido del archivo terraform.tfvars:
Explicación de terraform.tfvars
Valores de Variables: Proporciona los valores específicos que se aplicarán a las variables definidas en variables.tf, personalizando la implementación del Key Vault.
Test de Terraform
Los tests de Terraform son una herramienta esencial para asegurar que nuestra infraestructura se despliega y configura correctamente. Estos tests permiten validar que los recursos se crean según nuestras especificaciones y que los valores y configuraciones son los esperados.
Terraform cuenta con un framework de pruebas llamado “Terraform Test”, que utiliza archivos de configuración .tftest.hcl. Estos archivos contienen una serie de comandos y aserciones que se ejecutan para verificar que los recursos se han creado y configurado correctamente.
¿Cómo funcionan los tests de Terraform?
Definición de comandos: Cada archivo de prueba define una serie de comandos de Terraform que se ejecutarán, como apply y destroy.
Aserciones: Dentro de cada comando, se pueden definir aserciones (assert) que verifican condiciones específicas. Si alguna de estas aserciones falla, la prueba se considera fallida.
Variables de prueba: Es posible definir variables específicas para los tests, asegurando que las pruebas se ejecuten en un entorno controlado.
Ejecución: Los tests se ejecutan utilizando la CLI de Terraform, y los resultados indican si las pruebas han pasado o fallado.
Archivo key_vault.tftest.hcl
El archivo key_vault.tftest.hcl contiene los tests para validar nuestro módulo de Terraform, asegurando que todos los recursos se creen y configuren correctamente según nuestras especificaciones.
Contenido del archivo key_vault.tftest.hcl:
Explicación de key_vault.tftest.hcl
Crear Grupo de Recursos: Aplica y valida la creación de un grupo de recursos en Azure.
Generar Cadena Aleatoria: Crea una cadena aleatoria y valida su longitud y características.
Crear Key Vault: Aplica y valida la creación de un Key Vault con sus políticas de acceso, claves y secretos.
Aserciones: Verifica que los recursos se han creado con los nombres, ubicaciones y permisos correctos, asegurando que la infraestructura cumple con las especificaciones.
Estos archivos en conjunto permiten la creación y gestión efectiva de un Azure Key Vault y sus recursos asociados mediante Terraform, proporcionando una infraestructura segura y bien configurada en Azure. Los tests de Terraform garantizan que todos los componentes se implementen correctamente y funcionen según lo esperado, lo que es crucial para mantener la estabilidad y seguridad de la infraestructura. Implementar esta configuración te permitirá manejar secretos y claves de manera eficiente y segura, aprovechando las capacidades avanzadas de Azure Key Vault.