Unidad 3 / 11

Gestión de infraestructura como código: inteligencia artificial con Terraform e IaC

Ganancias:

  • Capacidad para comprender el concepto de IaC y el ciclo de trabajo de Terraform (inicio, planificación, aplicación, estado, módulo) y hacer que la inteligencia artificial produzca borradores HCL seguros.
  • Capacidad para verificar cada cambio con un plan antes de aplicarlo y detectar líneas inesperadas de destrucción/reemplazo
  • Capacidad para aplicar los principios de mantener los secretos fuera del código, mantener el estado de forma segura y minimizar los permisos de IAM.

En el pasado, configurar un servidor era cuestión de hacer clic en un panel de la nube: crear una máquina virtual, configurar la red, agregar la regla de seguridad. Este método era lento, propenso a errores e irrepetible: era casi imposible configurar el mismo entorno una segunda vez. Hoy en día, la infraestructura se gestiona como código. IaC (Infraestructura como código) es un enfoque para describir recursos en la nube, como servidores, redes y bases de datos, en archivos de texto en lugar de hacerlo manualmente. Estos archivos se encuentran en el control de versiones (Git); Puedes ver quién cambió qué, cuándo y qué; Puedes configurar la misma infraestructura muchas veces, exactamente de la misma manera, con un solo comando.

La herramienta IaC más común es Terraform. Terraform toma las definiciones que usted escribe en un lenguaje legible llamado HCL (Lenguaje de configuración de HashiCorp, el lenguaje de configuración de Terraform), las traduce a la API del proveedor de la nube (AWS, Azure, GCP) y crea los recursos. La IA conoce muy bien HCL y produce bloques complejos rápidamente. Pero en IaC, el costo de un error es alto: una definición incorrecta puede borrar toda una base de datos de producción. Por eso la regla de oro en Terraform es ver cada cambio con un "plan" antes de implementarlo.

Tiempo de ejecución de Terraform

Terraform funciona con tres comandos básicos; conocerlos es un requisito previo para controlar la salida de la IA:

  • `terraform init`: inicia el proyecto, descarga los complementos del proveedor necesarios.
  • `Plan Terraform`: Compara la situación actual con la situación deseada y muestra qué agregar, qué cambiar, qué eliminar. No implementa nada. Es el paso de seguridad más crítico.
  • `terraform apply`: Aplica realmente el Plan, creando/modificando recursos.

Además, dos conceptos son vitales. Estado (archivo de estado): Este es el archivo donde Terraform mantiene el estado actual de los recursos que administra; Por lo general, se almacena en un almacén remoto y cerrado con llave para que dos personas no puedan cambiarlo o destruirlo al mismo tiempo. Módulo: Paquete de configuración reutilizable; Por ejemplo, puede utilizar el módulo "configurar una red" en muchos proyectos.

Consejo: La señal más peligrosa en una salida de Terraform es destruir o -/+ (reemplazar) líneas en la salida del plan. Esto significa que el recurso será eliminado. Si ve una destrucción inesperada en un plan, nunca lo aplique, primero comprenda por qué apareció.

Paso a paso: escribir IaC con IA

  1. Aclarar la infraestructura deseada. Sea concreto como "una VPC, dos subredes, un grupo de seguridad y un t3.micro EC2 en eu-central-1".
  2. Especifique proveedor y versión. ¿Qué nube, qué Terraform y versión del proveedor? Si no especifica una versión, AI puede devolver una sintaxis obsoleta o incompatible.
  3. Haga que se produzca el borrador de la HCL. Solicite también variables y salidas.
  4. Saca el secreto. Valores como contraseñas y claves deben ir a la bóveda variable y secreta, no al código.
  5. Ejecute `init` + `plan`. Lea el resultado del plan línea por línea; Compruebe si hay eliminaciones inesperadas.
  6. Comience poco a poco e implemente gradualmente. Aplíquelo primero en una cuenta/entorno de prueba aislado.

Seguridad: riesgos específicos de IaC

La IaC es tan arriesgada como poderosa. Tres puntos críticos:

  1. Hay un secreto en el expediente estatal. El estado de Terraform a veces mantiene valores confidenciales, como contraseñas de bases de datos, en texto sin formato. Nunca coloque el estado en un depósito público; Utilice un backend remoto cifrado y de acceso restringido.
  2. No incruste secretos en HCL. Líneas como contraseña="prod123" se escriben permanentemente en el historial de Git. En su lugar, utilice una variable y proporcione el valor en tiempo de ejecución desde la variable de entorno (TF_VAR_...) o la bóveda secreta.
  3. Permiso IAM muy amplio. La IA a veces produce bloques como Acción: "*" (permitir todo) para "hacer que funcione". Esta es una vulnerabilidad; limitar el permiso al mínimo requerido.
Atención: una vez que un secreto ingresa al historial de Git, permanece en el pasado y puede verse comprometido, incluso si elimina el archivo. Si comete por error, cancele y rote inmediatamente el secreto; No basta con eliminar.

Tabla de señales de planes riesgosos.

impresión del plan

Significado

que hacer

+crear

Se agregará un nuevo recurso

Generalmente seguro, aunque revise

~ actualizar en el lugar

La fuente cambiará en el sitio.

Verificar el impacto (¿habrá una interrupción?)

-/+ reemplazar

Será eliminado y recreado.

PRECAUCIÓN: puede ocurrir pérdida de datos

- destruir

El recurso será destruido.

STOP: nunca apliques si no lo esperas

tres mini casos

