Logo GCP con Eduardo

GCP con Eduardo

Descarga el código de la lección

Cómo CONECTAR Terraform con Google Cloud (GCP) paso a paso | Autenticación Segura (ADC)
✦ Guía Técnica & Arquitectura

Cómo CONECTAR Terraform con Google Cloud (GCP) paso a paso | Autenticación Segura con ADC

Conectar Terraform con Google Cloud no debería empezar descargando una clave JSON y copiándola por diferentes máquinas. Para desarrollo local, el patrón moderno es utilizar Application Default Credentials (ADC): Terraform puede utilizar las credenciales proporcionadas por el ecosistema de Google Cloud sin incrustar secretos en el código de infraestructura.

En esta guía construiremos el flujo completo desde cero: instalación de Terraform y Google Cloud CLI, autenticación, selección del proyecto, configuración del provider de Google, inicialización del working directory, validación y primer despliegue. El objetivo no es únicamente conseguir un terraform apply, sino establecer una base que pueda evolucionar hacia un entorno empresarial gobernado.

Lo que aprenderás

Instalar y verificar Terraform y Google Cloud CLI.
Configurar ADC sin exponer claves privadas.
Configurar el provider de Google y el proyecto GCP.
Ejecutar init, plan y el primer apply de forma controlada.
Terraform Google Cloud GCP Provider gcloud CLI ADC IAM HCL Cloud Storage

La arquitectura correcta empieza por la identidad

Terraform no necesita conocer una contraseña de Google Cloud. El provider google necesita obtener una identidad válida con permisos suficientes para consultar y modificar recursos GCP.

ADC funciona como una abstracción de autenticación: las librerías de Google buscan credenciales siguiendo un mecanismo estándar y obtienen tokens para realizar llamadas a las APIs. Esto permite separar la configuración de infraestructura de la distribución de secretos.

Para un equipo senior o de arquitectura, esta separación es importante: Terraform describe el estado deseado; IAM determina quién puede materializarlo.

Matriz de decisión: ¿cómo autenticar Terraform en GCP?

No todos los mecanismos de autenticación tienen el mismo perfil operativo. La elección debe considerar dónde ejecutas Terraform, quién controla la identidad y cómo se gestiona el ciclo de vida de las credenciales.

Patrón Entorno Gestión de secretos Seguridad Operación Uso recomendado
ADC + usuario Workstation Gestionada por Google Cloud CLI Alta para desarrollo Baja complejidad Desarrollo local
ADC + impersonation Workstation / CI Sin clave descargada Muy alta Media Equipos con IAM maduro
Service Account adjunta Google Cloud Identidad gestionada por plataforma Muy alta Baja Terraform ejecutándose dentro de GCP
Workload Identity Federation CI/CD externo Credenciales federadas Muy alta Media/Alta GitHub Actions, GitLab CI y otros IdP
Service Account Key JSON Cualquier entorno Secreto estático Mayor riesgo Alta Evitar salvo necesidad justificada

1. Instalar Terraform y Google Cloud CLI

Necesitamos dos herramientas: Terraform CLI para ejecutar la infraestructura como código y gcloud para interactuar con la plataforma de Google Cloud y configurar la autenticación local.

Terraform CLI

Terraform se distribuye como un ejecutable y también puede instalarse mediante gestores de paquetes.

macOS
brew tap hashicorp/tap
brew install hashicorp/tap/terraform

terraform version

Windows

Si utilizas Chocolatey, puedes instalar Terraform desde una terminal administrativa:

PowerShell
choco install terraform

terraform version

Google Cloud CLI

Instala Google Cloud CLI siguiendo el instalador oficial para tu sistema operativo y comprueba que gcloud está disponible:

Terminal
gcloud version

Después de instalar ambas herramientas, el objetivo es que estos dos comandos funcionen desde una terminal nueva:

Verificación
terraform version
gcloud version

2. Crear o seleccionar el proyecto de Google Cloud

Terraform necesita saber sobre qué proyecto va a operar. Puedes trabajar con un proyecto GCP existente o crear uno nuevo desde la consola de Google Cloud.

Una vez tengas el Project ID, configúralo como proyecto activo en Google Cloud CLI:

Terminal
gcloud auth login

gcloud projects list

gcloud config set project TU_PROJECT_ID

gcloud config get-value project

Es importante distinguir el nombre visible del proyecto de su Project ID. El provider de Terraform utiliza el identificador del proyecto como referencia estable.

3. Configurar Application Default Credentials (ADC)

Este es el punto central de la autenticación Terraform-GCP. En desarrollo local, ejecuta:

Terminal
gcloud auth application-default login

Se abrirá un flujo de autenticación para autorizar tu identidad. Una vez finalizado, las credenciales locales estarán disponibles para las aplicaciones que utilizan ADC.

⚠ Antipatrón: descargar una clave JSON para cada desarrollador

Un error habitual consiste en crear una cuenta de servicio, generar una clave privada JSON, descargarla y después colocarla en el portátil del desarrollador o en un repositorio privado.

