Cuentas de servicio


En esta página se describe cómo funcionan las cuentas de servicio con Compute Engine.

Para obtener información detallada sobre cómo asociar una cuenta de servicio a una instancia de máquina virtual (VM), consulta uno de los siguientes documentos:

Para obtener información sobre las prácticas recomendadas para crear y gestionar cuentas de servicio, consulta la documentación sobre las prácticas recomendadas para trabajar con cuentas de servicio.

Pruébalo

Si es la primera vez que utilizas Google Cloud, crea una cuenta para evaluar el rendimiento de Compute Engine en situaciones reales. Los nuevos clientes también reciben 300 USD en crédito gratuito para ejecutar, probar y desplegar cargas de trabajo.

Probar Compute Engine gratis

¿Qué es una cuenta de servicio?

Una cuenta de servicio es un tipo especial de cuenta que usan las aplicaciones o las cargas de trabajo de computación, en lugar de las personas. Las cuentas de servicio se gestionan mediante Gestión de Identidades y Accesos (IAM).

Cuando utilices cuentas de servicio con tus máquinas virtuales, ten en cuenta lo siguiente:

  • Puedes asociar la misma cuenta de servicio a varias máquinas virtuales, pero una máquina virtual solo puede tener una cuenta de servicio asociada.
  • Si asocias la misma cuenta de servicio a varias VMs, cualquier cambio que hagas en la cuenta de servicio afectará a todas las VMs que la usen. Esto incluye cualquier cambio que hagas en los roles de gestión de identidades y accesos concedidos a la cuenta de servicio. Por ejemplo, si quitas un rol, todas las VMs que usen la cuenta de servicio perderán los permisos concedidos por ese rol.

Cómo usa Compute Engine las cuentas de servicio

Compute Engine usa dos tipos de cuentas de servicio:

Una cuenta de servicio gestionada por el usuario se puede asociar a una instancia de Compute Engine para proporcionar credenciales a las aplicaciones que se ejecutan en la instancia. La aplicación usa estas credenciales para autenticarse en las APIs de Google Cloudy para obtener autorización para acceder a los recursos de Google Cloud . Solo se pueden adjuntar cuentas de servicio gestionadas por el usuario a una instancia, y una instancia solo puede tener una cuenta de servicio adjunta. Puedes cambiar la cuenta de servicio que está asociada a una instancia en el momento de la creación o más adelante.

La instancia usa agentes de servicio para acceder a procesos internos en tu nombre.

Además, puede crear reglas de cortafuegos que permitan o denieguen el tráfico hacia las instancias y procedente de ellas en función de la cuenta de servicio que asocie a cada instancia.

Cómo se determina la autorización

La autorización proporcionada a las aplicaciones alojadas en una instancia de Compute Engine está limitada por dos configuraciones independientes: los roles concedidos a la cuenta de servicio asociada y los ámbitos de acceso que definas en la instancia. Ambas configuraciones deben permitir el acceso para que la aplicación que se ejecuta en la instancia pueda acceder a un recurso.

Supongamos que tienes una aplicación que lee y escribe archivos en Cloud Storage. Primero, debe autenticarse en la API de Cloud Storage. Puedes crear una instancia con el ámbito cloud-platform y adjuntar una cuenta de servicio a la instancia. A continuación, puedes conceder roles de gestión de identidades y accesos (IAM) a la cuenta de servicio para que tu aplicación pueda acceder a los recursos adecuados. Tu aplicación usa las credenciales de la cuenta de servicio para autenticarse en la API de Cloud Storage sin insertar ninguna clave secreta ni credencial de usuario en tu instancia, imagen o código de aplicación. Tu aplicación también usa la autorización proporcionada por los roles de gestión de identidades y accesos en la cuenta de servicio para acceder a los recursos. Para obtener más información sobre la autorización, consulta la sección Autorización de esta página.

Cuentas de servicio gestionadas por el usuario

Las cuentas de servicio gestionadas por el usuario incluyen las cuentas de servicio que creas explícitamente y la cuenta de servicio predeterminada de Compute Engine.

Nuevas cuentas de servicio

Puedes crear y gestionar tus propias cuentas de servicio mediante IAM. Después de crear una cuenta, le asignas roles de IAM y configuras instancias para que se ejecuten como la cuenta de servicio. Las aplicaciones que se ejecutan en instancias con la cuenta de servicio adjunta pueden usar las credenciales de la cuenta para enviar solicitudes a otras APIs de Google.

