Configura cuentas de servicio de App Engine

Las aplicaciones de App Engine requieren una cuenta de servicio para acceder a otros servicios de Google Cloud y ejecutar tareas.

Existen dos tipos de cuentas de servicio en App Engine y se puede asignar cualquier cuenta de servicio en tu proyecto de Cloud para que actúe como la cuenta de servicio predeterminada a nivel de app o por versión:

  • Cuenta de servicio predeterminada a nivel de la app: esta cuenta de servicio se usa para todos los servicios implementados cuando no configuras una "cuenta de servicio por versión". Puedes asignar la cuenta de servicio que creaste o usar la cuenta de servicio predeterminada creada de forma automática que se crea cuando implementas inicialmente un servicio en el proyecto de Cloud. Por ejemplo, la cuenta de servicio predeterminada de App Engine (PROJECT_ID@appspot.gserviceaccount.com).

  • Cuenta de servicio por versión: una cuenta de servicio configurada como la identidad de una versión específica del servicio implementado. Cuando implementas una versión existente o una nueva, puedes especificar una cuenta de servicio para que actúe como la identidad de esa versión. Por ejemplo, si una versión requiere permisos que difieren de la cuenta de servicio predeterminada a nivel de la app, puedes asignar una cuenta de servicio específica para esa versión.

Visualiza las cuentas de servicio configuradas

Para ver la cuenta de servicio predeterminada a nivel de la app actual, ejecuta el comando gcloud app describe.

Para ver la cuenta de servicio que usa una versión implementada, haz lo siguiente:

gcloud

Ejecuta el comando gcloud app versions describe:

  gcloud app versions describe VERSION_ID --service=SERVICE_NAME

Reemplaza lo siguiente:

  • VERSION_ID por el ID de la versión.
  • SERVICE_NAME por el nombre del servicio que creaste.

Consola

  1. Ve a la pestaña Versiones de App Engine en la consola. Ir a Versiones
  2. Busca la dirección de correo electrónico de la cuenta de servicio específica de la versión de App Engine. Ejemplo: SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

Asigna una cuenta de servicio predeterminada a nivel de la app

De forma predeterminada, la cuenta de servicio predeterminada a nivel de la app es la cuenta de servicio PROJECT_ID@appspot.gserviceaccount.com creada de forma automática. Puedes asignar otra cuenta de servicio para que actúe como la cuenta de servicio predeterminada a nivel de la app mediante Google Cloud CLI, la consola de Google Cloud o la API de Admin.

Especifica una cuenta de servicio predeterminada a nivel de la app durante la creación de la app

Durante el proceso inicial de creación de la aplicación de App Engine, puedes elegir asignar una cuenta de servicio que creaste o usar la cuenta de servicio PROJECT_ID@appspot.gserviceaccount.com creada de forma automática para que actúe como predeterminada.

Para crear una aplicación de App Engine y asignar una cuenta de servicio predeterminada a nivel de la app, puedes usar una de las siguientes opciones:

gcloud

Ejecuta el comando gcloud app create:

gcloud app create --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

Reemplaza lo siguiente:

  • SERVICE_ACCOUNT_NAME por el nombre de la cuenta de servicio que creaste.
  • PROJECT_ID por el ID del proyecto de Google Cloud en el que deseas asignar la cuenta de servicio.

Consola

  1. Ve a la página App Engine:

    Ir a App Engine

  2. Crea un proyecto de Google Cloud.

  3. En la sección Create App, selecciona una cuenta de servicio en Identidad y acceso a la API.

Actualiza la cuenta de servicio predeterminada a nivel de la app

A fin de actualizar la cuenta de servicio predeterminada a nivel de la app para tu aplicación, puedes usar una de las siguientes opciones a fin de asignar una cuenta de servicio nueva:

gcloud

Ejecuta el comando gcloud app update.

    gcloud app update --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

