Autenticación para Terraform

En este documento, se describe cómo autenticarte en Google Cloud cuando usas Terraform.

Las credenciales predeterminadas de la aplicación (ADC) son la forma recomendada de autenticarse enGoogle Cloud cuando se usa Terraform. ADC es una estrategia que usan las bibliotecas de autenticación para encontrar credenciales automáticamente según el entorno de la aplicación. Cuando usas ADC, Terraform puede ejecutarse en un entorno de desarrollo o de producción sin cambiar la forma en que se autentica en los servicios y las APIs deGoogle Cloud . Para obtener información sobre dónde ADC busca credenciales y en qué orden, consulta Cómo funcionan las credenciales predeterminadas de la aplicación.

Autenticación cuando se usa Terraform en un entorno de desarrollo local

Cuando usas Terraform en un entorno de desarrollo local, como una estación de trabajo de desarrollo, puedes autenticarte con las credenciales asociadas a tu cuenta de usuario o cuenta de servicio.

Autentica con una cuenta de usuario

Para configurar ADC con una cuenta de usuario, usa Google Cloud CLI:

  1. Instala Google Cloud CLI. Después de la instalación, inicializa Google Cloud CLI con el siguiente comando:

    gcloud init

    Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

  2. Si usas un shell local, crea credenciales de autenticación locales para tu cuenta de usuario:

    gcloud auth application-default login

    No es necesario que lo hagas si usas Cloud Shell.

    Si se devuelve un error de autenticación y usas un proveedor de identidad (IdP) externo, confirma que accediste a la gcloud CLI con tu identidad federada.

    Aparecerá una pantalla de acceso. Después de acceder, tus credenciales se almacenan en el archivo de credenciales local que usa ADC.

Autentica con identidad temporal como cuenta de servicio

Puedes usar la identidad temporal como cuenta de servicio para configurar un archivo ADC local. Terraform las usa automáticamente.

  1. Asegúrate de tener el rol de IAM de creador de tokens de cuentas de servicio (roles/iam.serviceAccountTokenCreator) en la cuenta de servicio que suplantas. Para obtener más información, consulta los Roles requeridos.

  2. Usa la identidad temporal como cuenta de servicio para crear un archivo de ADC local mediante la ejecución del siguiente comando:

    gcloud auth application-default login --impersonate-service-account SERVICE_ACCT_EMAIL
    

Si quieres permitir que los usuarios usen una fuente de autenticación principal compartida y una cuenta de servicio variable por entorno, configura el campo impersonate_service_account en tu archivo de configuración de Terraform:

provider "google" {
  impersonate_service_account = "SERVICE_ACCT_EMAIL"
}

Autenticación cuando se ejecuta Terraform en Google Cloud

Cuando ejecutas Terraform en un Google Cloud entorno de desarrollo basado en la nube, como Cloud Shell, la herramienta usa las credenciales que proporcionaste cuando accediste para la autenticación.

Cuando usas Terraform con Google Cloud servicios como Compute Engine, App Engine y Cloud Run Functions, puedes conectar una cuenta de servicio administrada por el usuario a los recursos. Por lo general, se admite la conexión de una cuenta de servicio cuando los recursos de ese servicio pueden ejecutarse o incluir el código de la aplicación. Cuando conectas una cuenta de servicio a un recurso, el código que se ejecuta en el recurso puede usar esa cuenta de servicio como su identidad.

Se recomienda conectar una cuenta de servicio administrada por el usuario para proporcionar credenciales a las ADC para el código de producción que se ejecuta en Google Cloud.

Para obtener ayuda sobre cómo determinar los roles que debes proporcionar a tu cuenta de servicio, consulta Elige roles predefinidos.

Para obtener información sobre los recursos a los que puedes conectar una cuenta de servicio y ayudar a conectar la cuenta de servicio al recurso, consulta la documentación de IAM sobre cómo conectar una cuenta de servicio.

Configura la autenticación:

  1. Asegúrate de tener los roles de IAM de creador de cuentas de servicio (roles/iam.serviceAccountCreator) y administrador de IAM del proyecto (roles/resourcemanager.projectIamAdmin). Obtén más información para otorgar roles.
  2. Crea la cuenta de servicio:

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

    Reemplaza SERVICE_ACCOUNT_NAME por un nombre para la cuenta de servicio.

  3. Para proporcionar acceso a tu proyecto y tus recursos, otorga un rol a la cuenta de servicio:

    gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE

    Reemplaza lo siguiente:

    • SERVICE_ACCOUNT_NAME: el nombre de la cuenta de servicio
    • PROJECT_ID: el ID del proyecto en el que creaste la cuenta de servicio
    • ROLE: el rol a otorgar
  4. Para otorgar otro rol a la cuenta de servicio, ejecuta el comando como lo hiciste en el paso anterior.
  5. Otorga el rol requerido a la principal que conectará la cuenta de servicio a otros recursos.

    gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com --member="user:USER_EMAIL" --role=roles/iam.serviceAccountUser

    Reemplaza lo siguiente:

    • SERVICE_ACCOUNT_NAME: el nombre de la cuenta de servicio
    • PROJECT_ID: el ID del proyecto en el que creaste la cuenta de servicio
    • USER_EMAIL: La dirección de correo electrónico de una Cuenta de Google

Autenticación cuando se ejecuta Terraform de forma local o en un proveedor de servicios en la nube diferente

Si ejecutas tu aplicación fuera de Google Cloud, debes proporcionar credenciales que Google Cloud reconozca para usar los servicios deGoogle Cloud .

Autentica mediante la federación de Workload Identity

La forma preferida de autenticarse con Google Cloud usando credenciales de un IdP externo es usar la federación de identidades para cargas de trabajo. Puedes crear un archivo de configuración de credenciales y establecer la variable de entorno GOOGLE_APPLICATION_CREDENTIALS para que apunte a él. Este enfoque es más seguro que crear una clave de cuenta de servicio. Para obtener instrucciones sobre cómo configurar la federación de identidades para cargas de trabajo para ADC, consulta Federación de identidades para cargas de trabajo con otras nubes.

Autentica con claves de cuenta de servicio

Cuando ejecutas Terraform en un entorno de desarrollo local, in situ o en un proveedor de servicios en la nube diferente, puedes crear una cuenta de servicio, otorgarle los roles de IAM que requiere tu aplicación y crear una clave para la extensión para la cuenta de servicio.

A fin de crear una clave de cuenta de servicio y hacer que esté disponible para las ADC, haz lo siguiente:

  1. Para crear una cuenta de servicio con los roles que necesita tu aplicación y una clave para esa cuenta de servicio, sigue las instrucciones en Crea una clave de cuenta de servicio.

Autentica en backends de Cloud Storage

Terraform te permite configurar Cloud Storage como un backend para almacenar archivos de estado de Terraform. Para autenticarte en un backend de Cloud Storage, usa cualquiera de los métodos que se describen en esta página. Para obtener información sobre las variables de configuración relacionadas con la autenticación para los backends de Cloud Storage, consulta la página de backends de Terraform para Cloud Storage.

¿Qué sigue?