Aunque técnicamente puede funcionar, introduces un secreto estático cuyo ciclo de vida debes gestionar: distribución, almacenamiento, rotación, revocación y posible exposición.

Para desarrollo local, utiliza ADC. Para automatización externa, considera Workload Identity Federation; para workloads dentro de Google Cloud, utiliza una identidad de servicio administrada y con privilegios mínimos.

4. Configurar el provider de Google para Terraform

Crea un directorio para el proyecto y un archivo main.tf. La configuración no contiene ningún secreto. La identidad procede de ADC.

main.tf
terraform {
  required_version = ">= 1.5.0"

  required_providers {
    google = {
      source  = "hashicorp/google"
      version = "~> 7.43"
    }
  }
}

provider "google" {
  project = var.project_id
  region  = var.region
}

variable "project_id" {
  description = "Google Cloud Project ID"
  type        = string
}

variable "region" {
  description = "Default GCP region"
  type        = string
  default     = "europe-west1"
}

Observa una decisión importante: el bloque provider no contiene credentials. Esto evita convertir el fichero Terraform en un contenedor de secretos.

5. Separar configuración de infraestructura y parámetros

En un proyecto real no conviene introducir el Project ID directamente en múltiples recursos. Utiliza variables y, cuando corresponda, archivos de variables específicos del entorno.

terraform.tfvars
project_id = "TU_PROJECT_ID"
region     = "europe-west1"

No subas a Git información sensible. Aunque un Project ID normalmente no es un secreto, las credenciales, tokens y claves privadas sí lo son.

6. Crear una infraestructura mínima y verificable

Para validar todo el circuito podemos crear un bucket de Cloud Storage. Este ejemplo es deliberadamente pequeño: el objetivo es verificar la cadena completa de autenticación, provider, API, permisos, plan y apply.

main.tf — recurso de prueba
resource "google_storage_bucket" "terraform_demo" {
  name                        = "${var.project_id}-terraform-demo"
  location                    = "EU"
  uniform_bucket_level_access = true

  lifecycle {
    prevent_destroy = false
  }
}

En producción, el nombre, la ubicación, las políticas de retención y el ciclo de vida del recurso deberían responder a requisitos de plataforma, seguridad y gobierno. Aquí buscamos únicamente un primer recurso fácil de identificar.

7. El workflow correcto: init → validate → plan → apply

Terraform separa la inicialización, validación y ejecución. Esa separación es especialmente útil cuando pasamos de un entorno de laboratorio a pipelines de CI/CD.

Terminal
terraform init

terraform fmt -recursive

terraform validate

terraform plan

terraform apply

terraform init prepara el directorio de trabajo y descarga el provider necesario. Después, validate comprueba la configuración y plan muestra el cambio propuesto antes de modificar la infraestructura.

En un entorno empresarial, el patrón habitual es hacer que plan forme parte de una revisión automatizada y restringir apply a identidades y pipelines autorizados.

Implementación práctica de referencia

Esta versión concentra el flujo mínimo en una estructura que puede servir como punto de partida para un repositorio real.

Estructura del proyecto
terraform-gcp/
├── main.tf
├── variables.tf
├── terraform.tfvars
└── .gitignore
variables.tf
variable "project_id" {
  description = "Google Cloud Project ID"
  type        = string
}

variable "region" {
  description = "Default GCP region"
  type        = string
  default     = "europe-west1"
}
main.tf
terraform {
  required_version = ">= 1.5.0"

  required_providers {
    google = {
      source  = "hashicorp/google"
      version = "~> 7.43"
    }
  }
}

provider "google" {
  project = var.project_id
  region  = var.region
}

resource "google_storage_bucket" "terraform_demo" {
  name                        = "${var.project_id}-terraform-demo"
  location                    = "EU"
  uniform_bucket_level_access = true
}
terraform.tfvars
project_id = "TU_PROJECT_ID"
region     = "europe-west1"
.gitignore
.terraform/
*.tfstate
*.tfstate.*
crash.log
crash.*.log
*.tfvars
*.tfvars.json
.terraform.lock.hcl

El .gitignore debe adaptarse a la política del repositorio. Especialmente importante: nunca cometas estados que puedan contener valores sensibles sin haber evaluado previamente el backend y el modelo de exposición.

Patrones de diseño para pasar de laboratorio a producción

La primera ejecución es sencilla. La arquitectura de Terraform que soportará decenas de proyectos, equipos y entornos no lo es. Estos son los patrones que conviene adoptar desde el principio.

02 · Least Privilege

  • Separar identidades de desarrollo y despliegue.
  • Asignar roles mínimos necesarios.
  • Evitar cuentas de servicio excesivamente privilegiadas.
  • Auditar permisos periódicamente.

03 · State controlado

  • Evitar compartir state local manualmente.
  • Usar un backend remoto apropiado.
  • Controlar concurrencia y acceso.
  • No modificar el state manualmente.