Para crear y configurar una cuenta de servicio, consulta el artículo Crear una VM que use una cuenta de servicio gestionada por el usuario.

Cuenta de servicio predeterminada de Compute Engine

Los proyectos nuevos que tengan la API Compute Engine habilitada tienen una cuenta de servicio predeterminada de Compute Engine con la siguiente dirección de correo:

PROJECT_NUMBER-compute@developer.gserviceaccount.com

La cuenta de servicio predeterminada de Compute Engine tiene los siguientes atributos:

  • Se crea automáticamente, con un nombre y una dirección de correo generados automáticamente, y se añade a tu proyecto cuando habilitas la API Compute Engine. Tienes control total sobre la cuenta.
  • Se adjunta de forma predeterminada a todas las VMs que has creado con la CLI de Google Cloud o la consola de Google Cloud . Puedes anular este comportamiento especificando otra cuenta de servicio al crear la VM o indicando explícitamente que no se adjunte ninguna cuenta de servicio a la VM.
  • 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.

Puedes inhabilitar o eliminar esta cuenta de servicio de tu proyecto, pero si lo haces, es posible que fallen las aplicaciones que dependan de las credenciales de la cuenta de servicio. Si eliminas por error la cuenta de servicio predeterminada de Compute Engine, puedes intentar recuperarla en un plazo de 30 días. Para obtener más información, consulta Eliminar y restaurar cuentas de servicio.

Si la cuenta de servicio predeterminada de Compute Engine se eliminó hace más de 30 días, puedes intentar recuperarla siguiendo el proceso que se describe en el artículo Solucionar problemas con las cuentas de servicio predeterminadas.

Agentes de servicio

Los agentes de servicio se crean y gestionan por Google Cloud y se asignan a tu proyecto automáticamente. Estas cuentas representan diferentes servicios de Google Cloud y cada una suele tener un nivel de acceso a tus recursos de Google Cloud .

No puedes asociar agentes de servicio a una instancia de Compute Engine.

Agente de servicios de APIs de Google

Además de la cuenta de servicio predeterminada, todos los proyectos en los que se ha habilitado Compute Engine incluyen un agente de servicio de las APIs de Google, que se puede identificar mediante el correo electrónico:

PROJECT_NUMBER@cloudservices.gserviceaccount.com

Este agente de servicio se ha diseñado específicamente para ejecutar procesos internos de Google en tu nombre. Este agente de servicio es propiedad de Google y no aparece en la sección Cuentas de servicio de la consola de Google Cloud . De forma predeterminada, este agente de servicio recibe automáticamente el rol de editor del proyecto y se muestra en la sección IAM de la consola Google Cloud . Este agente de servicio solo se elimina cuando se elimina el proyecto. Sin embargo, puedes cambiar los roles concedidos a esta cuenta, incluido revocar todo el acceso a tu proyecto.

Algunos recursos dependen de los permisos de edición predeterminados que se conceden a este agente de servicio. Por ejemplo, los grupos de instancias gestionados y el autoescalado usan las credenciales de este agente de servicio para crear, eliminar y gestionar instancias. Si revocas los permisos de este agente de servicio o los modificas de forma que no se concedan permisos para crear instancias, los grupos de instancias gestionadas y el escalado automático dejarán de funcionar.

Por estos motivos, no debes modificar los roles de este agente de servicio a menos que una recomendación de rol te sugiera explícitamente que lo hagas.

Agente de servicio de Compute Engine

Todos los proyectos que tienen habilitada la API Compute Engine tienen un agente de servicio de Compute Engine, que tiene la siguiente dirección de correo:

service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com

Este agente de servicio se ha diseñado específicamente para Compute Engine, de modo que pueda llevar a cabo sus tareas de servicio en tu proyecto. Se basa en la política de gestión de identidades y accesos del agente de servicio concedida en tu Google Cloud proyecto. También es el agente de servicio que usa Compute Engine para acceder a la cuenta de servicio gestionada por el usuario en las instancias de VM. Google es el propietario de esta cuenta, pero es específica de tu proyecto. Este agente de servicio está oculto en la página Gestión de identidades y accesos de la consola, a menos que selecciones Incluir asignaciones de roles proporcionadas por Google. De forma predeterminada, a este agente de servicio se le concede automáticamente el rol compute.serviceAgent en tu proyecto.

