Configurar 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.

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

  • Cuenta de servicio predeterminada a nivel de aplicación: esta cuenta de servicio se usa en todos los servicios implementados cuando no se configura una cuenta de servicio por versión. Puedes asignar una cuenta de servicio que hayas creado o usar la cuenta de servicio predeterminada creada automáticamente que se crea cuando implementas un servicio en tu proyecto de Cloud por primera vez. 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 identidad de una versión específica de tu servicio implementado. Cuando despliegues una versión ya creada o una nueva, puedes especificar una cuenta de servicio que actúe como identidad de esa versión. Por ejemplo, si una versión requiere permisos diferentes a los de la cuenta de servicio predeterminada a nivel de aplicación, puedes asignarle una cuenta de servicio específica para esa versión.

Ver las cuentas de servicio configuradas

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

Para ver la cuenta de servicio que usa una versión implementada, sigue estos pasos:

gcloud

Ejecuta el comando gcloud app versions describe:

  gcloud app versions describe VERSION_ID --service=SERVICE_NAME

Sustituye:

  • VERSION_ID con el ID de la versión.
  • SERVICE_NAME con el nombre del servicio que has creado.

Consola

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

Asignar una cuenta de servicio predeterminada a nivel de aplicación

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

Especificar una cuenta de servicio predeterminada a nivel de aplicación durante la creación de la aplicación

Durante el proceso inicial de creación de la aplicación de App Engine, puedes asignar una cuenta de servicio que hayas creado o usar la cuenta de servicio PROJECT_ID@appspot.gserviceaccount.com creada automáticamente como predeterminada.

Para crear una aplicación de App Engine y asignarle una cuenta de servicio predeterminada a nivel de aplicación, 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

Sustituye:

  • SERVICE_ACCOUNT_NAME con el nombre de la cuenta de servicio que has creado.
  • PROJECT_ID con el ID del proyecto Google Cloud en el que quieras asignar la cuenta de servicio.

Consola

  1. Ve a la página de App Engine:

    Ir a App Engine

  2. Crea un Google Cloud proyecto.

  3. En la sección Crear aplicación, selecciona una cuenta de servicio en Identidad y acceso a APIs.

Actualizar la cuenta de servicio predeterminada a nivel de aplicación de tu aplicación

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

gcloud

Ejecuta el comando gcloud app update.

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

Sustituye:

  • SERVICE_ACCOUNT_NAME con el nombre de la cuenta de servicio que has creado.
  • PROJECT_ID con el ID del proyecto Google Cloud en el que quieras asignar la cuenta de servicio.

Cada nueva versión que despliegues a partir de ahora usará la nueva cuenta de servicio predeterminada a nivel de aplicación, a menos que asignes explícitamente una cuenta de servicio específica de la versión.

Consola

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

    Ve a Ajustes de aplicaciones.

  2. Elige una cuenta de servicio predeterminada a nivel de aplicación en Seleccionar una cuenta de servicio y haz clic en Guardar.

    Se te redirigirá a la pestaña Configuración de la aplicación, donde podrás ver la dirección de correo de la cuenta de servicio predeterminada a nivel de aplicación actualizada. Ejemplo: SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.

    Cada nueva versión que despliegues a partir de ahora usará la nueva cuenta de servicio predeterminada a nivel de aplicación, a menos que asignes explícitamente una cuenta de servicio específica de la versión.

Implementar con una cuenta de servicio específica de una versión

Solo puedes definir una cuenta de servicio específica de una versión durante la implementación de nuevas versiones. Si usas una cuenta de servicio específica de una versión, puedes conceder diferentes privilegios a cada versión de la aplicación en función de las tareas específicas que realice y evitar conceder más privilegios de los necesarios.

Debes tener una cuenta de servicio ya creada para desplegar tu aplicación. Tu cuenta de servicio específica de la versión debe estar en el mismo proyecto en el que despliegues tu aplicación.

Después del 15 de mayo del 2024, Artifact Registry alojará imágenes del dominio gcr.io en proyectosGoogle Cloud sin uso previo de Container Registry. Si despliegas una aplicación en un proyecto nuevo creado después de esa fecha, es posible que la cuenta de servicio no tenga los permisos necesarios para desplegar la aplicación. Para conceder los permisos necesarios, consulta Desplegar en App Engine.

Definir una cuenta de servicio específica de una versión

gcloud

Ejecuta el comando gcloud app deploy:

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

Sustituye:

  • SERVICE_ACCOUNT_NAME con el nombre de la cuenta de servicio que has creado.
  • PROJECT_ID con el ID del proyecto Google Cloud en el que quieras asignar la cuenta de servicio. Tu cuenta de servicio específica de la versión debe estar en el mismo proyecto en el que despliegues tu aplicación.

app.yaml

En el archivo app.yaml, especifica tu cuenta de servicio añadiendo el elemento service_account:

service_account: SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

Sustituye:

  • SERVICE_ACCOUNT_NAME con el nombre de la cuenta de servicio que has creado.
  • PROJECT_ID con el ID del proyecto Google Cloud en el que quieras asignar la cuenta de servicio. Tu cuenta de servicio específica de la versión debe estar en el mismo proyecto en el que despliegues tu aplicación.

appengine-web.xml

Si usas los tiempos de ejecución de Java e incluyes los servicios empaquetados antiguos de App Engine, especifica tu cuenta de servicio añadiendo el elemento <service-account> en el archivo appengine-web.xml:

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

Sustituye:

  • SERVICE_ACCOUNT_NAME con el nombre de la cuenta de servicio que has creado.
  • PROJECT_ID con el ID del proyecto Google Cloud en el que quieras asignar la cuenta de servicio. Tu cuenta de servicio específica de la versión debe estar en el mismo proyecto en el que despliegues tu aplicación.

Cuenta de servicio predeterminada de App Engine

La cuenta de servicio predeterminada de App Engine se crea automáticamente cuando usas App Engine.

En función de la configuración de la política de tu organización, es posible que se conceda automáticamente el rol Editor a la cuenta de servicio predeterminada de tu proyecto. Te recomendamos que inhabilites la asignación automática de roles aplicando la restricción de la política de organización iam.automaticIamGrantsForDefaultServiceAccounts. Si has creado tu organización después del 3 de mayo del 2024, esta restricción se aplica de forma predeterminada.

Si inhabilitas la concesión automática de roles, debes decidir qué roles quieres conceder a las cuentas de servicio predeterminadas y, a continuación, concederlos tú mismo.

Si la cuenta de servicio predeterminada ya tiene el rol Editor, te recomendamos que lo sustituyas por roles con menos permisos.Para modificar los roles de la cuenta de servicio de forma segura, usa Simulador de políticas para ver el impacto del cambio y, a continuación, asigna y revoca los roles adecuados.

Para saber cómo asignar roles a cuentas de servicio y otras entidades, consulta el artículo Administra el acceso a proyectos, carpetas y organizaciones.

Después del 15 de mayo del 2024, Artifact Registry alojará imágenes del dominio gcr.io en proyectosGoogle Cloud sin uso previo de Container Registry. Si despliegas una aplicación en un proyecto nuevo creado después de esa fecha, es posible que la cuenta de servicio no tenga los permisos necesarios para desplegar la aplicación. Para conceder los permisos necesarios, consulta Desplegar en App Engine.

Para modificar permisos, eliminar y restaurar tus cuentas de servicio, consulta el artículo Crear y gestionar cuentas de servicio.