Reemplaza lo siguiente:

  • SERVICE_ACCOUNT_NAME por el nombre de la cuenta de servicio que creaste.
  • PROJECT_ID por el ID del proyecto de Google Cloud en el que deseas asignar la cuenta de servicio.

Cada versión nueva que implementes de ahora en adelante usa la cuenta de servicio predeterminada a nivel de la aplicación nueva, a menos que asignes una cuenta de servicio específica de la versión de forma explícita.

Consola

  1. Ve a la pestaña Configuración de la aplicación de App Engine en la consola y haz clic en Editar la configuración de la aplicación.

    Ir a Configuración de la aplicación

  2. Elige una cuenta de servicio predeterminada a nivel de la app en Selecciona una cuenta de servicio y haz clic en Guardar.

    Se te redireccionará a la pestaña Configuración de la aplicación, en la que puedes ver la dirección de correo electrónico de tu cuenta de servicio predeterminada actualizada a nivel de la aplicación. Ejemplo: SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.

    Cada versión nueva que implementes de ahora en adelante usa la cuenta de servicio predeterminada a nivel de la aplicación nueva, a menos que asignes una cuenta de servicio específica de la versión de forma explícita.

Implementa con una cuenta de servicio específica de la versión

Solo puedes establecer una cuenta de servicio específica de la versión durante la implementación de versiones nuevas. El uso de una cuenta de servicio específica de la versión te permite otorgar privilegios diferentes a cada versión de la aplicación, según las tareas específicas que realiza y evitar otorgar más privilegios de los necesarios.

Debes tener una cuenta de servicio existente antes de implementar tu aplicación.

Configura una cuenta de servicio específica de la versión

gcloud

Ejecuta el comando gcloud app deploy:

  gcloud app deploy --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

Reemplaza lo siguiente:

  • SERVICE_ACCOUNT_NAME por el nombre de la cuenta de servicio que creaste.
  • PROJECT_ID por el ID del proyecto de Google Cloud en el que deseas asignar la cuenta de servicio.

app.yaml

En el archivo app.yaml, especifica tu cuenta de servicio; para ello, agrega el elemento service_account:

service_account: SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

Reemplaza lo siguiente:

  • SERVICE_ACCOUNT_NAME por el nombre de la cuenta de servicio que creaste.
  • PROJECT_ID por el ID del proyecto de Google Cloud en el que deseas asignar la cuenta de servicio.

appengine-web.xml

Si usas los entornos de ejecución de Java y, además, incluyes los servicios en paquetes heredados de App Engine, especifica tu cuenta de servicio mediante el agregado de <service-account> en tu archivo appengine-web.xml:

<service-account>SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com</service-account>

Reemplaza lo siguiente:

  • SERVICE_ACCOUNT_NAME por el nombre de la cuenta de servicio que creaste.
  • PROJECT_ID por el ID del proyecto de Google Cloud en el que deseas asignar la cuenta de servicio.

Cuenta de servicio predeterminada de App Engine

De forma predeterminada, la cuenta de servicio PROJECT_ID@appspot.gserviceaccount.com creada de forma automática tiene el rol de editor en el proyecto. Si implementas la aplicación de App Engine mediante la cuenta de servicio PROJECT_ID@appspot.gserviceaccount.com creada de forma automática, la aplicación puede acceder a todos los recursos del proyecto.

Si usas una restricción de políticas de la organización para evitar que el rol de editor predeterminado se otorgue de forma automática, debes actualizar los roles de forma manual en la cuenta de servicio PROJECT_ID@appspot.gserviceaccount.com creada de forma automática. Los roles que otorgas a la cuenta de servicio predeterminada de App Engine deben permitir que la aplicación acceda a los recursos que requiere. Para obtener información sobre cómo otorgar roles a las cuentas de servicio y otras principales, consulta Administra el acceso a las cuentas de servicio.

Para modificar permisos, borrar y restablecer tus cuentas de servicio, consulta Crea y administra cuentas de servicio.