Identidad de las funciones

Cuenta de servicio del entorno de ejecución

Durante la ejecución de la función, Cloud Functions usa la cuenta de servicio PROJECT_ID@appspot.gserviceaccount.com como su identidad. Por ejemplo, cuando realizas solicitudes a los servicios de Google Cloud Platform mediante las bibliotecas cliente de Google Cloud, Cloud Functions puede obtener y usar tokens de forma automática para autorizar los servicios que esta identidad tiene permiso de usar.

Cambia los permisos predeterminados

De forma predeterminada, la cuenta de servicio del entorno de ejecución tiene la función de editor, que le permite acceder a muchos servicios de GCP. Si bien esta es la manera más rápida de desarrollar funciones, es probable que sea demasiado permisiva para lo que tu función necesita en producción. Por ello, te recomendamos que la configures con el acceso menos privilegiado.

Console

  1. Ve a Google Cloud Console:

    Ir a Google Cloud Console

  2. Selecciona la cuenta de servicio predeterminada de App Engine (PROJECT_ID@appspot.gserviceaccount.com) en la tabla.

  3. Haz clic en el lápiz en el lado derecho de la fila para ver la pestaña Editar permisos.

  4. Agrega funciones al menú desplegable función o quítalas para proporcionar el acceso con menos privilegios.

  5. Haz clic en Guardar.

GCloud

Elimina la función Editor y, luego, usa el comando gcloud projects add-iam-policy-binding para agregar una función nueva:

# Remove the Editor role
gcloud projects remove-iam-policy-binding PROJECT_ID \
  --member="PROJECT_ID@appspot.gserviceaccount.com"
  --role="roles/editor"

# Add the desired role
gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="PROJECT_ID@appspot.gserviceaccount.com"
  --role="ROLE"

Donde PROJECT_ID es el ID del proyecto que estás usando y ROLE es la nueva función que se asignará a la cuenta de servicio del entorno de ejecución.

Identidad por función

Si tienes varias funciones que acceden a diferentes recursos, te recomendamos que otorgues a cada función su propia identidad. Puedes hacerlo mediante la implementación de la función con una cuenta de servicio con nombre que tenga el rol correcto. La cuenta de servicio que se implemente debe haberse creado en el mismo proyecto al que se adjunta la función.

Permisos necesarios para las identidades no predeterminadas

Para implementar una función con una cuenta de servicio no predeterminada, el implementador debe tener el permiso iam.serviceAccounts.actAs en la cuenta de servicio que se está implementando.

Si un usuario crea una cuenta de servicio, ese usuario recibe este permiso automáticamente; de lo contrario, un usuario con los permisos correctos debe otorgarle este permiso sobre la cuenta de servicio al implementador para que este realice la implementación.

Implementa una función nueva con una identidad no predeterminada

Para implementar una función con una identidad nueva, asegúrate de que la cuenta de servicio que quieres usar ya está creada. Si no es así, aprende cómo crear y administrar cuentas de servicio.

Console

  1. Ve a Google Cloud Console:

    Ir a Google Cloud Console

  2. Configura la función como quieras.

  3. Haz clic en Variables de entorno, redes, tiempos de espera y más para ver opciones de configuración adicionales.

  4. Haz clic en el menú desplegable Cuenta de servicio y selecciona la cuenta de servicio deseada.

  5. Haz clic en Crear.

GCloud

Cuando implementas una función con gcloud functions deploy, agrega el marcador --service-account. Por ejemplo:

gcloud functions deploy FUNCTION_NAME --service-account SERVICE_ACCOUNT_EMAIL

donde FUNCTION_NAME es el nombre de la función, y SERVICE_ACCOUNT_EMAIL es la cuenta de servicio asociada con la identidad nueva.

Actualiza la identidad de una función existente

También puedes actualizar funciones existentes para tener una cuenta de servicio del entorno de ejecución nueva.

Console

  1. Ve a Google Cloud Console:

    Ir a Google Cloud Console

  2. Haz clic en el nombre de la función deseada para ir a su página de detalles.

  3. Haz clic en el lápiz de EDITAR en la parte superior de la página de detalles para editar la función.

  4. Haz clic en Variables de entorno, redes, tiempos de espera y más para ver opciones de configuración adicionales.

  5. Haz clic en el menú desplegable Cuenta de servicio y selecciona la cuenta de servicio deseada.

  6. Haz clic en Implementar.

GCloud

Cuando implementas una función con gcloud functions deploy, agrega el marcador --service-account:

gcloud functions deploy FUNCTION_NAME --service-account SERVICE_ACCOUNT_EMAIL

donde FUNCTION_NAME es el nombre de la función, y SERVICE_ACCOUNT_EMAIL es la cuenta de servicio asociada con la identidad nueva.

Recupera los tokens de identidad y acceso

Puedes usar el servidor de metadatos de Compute para recuperar tokens de identidad y tokens de acceso. No puedes consultar el servidor de metadatos directamente desde tu computadora local.

Tokens de identidad

Debes usar tokens de identidad cuando llamas a otras funciones de Cloud Functions o a cualquier otro servicio que pueda validar un token de identidad.

Puedes usar el servidor de metadatos de Compute para recuperar tokens de identidad con un público específico de la siguiente manera:

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE" \
  -H "Metadata-Flavor: Google"

Donde AUDIENCE es el JWT Audience solicitado, por ejemplo, la URL de un servicio que estás invocando, como https://service.domain.com, o el ID de cliente de OAuth de un recurso protegido por IAP, como 1234567890.apps.googleusercontent.com.

Tokens de acceso

Debes usar tokens de acceso cuando llamas a las API de Google.

De forma predeterminada, los tokens de acceso tienen el alcance cloud-platform, que permite el acceso a todas las API de Google Cloud Platform, suponiendo que IAM también permita el acceso. Para acceder a otras API de Google o Google Cloud, deberás recuperar un token de acceso con el permiso adecuado.

Puedes usar el servidor de metadatos de Compute para recuperar tokens de acceso.

Si necesitas un token de acceso con un alcance específico, puedes generar uno de la siguiente manera:

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token?scopes=SCOPES" \
  -H "Metadata-Flavor: Google"

En el ejemplo anterior, SCOPES es una lista separada por comas de los permisos de OAuth solicitados, por ejemplo: https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/spreadsheets.

Consulta la lista completa de permisos de Google OAuth para buscar los que necesitas.

Próximos pasos

Aprende a administrar el acceso de los desarrolladores, las funciones y los usuarios finales, o a autenticarlos de forma segura en tus funciones.