Infraestructura Cloud SaaS

☁️ Terraform Cloud / HCP Terraform: Gobernanza y Automatización Enterprise

Terraform Cloud (actualmente parte de HCP Terraform) es la plataforma SaaS administrada por HashiCorp diseñada para facilitar el aprovisionamiento continuo, la colaboración en equipo, la gestión centralizada del estado y la gobernanza de seguridad en la infraestructura como código.

1. ¿Qué es Terraform Cloud y qué problemas resuelve?

Mientras que el CLI local de Terraform requiere que configures manualmente credenciales de la nube, backends remotos y ejecuciones en tu maquina local o runners de CI/CD, Terraform Cloud ofrece una plataforma centralizada que resuelve:

  • Ejecuciones Remotas Consistentes: Los comandos plan y apply se ejecutan dentro de contenedores efímeros seguros en la nube de HashiCorp.
  • Gestión de Estado Centralizada e Imputable: Audit trail de quién ejecutó qué cambio, historial completo de versiones del `tfstate` y descompresión segura.
  • Control de Accesos (RBAC): Integración con Single Sign-On (SSO / Okta / Entra ID) y definición de roles granulares para desarrolladores y DevOps.

2. Workspaces en Terraform Cloud vs CLI Workspaces

Diferencia Fundamental: En el CLI tradicional de Terraform, un workspace es simplemente un archivo de estado aislado (.tfstate) para el mismo código HCL. En Terraform Cloud, un Workspace incluye el archivo de estado, las variables de entorno/secretos, las conexiones Git VCS, los disparadores automáticos y las reglas de aprobación.

3. Integración con Git (VCS-driven Workflow)

Terraform Cloud se conecta directamente con GitHub, GitLab, Bitbucket o Azure DevOps. Esto habilita un flujo GitOps automatizado:

  1. Un desarrollador abre un Pull Request en GitHub.
  2. Terraform Cloud detecta el cambio y ejecuta automáticamente un terraform plan especulativo, comentando el resultado directamente en el PR.
  3. Al aprobar y hacer Merge a main, Terraform Cloud dispara el terraform apply (pudiendo exigir aprobación manual previa).

4. Variable Sets y Manejo Seguro de Secretos

En lugar de repartir credenciales de AWS/Azure entre decenas de repositorios, Terraform Cloud permite crear **Variable Sets** globales o compartidos:

  • Environment Variables: Credenciales de la nube (ejemplo: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY marcada como Sensitive para no ser visible jamás en logs).
  • Terraform Variables: Parámetros HCL que se inyectan dinámicamente en los proyectos (ejemplo: environment = "production").
  • Integración Dinámica OIDC: Autenticación Passwordless mediante tokens JWT temporales con AWS IAM, GCP Workload Identity o Azure Federated Credentials.

5. Policy as Code (Sentinel & OPA / Open Policy Agent)

Para prevenir desastres de seguridad antes de que ocurran en la nube, Terraform Cloud permite evaluar el `plan` generado contra políticas institucionales obligatorias:

sentinel (Regla de ejemplo: Prohibir buckets S3 públicos)
# Sentinel Policy
import "tfplan/v2" as tfplan

# Todos los buckets S3 creados deben ser privados
main = rule {
  all tfplan.resources.aws_s3_bucket as _, bucket {
    bucket.applied.acl != "public-read"
  }
}

6. Private Module & Provider Registry

Las empresas pueden publicar y catalogar sus propios Módulos de Terraform internos dentro del **Private Registry** de su organización en Terraform Cloud, permitiendo a los desarrolladores consumir módulos auditados y aprobados por el equipo de seguridad.

7. Conectando tu Proyecto Local a Terraform Cloud

Para vincular tu proyecto local con Terraform Cloud, agrega el bloque cloud {} dentro del bloque terraform {} en tu archivo HCL:

hcl (versions.tf)
terraform {
  required_version = ">= 1.7.0"

  # Configuración del Backend SaaS de Terraform Cloud (HCP)
  cloud {
    organization = "maxis-computers-org"

    workspaces {
      name = "mc-platform-production"
    }
  }

  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}
bash (Autenticación e inicio CLI)
# Login interactivo en la terminal para obtener token de API
terraform login

# Inicializa y sincroniza el Workspace remoto
terraform init

# Ejecuta el plan en los servidores de Terraform Cloud
terraform plan