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
- Ve a la pestaña Versiones de App Engine en la consola. Ir a Versiones
- 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
Ve a la página de App Engine:
Crea un Google Cloud proyecto.
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
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.
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.