
Ejecutaremos este procedimiento utilizando Cloud Shell o Gcloud SDK.
Variable $PROJECT_ID
Vamos a setear la variable $PROJECT_ID con el nombre de nuestro proyecto de GCP:
export PROJECT_ID="tu-project-id"
echo $PROJECT_ID
Ejecutamos el comando en Cloud Shell y podremos verificar le contenido de la variable.

Luego ejecutaremos el siguiente comando para crear la SA.
gcloud iam service-accounts create terraform --display-name="Terraform"
Luego ejecutaremos el comando gcloud projects add-iam-policy binding para dar los permisos necesarios:
gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:terraform@$PROJECT_ID.iam.gserviceaccount.com" --role="roles/editor"
gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:terraform@$PROJECT_ID.iam.gserviceaccount.com" --role="roles/compute.networkAdmin"
gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:terraform@$PROJECT_ID.iam.gserviceaccount.com" --role="roles/resourcemanager.projectIamAdmin"
Script completo:
gcloud iam service-accounts create terraform --display-name="Terraform" && gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:terraform@$PROJECT_ID.iam.gserviceaccount.com" --role="roles/editor" && gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:terraform@$PROJECT_ID.iam.gserviceaccount.com" --role="roles/compute.networkAdmin" && gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:terraform@$PROJECT_ID.iam.gserviceaccount.com" --role="roles/resourcemanager.projectIamAdmin"
Al ejecutarlo veremos los permisos generados.

En este caso asignamos los roles de Editor y Compute Network Admin. En un caso de uso en producción debemos utilizar el principio de Least Privialged.

Activar Resource Manager API
Para poder utiilzar terraform en GCP, debemos asegurarnos que la API “Cloud Resource Manager” esté habilitada. Esto debemos realizarlo manualmente.
- Ingresamos al buscador de la Consola de GCP y buscamos la API.

- Habilitamos la API.

- Verificamos que este activada.

Obtener credenciales para conectar Terraform
Para que Terraform pueda conectarse con nuestra cuenta de GCP debemos generar un archivo de credenciales. En este caso utilizaremos uno en formato JSON.
- Ir a “IAM & Admin” en nuestra consola e ingresamos a la cuenta que acabamos de crear.

- Vamos a la tab “Keys” y agregamos una nueva Key.

- Seleccionamos “Create new key”.

- Seleccionamos formato JSON y click en Enable.

- Esto descargará un archivo .json con las credenciales de nuestra Service Account.
IMPORTANTE
Debemos asegurarnos de manipular este archivo de manera segura. Este archivo contiene las credenciales de acceso a nuestra Service Account. Debemos guardarlo en un Repositorio de Secretos
- Al finalizar se descargará el archivo json con el acceso a nuestra Service Account.

Configurar variable de entorno GOOGLE_APPLICATION_CREDENTIALS
Ahora debemos ejecutar el siguiente comando en nuestro entorno de ejecución de Terraform.
En este caso utilizaremos un entorno con state local en vscode para el ambiente de laboratorio.
- Primero debemos asegurarnos de tener disponible de manera seguro nuestro archivo de credenciales.
- Luego, debemos ejecutar el siguiente comando en PowerShell:
$env:GOOGLE_APPLICATION_CREDENTIALS="multicloudstech3-88dccdcecd98.json"
- Al ejecutar el comando, se habilitará en Terraform la posibilidad de utilizar estas credenciales para realizar el login en GCP.

Antes de realizar un commit del codigo, debemos asegurarnos de incluir nuestros archivos de credenciales en el archivo Gitignore.

Leave a Reply