Caso 1: 2 días de trabajo en 3 horas. Un equipo iba a escribir Terraform para configurar un nuevo entorno de prueba (VPC, subredes, base de datos RDS, clúster ECS) pero acababan de pasar a HCL. Describieron la arquitectura y las versiones de la IA y produjeron un plano modular. Verificaron cada módulo con el plan y lo tuvieron listo y funcionando en 3 horas; Les llevaría dos días de prueba y error manual.

Caso 2: el plan fue eliminado. Un ingeniero ejecutó un plan sin aplicar un código de actualización generado por IA. El resultado contenía -/+ reemplazo para la base de datos de producción: la IA intentó reemplazar un campo no reemplazable, lo que significó eliminar y recrear la base de datos. El ingeniero dejó de aplicar y cambió el cambio al método seguro. El hábito de planificar evitó un desastre.

Caso 3: fuga secreta enterrada. Un joven, YZ emitió db_password = "S3cret!" Comprometió la línea tal como está y la empujó. Atrapado en revisión de código; La contraseña se canceló y cambió inmediatamente, el valor se movió a una variable y se alimentó desde la bóveda secreta. Lección: Nunca hay secretos de texto plano en HCL.

Cuatro plantillas copiables

1) Proyecto de infraestructura generadora:

Escriba la siguiente infraestructura en [NUBE: AWS] con Terraform (versión ~> 1.7): [LISTA DE FUENTES]. Región [X]. Reglas: - Haga que todos los valores confidenciales sean variables, no los incruste en HCL. - Corrija la versión del proveedor (required_providers). - Minimice los permisos de IAM, no use "*". - Devuelva [X, Y] como salida. Proporcione código de forma modular y con explicaciones.

2) Interpretación del resultado del plan:

Analice el resultado del 'plan de terraformación' a continuación. Enuméreme: (1) qué recursos se agregaron/cambiaron/ELIMINARON, (2) filas en riesgo de pérdida o interrupción de datos, (3) 3 preguntas que debo hacer antes de presentar la solicitud. Plan: [SALIDA]

3) Examinar la seguridad del HCL existente:

Verifique el siguiente código de Terraform por seguridad: secreto incorporado, permiso IAM demasiado amplio, regla de red abierta (0.0.0.0/0), almacenamiento sin cifrar. Escriba cada hallazgo en orden de importancia y corrección. Código: [HCL]

4) Convierta el código repetitivo al módulo:

Convierta el siguiente código Terraform repetitivo en un módulo reutilizable: ¿qué valores deberían ser variables, cuál debería ser la interfaz del módulo? También muestre un ejemplo de uso. Código: [HCL]

Aviso débil / Aviso fuerte

Débil: "Crea una base de datos con Terraform".

Resultado: no está claro qué nube, qué motor, qué versión, cifrada o no; Con la sintaxis heredada, la IA puede proporcionar un ejemplo disponible públicamente que incrusta la contraseña en el código.

Fuerte: "Cree una instancia de RDS PostgreSQL 15 en AWS con Terraform ~> 1.7. Haga que la contraseña sea variable, no la incruste en el código. El almacenamiento está cifrado, se puede acceder solo desde una subred privada, no pública. Corrija la versión del proveedor. Devuelva el punto final como salida".

Diferencia: el segundo mensaje proporciona el motor, la versión, el cifrado, la restricción de la red y la regla secreta; el resultado es seguro y cercano a la producción.

Errores comunes

  • "Aplicar" sin hacer un "plan". El error más caro en IaC; Siempre planifique primero.
  • Secreto de incrustación en HCL. Crea una filtración permanente en el historial de Git.
  • El Estado almacenador es inseguro. Un estado público no cifrado y desbloqueado es un desastre.
  • No arreglar la versión. El uso de un proveedor sin especificar una versión provocará fallas repentinas en el futuro.
  • *`Acción: permiso amplio como ""`.** Viola el principio de privilegio mínimo.
  • Ignorando la "destrucción" inesperada. Aplicando las líneas de eliminación en el Plan sin cuestionar.

En resumen

IaC convierte la infraestructura en código repetible, versionable y auditable; La herramienta más común es Terraform. La IA produce rápidamente resguardos de HCL, pero usted debe proporcionar la versión, los detalles específicos de la nube y las reglas de seguridad. La regla infalible en Terraform: ver cada cambio con un plan, consultar eliminaciones inesperadas, mantener secretos alejados del código y mantener el estado de forma segura. Las líneas de destrucción y reemplazo en la salida de un plan son los lugares que deben leerse con más atención.

Tarea de aplicación

Haga que la IA genere una pequeña infraestructura (por ejemplo, un depósito de almacenamiento y una política de acceso) utilizando la plantilla "Generar boceto de infraestructura" anterior. Luego: (1) haga que la plantilla de "verificación" verifique los permisos secretos o * incorporados en el código; (2) si es posible, ejecute init + plan en una cuenta de prueba y lea el resultado del plan con la plantilla de "interpretación del plan"; (3) anote cualquier eliminación/cambio inesperado.

lista de verificación

  • [] Agregué restricciones de nube, versión de Terraform/proveedor y cifrado/red a mi mensaje.
  • [] No hay ningún secreto de texto plano en el código; valores de precisión variables.
  • [] Reduje IAM/permisos a permisos mínimos, * No lo usé.
  • [] Ejecuté el plan antes de aplicar y leí el resultado línea por línea.
  • [] Verifiqué que no hay ninguna destrucción/reemplazo inesperado en el Plan.
  • [] Estoy seguro de que el estado se mantiene en un backend cifrado, bloqueado y restringido.