En este documento, se proporcionan lineamientos y recomendaciones a fin de usar Terraform de forma segura para Google Cloud. Terraform requiere acceso a datos sensibles en tu infraestructura de nube para operar. Seguir las prácticas recomendadas de seguridad puede ayudarte a minimizar los riesgos asociados y mejorar la seguridad general de la nube.
Esta guía no es una introducción a Terraform. Para obtener una introducción al uso de Terraform con Google Cloud, consulta Comienza a usar Terraform.
Usa el estado remoto
Para los clientes de Google Cloud, recomendamos usar el backend de estado de Cloud Storage. Este enfoque bloquea el estado para permitir la colaboración como equipo. También separa el estado y toda la información potencialmente sensible del control de versión.
Asegúrate de que solo el sistema de compilación y los administradores con un gran cantidad de privilegios puedan acceder al bucket que se usa para el estado remoto.
Para evitar la confirmación accidental del estado de desarrollo en el control de origen, usa gitignore para los archivos de estado de Terraform.
Encripta el estado
Si bien los buckets de Google Cloud están encriptados en reposo, puedes usar las claves de encriptación proporcionadas por el cliente para brindar una capa adicional de protección. Para ello, usa la variable de entorno GOOGLE_ENCRYPTION_KEY
. Aunque no haya objetos Secret en el archivo de estado, siempre encripta el estado como una medida adicional de defensa.
No almacenes objetos Secret en el estado
Existen muchos recursos y proveedores de datos en Terraform que almacenan valores de Secret en texto simple en el archivo de estado. Siempre que sea posible, evita almacenar los objetos Secret en el estado. Los siguientes son algunos ejemplos de proveedores que almacenan objetos Secret en texto simple:
Marca los resultados sensibles
En lugar de intentar encriptar valores sensibles de forma manual, recurre a la compatibilidad integrada de Terraform para la administración de estado sensible. Cuando exportes valores sensibles al resultado, asegúrate de que los valores estén marcados como sensibles.
Asegúrate de la separación de obligaciones
Si no puedes ejecutar Terraform desde un sistema automatizado en el que ningún usuario tiene acceso, cumple con la separación de obligaciones mediante la separación de permisos y directorios. Por ejemplo, un proyecto de red correspondería a una cuenta de servicio o un usuario de Terraform de red cuyo acceso se encuentra limitado a este proyecto.
Ejecuta verificaciones previas a la aplicación
Cuando ejecutes Terraform en una canalización automatizada, usa una herramienta como gcloud terraform vet
para verificar el resultado del plan con las políticas antes de realizar la ejecución. Esto puede detectar regresiones de seguridad antes de que ocurran.
Ejecuta auditorías continuas
Después de ejecutar el comando terraform apply
, ejecuta controles de seguridad automatizados.
Estas verificaciones pueden ayudar a garantizar que la infraestructura no se desvíe a un estado no seguro. Las siguientes herramientas son opciones válidas para este tipo de verificación:
¿Qué sigue?
- Obtén información sobre las prácticas recomendadas generales de estilo y estructura para Terraform en Google Cloud.
- Obtén información sobre las prácticas recomendadas para usar módulos raíz de Terraform.