04 · Version Pinning

  • Fijar la versión de Terraform cuando corresponda.
  • Fijar rangos controlados del provider.
  • Revisar actualizaciones regularmente.
  • Automatizar pruebas antes de actualizar.

05 · CI/CD

  • terraform fmt.
  • terraform validate.
  • terraform plan como artefacto de revisión.
  • apply sujeto a controles de aprobación.

06 · Gobernanza

  • Módulos reutilizables.
  • Políticas de naming y labels.
  • Revisión de IAM.
  • Separación clara entre entornos.

Antipatrones críticos: seguridad, FinOps y operación

⚠ Antipatrón #1 — Terraform con una identidad Owner

Dar a la identidad de Terraform permisos administrativos globales puede parecer cómodo durante el primer despliegue, pero amplifica el impacto de cualquier error de configuración o compromiso de la identidad.

⚠ Antipatrón #2 — Crear recursos sin políticas de lifecycle

Un terraform apply puede crear recursos con costes recurrentes. Bases de datos, IPs, clusters y otros servicios deben considerar explícitamente sus costes de ejecución, retención y destrucción.

⚠ Antipatrón #3 — Aplicar directamente desde el portátil

En equipos pequeños puede ser aceptable para prototipos. En producción, conviene mover el despliegue a un pipeline controlado, con revisión del plan, identidad dedicada, logs y trazabilidad.

⚠ Antipatrón #4 — Confundir autenticación con autorización

ADC responde principalmente a la pregunta “¿quién soy?”. IAM responde a “¿qué puedo hacer?”. Configurar correctamente ADC no concede permisos mágicamente: la identidad debe tener los roles adecuados sobre el proyecto o los recursos.

Checklist de implementación empresarial

Antes de considerar terminado el onboarding de Terraform con GCP, comprueba cada uno de estos puntos.

Instalar Terraform

Verifica que la versión instalada sea compatible con el proyecto y establece una política de actualización.

Instalar Google Cloud CLI

Ejecuta gcloud version y confirma que la CLI esté disponible desde la terminal utilizada por Terraform.

Autenticar la identidad

Utiliza gcloud auth login para la sesión de CLI y gcloud auth application-default login para crear ADC local.

Seleccionar el proyecto

Configura el Project ID correcto y comprueba el valor con gcloud config get-value project.

Configurar el provider

Define el provider de Google sin incrustar claves privadas en HCL.

Inicializar Terraform

Ejecuta terraform init para descargar providers y preparar el working directory.

Validar antes de aplicar

Ejecuta terraform fmt, terraform validate y revisa cuidadosamente terraform plan.

Aplicar con control

Ejecuta terraform apply únicamente cuando el plan haya sido revisado y la identidad tenga los permisos mínimos necesarios.

Preguntas frecuentes sobre Terraform + GCP + ADC

¿Cuál es la forma recomendada de autenticar Terraform con Google Cloud?

Para desarrollo local, Google Cloud recomienda Application Default Credentials mediante gcloud auth application-default login. Para ejecución en producción, la identidad debería adaptarse al entorno: una identidad de servicio administrada cuando Terraform corre en Google Cloud o federación de identidad cuando procede desde un proveedor externo.

¿Necesito guardar una clave JSON de una cuenta de servicio?

No para el flujo de desarrollo local basado en ADC. Descargar claves estáticas aumenta la superficie de gestión de secretos. Cuando sea posible, utiliza ADC, impersonation o Workload Identity Federation según el contexto de ejecución.

¿Qué comandos necesito para realizar el primer despliegue?

Una secuencia básica es terraform init, terraform fmt, terraform validate, terraform plan y terraform apply. Antes de ello, debes haber configurado correctamente ADC y disponer de permisos IAM suficientes en el proyecto.

Conclusión: la conexión correcta no es “poner credenciales”

Conectar Terraform con GCP de forma profesional consiste en diseñar una cadena de identidad reproducible y segura. Para un desarrollador local, ADC elimina la necesidad de introducir claves privadas directamente en Terraform. A partir de ahí, el siguiente nivel es aplicar impersonation, federación de identidad, mínimo privilegio y CI/CD controlado.

El flujo fundamental queda reducido a una arquitectura sencilla: identidad → ADC → provider → plan → revisión → apply. Lo importante es que cada capa tenga una responsabilidad clara.

Si este patrón se establece desde el primer proyecto, migrar posteriormente hacia una plataforma Terraform empresarial resulta mucho más sencillo: los módulos pueden evolucionar, el backend puede centralizarse y la identidad puede pasar de usuarios locales a workloads federados sin reescribir la infraestructura.

Sobre el Autor: Eduardo Martínez Agrelo

AI & Data Architect

Eduardo Martínez Agrelo es AI & Data Architect, especializado en arquitectura de datos, inteligencia artificial, plataformas cloud e ingeniería de sistemas orientados a producción. Su enfoque combina profundidad técnica, automatización, gobernanza y decisiones arquitectónicas orientadas a escenarios empresariales reales.

© 2026 Eduardo Martínez Agrelo · AI & Data Architect