Este agente de servicio solo se elimina cuando eliminas tu proyecto. Puedes cambiar los roles concedidos a este agente de servicio y revocar todo el acceso a tu proyecto desde este agente. Si revocas o cambias los permisos de este agente de servicio, Compute Engine no podrá acceder a las identidades de tus cuentas de servicio en tus VMs, lo que puede provocar interrupciones del software que se ejecuta en tus VMs.

Por estos motivos, debes evitar modificar los roles de este agente de servicio en la medida de lo posible.

Asociar una cuenta de servicio a una instancia

Para evitar que una aplicación tenga permisos en exceso, te recomendamos que crees una cuenta de servicio gestionada por el usuario, le concedas solo los roles que tu aplicación necesite para funcionar correctamente y la asocies a tu instancia de Compute Engine. Tu código puede usar las credenciales predeterminadas de la aplicación para autenticarse con las credenciales proporcionadas por la cuenta de servicio.

Puedes asociar una cuenta de servicio a una instancia de Compute Engine cuando crees la instancia o más adelante. Solo se puede adjuntar una cuenta de servicio a una instancia a la vez. Si adjuntas una cuenta de servicio a una instancia que ya tiene una cuenta de servicio adjunta, la instancia dejará de usar la cuenta de servicio anterior.

Cuando adjuntas una cuenta de servicio a una instancia de Compute Engine, también debes asegurarte de que los ámbitos definidos en la instancia sean correctos. De lo contrario, es posible que tu aplicación no pueda acceder a todas las APIs que necesita. Para obtener más información, consulta la sección Ámbitos de acceso de esta página.

Para obtener información detallada sobre cómo asociar una cuenta de servicio a una instancia de Compute Engine, consulta uno de los siguientes documentos:

Autorización

Cuando configuras una instancia para que se ejecute como una cuenta de servicio, determinas el nivel de acceso que tiene la cuenta de servicio mediante los roles de gestión de identidades y accesos que concedes a la cuenta de servicio. Si la cuenta de servicio no tiene roles de gestión de identidades y accesos, no se podrá acceder a ningún recurso mediante la cuenta de servicio en esa instancia.

Además, los ámbitos de acceso de una instancia determinan los ámbitos de OAuth predeterminados de las solicitudes realizadas a través de la CLI de gcloud y las bibliotecas de cliente en la instancia. Por lo tanto, los permisos de acceso pueden limitar aún más el acceso a los métodos de la API al autenticarse mediante OAuth. Sin embargo, no se aplican a otros protocolos de autenticación, como gRPC.

Lo más recomendable es definir el ámbito de acceso completo cloud-platform en la instancia y, a continuación, controlar el acceso de la cuenta de servicio mediante roles de gestión de identidades y accesos.

En esencia:

  • IAM restringe el acceso a las APIs en función de los roles de IAM que se hayan concedido a la cuenta de servicio.
  • Los ámbitos de acceso pueden limitar aún más el acceso a los métodos de la API.

Tanto los permisos de acceso como los roles de gestión de identidades y accesos se describen en detalle en las siguientes secciones.

Roles de gestión de identidades y accesos

Debes asignar los roles de gestión de identidades y accesos adecuados a una cuenta de servicio para que pueda acceder a los métodos de API pertinentes.

Por ejemplo, puedes conceder a una cuenta de servicio los roles de gestión de identidades y accesos para gestionar objetos de Cloud Storage o para gestionar segmentos de Cloud Storage, o ambos. De esta forma, la cuenta solo tendrá los permisos que le concedan esos roles.

Cuando asignas un rol de gestión de identidades y accesos a una cuenta de servicio, cualquier aplicación que se ejecute en una instancia que tenga asociada esa cuenta de servicio tendrá la autorización que confiere ese rol.

Algunos aspectos que debes tener en cuenta:

  • Algunos roles de gestión de identidades y accesos están en versión beta.

    Si no hay ningún rol predefinido para el nivel de acceso que quieres, puedes crear y conceder roles personalizados.

  • Debes definir los ámbitos de acceso en la instancia para autorizar el acceso.

    Aunque el nivel de acceso de una cuenta de servicio se determina en función de los roles que se le hayan asignado, los permisos de acceso de una instancia determinan los permisos de OAuth predeterminados de las solicitudes realizadas a través de la CLI de gcloud y las bibliotecas de cliente de la instancia. Por lo tanto, los ámbitos de acceso pueden limitar aún más el acceso a los métodos de la API al autenticarse mediante OAuth.

Permisos de acceso

