Este servicio está basado en dos características básicas que permiten controlar usuarios y accesos a cada uno de los recursos de Google Cloud:
  • Autenticación: determinar la identidad del usuario
  • Autorización: determinar los permisos que un usuario autenticado tiene sobre unos determinados recursos
La autenticación sobre Google Cloud se puede realizar mediante «cuentas de servicio», «cuentas de usuario» o API keys. Una cuenta de servicio representa una aplicación, y es el método preferido cuando se necesita comunicar con las API de GCP. Una cuenta de usuario representa a personas, y se utiliza para acceder a recursos en nombre de esa persona o usuario. Las API key se utilizan para acceder a recursos que no necesitan autenticación, simplemente se identifica el proyecto para temas relativos a facturación y limites/cuotas.

Cuenta de servicio

Si se utiliza una aplicación que corre sobre uno de los siguientes servicios: Compute Engine, Kubernetes Engine, App Engine Flexible o Cloud Functions, se puede utilizar la cuenta de servicio que se crea automáticamente al utilizarlos, y por tanto no es necesario crear una cuenta de servicio de forma específica. En caso contrario, si es necesario crear una cuenta de servicio se puede hacer de la siguiente forma:
Ejemplo para crear una cuenta de servicio llamada SERVICIO_A:
$ gcloud iam service-accounts create SERVICIO_A
Dar permisos owner a esta cuenta recién creada, en el proyecto llamado PROYECTO_A:
gcloud projects add-iam-policy-binding PROYECTO_A --member "serviceAccount:SERVICIO_A@PROYECTO_A.iam.gserviceaccount.com" --role "roles/owner"
Generar el fichero con la clave para utilizar esta cuenta de servicio en el fichero CLAVE.json:
$ gcloud iam service-accounts keys create CLAVE.json --iam-account SERVICIO_A@PROYECTO_A.iam.gserviceaccount.com

La mejor forma para especificar las cuenta de servicio que se quiere utilizar, es mediante la variable de entorno GOOGLE_APPLICATION_CREDENTIALS porque no precisa modificar el código de la aplicación, aunque también se puede hacer especificándolo en el código. Para establecer esta variable de entorno se puede hacer de la siguiente forma especificando el fichero JSON con las credenciales de esa cuenta de servicio:

$ export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/[FILE_NAME].json"

Cuenta de usuario

Cuando se utilizan cuentas de usuario, una aplicación accede a recursos en nombre de ese usuario. Para poder realizar esta acción, la aplicación solicita el permiso correspondiente para poder realizar esa tarea, y una vez que el cliente acepta este consentimiento la aplicación obtiene las credenciales desde un servidor de autorizaciones. Con esas credenciales, la aplicación accede a los recursos correspondientes. Este proceso está basado en el protocolo OAuth 2.0.

Las acciones que la aplicación puede realizar en nombre del usuario está limitado por un alcance definido manualmente de forma previa.

Cuando se accede a recursos de un proyecto, el usuario debe tener permisos correspondientes para acceder a ese recurso, y eso se define en base al rol de ese usuario sobre el recurso correspondiente.

API Keys

Una API Key es simplemente un conjunto de caracteres cifrados, que identifican a un determinado proyecto para temas de facturación y cuotas, y que se utiliza cuando no es necesita acceder a datos privados y/o cuando no existe un servidor de backend para realizar operaciones de autenticación. En general, siempre se debería utilizar una cuenta de servicio en lugar de un API Key, hay pocos casos en lo que puede ser preferible esta última opción.

Si se utiliza una API Key, se deben añadir restricciones (HTTP/HTTPS, Android apps, …)  a su uso para evitar usos no adecuados de la misma.

Por Byte

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.