Los permisos de acceso son el método antiguo de especificar la autorización de tu instancia de VM. Definen los permisos de OAuth predeterminados que se usan en las solicitudes de la CLI de gcloud o de las bibliotecas de cliente. Los ámbitos de acceso no se aplican a las llamadas realizadas con gRPC.

Los ámbitos de acceso se aplican por VM y solo persisten durante el ciclo de vida de la VM. Puedes definir los ámbitos de acceso al crear una VM o actualizar los de una VM que ya tengas.

Por lo general, en la documentación de cada método de la API se indican los ámbitos necesarios para ese método. Por ejemplo, el método instances.insert proporciona una lista de ámbitos válidos en su sección de autorización.

Los permisos de acceso no tienen ningún efecto si no has habilitado la API relacionada en el proyecto al que pertenece la cuenta de servicio. Por ejemplo, si se concede un ámbito de acceso a Cloud Storage en una instancia de máquina virtual, la instancia solo podrá llamar a la API de Cloud Storage si has habilitado la API de Cloud Storage en el proyecto.

Ámbitos predeterminados

Cuando creas una instancia de Compute Engine, se configura automáticamente con los siguientes ámbitos de acceso:

  • Acceso de solo lectura a Cloud Storage:
    https://www.googleapis.com/auth/devstorage.read_only
  • Acceso de escritura para escribir registros de Compute Engine:
    https://www.googleapis.com/auth/logging.write
  • Acceso de escritura para publicar datos de métricas en tus Google Cloud proyectos:
    https://www.googleapis.com/auth/monitoring.write
  • Se requiere acceso de solo lectura a las funciones de gestión de servicios para Google Cloud Endpoints(alfa):
    https://www.googleapis.com/auth/service.management.readonly
  • Se requiere acceso de lectura o escritura a las funciones de Service Control para los Google Cloud endpoints(alfa):
    https://www.googleapis.com/auth/servicecontrol
  • El acceso de escritura a Cloud Trace permite que una aplicación que se ejecuta en una máquina virtual escriba datos de traza en un proyecto.
    https://www.googleapis.com/auth/trace.append

Prácticas recomendadas para los ámbitos

Hay muchos permisos de acceso entre los que elegir, pero una práctica recomendada es definir el permiso de acceso cloud-platform , que es un permiso de OAuth para los servicios Google Cloud , y, a continuación, controlar el acceso de la cuenta de servicio asignándole roles de gestión de identidades y accesos.

https://www.googleapis.com/auth/cloud-platform

Ejemplos de ámbitos

Siguiendo la práctica recomendada de los ámbitos, si has habilitado el ámbito de acceso cloud-platform en una instancia y, a continuación, has concedido los siguientes roles de gestión de identidades y accesos predefinidos:

  • roles/compute.instanceAdmin.v1
  • roles/storage.objectViewer
  • roles/compute.networkAdmin

De esta forma, la cuenta de servicio solo tendrá los permisos incluidos en esos tres roles. Las aplicaciones que suplanten la identidad de esa cuenta de servicio no podrán realizar acciones fuera de estos roles, a pesar del ámbito de acceso de Google Cloud .

Por otro lado, si asignas un ámbito más restrictivo a la instancia, como el ámbito de solo lectura de Cloud Storage (https://www.googleapis.com/auth/devstorage.read_only), y asignas el rol de administrador roles/storage.objectAdmin a la cuenta de servicio, de forma predeterminada, las solicitudes de la CLI de gcloud y de las bibliotecas cliente no podrán gestionar objetos de Cloud Storage desde esa instancia, aunque hayas asignado el rol roles/storage.ObjectAdmin a la cuenta de servicio. Esto se debe a que el ámbito de solo lectura de Cloud Storage no autoriza a la instancia a manipular datos de Cloud Storage.

Estos son algunos ejemplos de ámbitos de acceso:

  • https://www.googleapis.com/auth/cloud-platform. Consulta y gestiona tus datos en los servicios Google Cloud del proyecto Google Cloud especificado.
  • https://www.googleapis.com/auth/compute. Acceso de control total a los métodos de Compute Engine.
  • https://www.googleapis.com/auth/compute.readonly. Acceso de solo lectura a los métodos de Compute Engine.
  • https://www.googleapis.com/auth/devstorage.read_only. Acceso de solo lectura a Cloud Storage.
  • https://www.googleapis.com/auth/logging.write. Acceso de escritura a los registros de Compute Engine.

Siguientes pasos