cuentas de servicio


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

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

Para conocer las mejores prácticas para crear y administrar cuentas de servicio, lea la documentación Mejores prácticas para trabajar con cuentas de servicio .

Pruébalo por ti mismo

Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de Compute Engine en escenarios del mundo real. Los nuevos clientes también obtienen $300 en créditos gratuitos para ejecutar, probar e implementar cargas de trabajo.

Prueba Compute Engine gratis

¿Qué es una cuenta de servicio?

Una cuenta de servicio es un tipo especial de cuenta utilizada por una aplicación o carga de trabajo informática, en lugar de una persona. Las cuentas de servicio son administradas por Identity and Access Management (IAM) .

Tenga en cuenta lo siguiente cuando utilice cuentas de servicio con sus máquinas virtuales:

  • Puede adjuntar la misma cuenta de servicio a varias máquinas virtuales, pero una sola máquina virtual solo puede tener una cuenta de servicio asociada.
  • Si adjunta la misma cuenta de servicio a varias máquinas virtuales, cualquier cambio posterior que realice en la cuenta de servicio afectará a todas las máquinas virtuales que utilicen la cuenta de servicio. Esto incluye cualquier cambio que realice en las funciones de IAM otorgadas a la cuenta de servicio. Por ejemplo, si elimina una función, todas las máquinas virtuales que utilizan la cuenta de servicio pierden los permisos otorgados por esa función.

Cómo utiliza Compute Engine las cuentas de servicio

Compute Engine utiliza dos tipos de cuentas de servicio:

Se puede adjuntar una cuenta de servicio administrada por el usuario a una instancia de Compute Engine para proporcionar credenciales a las aplicaciones que se ejecutan en la instancia. Estas credenciales son utilizadas por la aplicación para la autenticación Google CloudAPI y autorización de acceso Google Cloud recursos. Solo se pueden adjuntar cuentas de servicio administradas por usuarios a una instancia, y una instancia solo puede tener una cuenta de servicio adjunta. Puede cambiar la cuenta de servicio adjunta a una instancia en el momento de la creación o más adelante.

La instancia utiliza agentes de servicio para acceder a los procesos internos en su nombre.

Además, puede crear reglas de firewall que permitan o rechacen el tráfico hacia y desde instancias según la cuenta de servicio que asocie con 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: las funciones otorgadas a la cuenta de servicio adjunta y los alcances de acceso que configuras en la instancia. Ambas configuraciones deben permitir el acceso antes de que la aplicación que se ejecuta en la instancia pueda acceder a un recurso.

Supongamos que tiene una aplicación que lee y escribe archivos en Cloud Storage, primero debe autenticarse en la API de Cloud Storage. Puede crear una instancia con el alcance de cloud-platform y adjuntar una cuenta de servicio a la instancia. Luego puede otorgar roles de administración de identidad y acceso (IAM) a la cuenta de servicio para darle a su aplicación acceso a los recursos apropiados. Su aplicación utiliza las credenciales de la cuenta de servicio para autenticarse en la API de Cloud Storage sin incorporar claves secretas ni credenciales de usuario en su instancia, imagen o código de aplicación. Su aplicación también utiliza la autorización proporcionada por los roles de IAM en la cuenta de servicio para acceder a los recursos. Para obtener más información sobre la autorización, consulte Autorización en esta página.

Cuentas de servicio administradas por el usuario

Las cuentas de servicio administradas por el usuario incluyen cuentas de servicio nuevas que usted crea explícitamente y la cuenta de servicio predeterminada de Compute Engine.

Nuevas cuentas de servicio

Puede crear y administrar sus propias cuentas de servicio utilizando IAM . Después de crear una cuenta, le otorga funciones de IAM y configura 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 realizar solicitudes a otras API de Google.

Para crear y configurar una nueva cuenta de servicio, consulte Crear una máquina virtual que utilice una cuenta de servicio administrada por el usuario .

Cuenta de servicio predeterminada de Compute Engine

Los nuevos proyectos que han habilitado la API de Compute Engine tienen una cuenta de servicio predeterminada de Compute Engine, que tiene el siguiente correo electrónico:

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 electrónico generados automáticamente, y se agrega a tu proyecto cuando habilitas la API de Compute Engine. Tienes control total sobre la cuenta.
  • Se adjunta de forma predeterminada a todas las máquinas virtuales que creó mediante la CLI de Google Cloud o la consola de Google Cloud. Puede anular este comportamiento especificando una cuenta de servicio diferente al crear la VM o especificando explícitamente que no se adjunte ninguna cuenta de servicio a la VM.
  • Dependiendo de la configuración de la política de su organización, es posible que a la cuenta de servicio predeterminada se le otorgue automáticamente la función de Editor en su proyecto. Le recomendamos encarecidamente que deshabilite la concesión automática de roles aplicando la restricción de política de organización iam.automaticIamGrantsForDefaultServiceAccounts . Si creó su organización después del 3 de mayo de 2024, esta restricción se aplica de forma predeterminada.

    Si desactiva la concesión automática de roles, debe decidir qué roles otorgar a las cuentas de servicio predeterminadas y luego otorgarlos usted mismo.

    Si la cuenta de servicio predeterminada ya tiene la función de Editor, le recomendamos que reemplace la función de Editor con funciones menos permisivas.Para modificar de forma segura los roles de la cuenta de servicio, use Policy Simulator para ver el impacto del cambio y luego otorgue y revoque los roles apropiados .

Puede deshabilitar o eliminar esta cuenta de servicio de su proyecto, pero hacerlo podría provocar que fallen las aplicaciones que dependen de las credenciales de la cuenta de servicio. Si elimina accidentalmente la cuenta de servicio predeterminada de Compute Engine, puede intentar recuperar la cuenta dentro de los 30 días. Para obtener más información, consulte Eliminar y recuperar 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 en Solución de problemas de cuentas de servicio predeterminadas .

Agentes de servicio

Los agentes de servicio son creados y administrados por Google Cloud y asignado a su proyecto automáticamente. Estas cuentas representan diferentes Google Cloud servicios, y cada cuenta normalmente tiene cierto nivel de acceso a su Google Cloud recursos.

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

Agente de servicio de API de Google

Además de la cuenta de servicio predeterminada, todos los proyectos habilitados con Compute Engine vienen con un Agente de servicio de las API de Google , identificable mediante el correo electrónico:

PROJECT_NUMBER@cloudservices.gserviceaccount.com

Este agente de servicio está diseñado específicamente para ejecutar procesos internos de Google en su nombre. Este agente de servicio es propiedad de Google y no figura en la sección Cuentas de servicio de la consola de Google Cloud. De forma predeterminada, a este agente de servicio se le otorga automáticamente la función de editor de proyectos en el proyecto y aparece en la sección IAM de la consola de Google Cloud. Este agente de servicio se elimina solo cuando se elimina el proyecto. Sin embargo, puedes cambiar los roles otorgados a esta cuenta, incluida la revocación de todo acceso a tu proyecto.

Ciertos recursos dependen de los permisos de editor predeterminados otorgados a este agente de servicio. Por ejemplo, los grupos de instancias administrados y el escalado automático utilizan las credenciales de este agente de servicio para crear, eliminar y administrar instancias. Si revoca permisos a este agente de servicio o modifica los permisos de tal manera que no otorgue permisos para crear instancias, esto hará que los grupos de instancias administrados y el escalado automático dejen de funcionar.

Por estos motivos, no debe modificar las funciones de este agente de servicio a menos que una recomendación de función sugiera explícitamente que las modifique.

Agente de servicio de Compute Engine

Todos los proyectos que han habilitado la API de Compute Engine tienen un Agente de Servicio de Compute Engine , el cual tiene el siguiente correo electrónico:

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

Este agente de servicio está diseñado específicamente para que Compute Engine realice sus tareas de servicio en su proyecto. Se basa en la Política IAM del Agente de Servicio otorgada en suGoogle Cloud Proyecto. También es el agente de servicio que utiliza Compute Engine para acceder a la cuenta de servicio administrada por el usuario en instancias de VM. Google es propietario de esta cuenta, pero es específica de su proyecto. Este agente de servicio está oculto en la página de IAM en la consola a menos que seleccione Incluir Google-Concesiones de roles proporcionadas . De forma predeterminada, a este agente de servicio se le otorga automáticamente la función compute.serviceAgent en su proyecto.

Este agente de servicio se elimina solo cuando elimina su proyecto. Puede cambiar los roles otorgados a este agente de servicio y revocar todo acceso a su proyecto por parte de este agente. Revocar o cambiar los permisos de este agente de servicio impide que Compute Engine acceda a las identidades de sus cuentas de servicio en sus VM y puede provocar interrupciones del software que se ejecuta dentro de sus VM.

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

Adjuntar una cuenta de servicio a una instancia

Para evitar proporcionar permisos excesivos a una aplicación, le recomendamos que cree una cuenta de servicio administrada por el usuario, le otorgue solo las funciones que su aplicación necesita para funcionar correctamente y la adjunte a su instancia de Compute Engine. Luego, su código puede usar las credenciales predeterminadas de la aplicación para autenticarse con las credenciales proporcionadas por la cuenta de servicio.

Puedes adjuntar una cuenta de servicio a una instancia de Compute Engine cuando creas la instancia o más tarde. Sólo se puede adjuntar una cuenta de servicio a una instancia a la vez; Si adjunta una cuenta de servicio a una instancia que ya tiene una cuenta de servicio adjunta, esa instancia ya no utilizará la cuenta de servicio anterior.

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

Para obtener información paso a paso sobre cómo adjuntar una cuenta de servicio a una instancia de Compute Engine, revisa uno de los siguientes documentos:

Autorización

Cuando configura una instancia para que se ejecute como una cuenta de servicio, determina el nivel de acceso que tiene la cuenta de servicio mediante las funciones de IAM que le otorga . Si la cuenta de servicio no tiene funciones de IAM, no se podrá acceder a ningún recurso mediante la cuenta de servicio en esa instancia.

Además, los alcances de acceso de una instancia determinan los alcances de OAuth predeterminados para las solicitudes realizadas a través de la CLI de gcloud y las bibliotecas cliente de la instancia. Como resultado, los ámbitos de acceso potencialmente limitan aún más el acceso a los métodos API cuando se autentica a través de OAuth. Sin embargo, no se extienden a otros protocolos de autenticación como gRPC.

La mejor práctica es establecer el alcance completo del acceso a cloud-platform en la instancia y luego controlar el acceso de la cuenta de servicio mediante roles de IAM.

Esencialmente:

  • IAM restringe el acceso a las API según las funciones de IAM que se otorgan a la cuenta de servicio.
  • Los ámbitos de acceso potencialmente limitan aún más el acceso a los métodos API.

Tanto los ámbitos de acceso como las funciones de IAM se describen en detalle en las siguientes secciones.

Funciones de IAM

Debe otorgar las funciones de IAM adecuadas a una cuenta de servicio para permitir que esa cuenta de servicio acceda a los métodos API relevantes.

Por ejemplo, puedes otorgarle a una cuenta de servicio las funciones de IAM para administrar objetos de Cloud Storage, o para administrar depósitos de Cloud Storage, o ambos, lo que limita la cuenta a los permisos otorgados por esas funciones.

Cuando otorga una función de IAM a una cuenta de servicio, cualquier aplicación que se ejecute en una instancia que tenga esa cuenta de servicio adjunta tendrá la autorización conferida por esa función.

Algunas cosas a tener en cuenta:

  • Algunas funciones de IAM están en versión Beta.

    Si no hay un rol predefinido para el nivel de acceso que desea, puede crear y otorgar roles personalizados .

  • Debe establecer alcances de acceso en la instancia para autorizar el acceso.

    Si bien el nivel de acceso de una cuenta de servicio está determinado por las funciones otorgadas a la cuenta de servicio, los alcances de acceso de una instancia determinan los alcances de OAuth predeterminados para las solicitudes realizadas a través de la CLI de gcloud y las bibliotecas cliente de la instancia. Como resultado, los ámbitos de acceso potencialmente limitan aún más el acceso a los métodos API cuando se autentica a través de OAuth.

Ámbitos de acceso

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

Los alcances de acceso se aplican por máquina virtual y persisten solo durante la vida útil de la máquina virtual. Puede establecer alcances de acceso al crear una VM o actualizar el alcance de acceso en una VM existente.

Generalmente, la documentación de cada método API enumera los alcances 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 alcances de acceso no tienen ningún efecto si no ha habilitado la API relacionada en el proyecto al que pertenece la cuenta de servicio. Por ejemplo, otorgar un alcance de acceso para Cloud Storage en una instancia de máquina virtual permite que la instancia llame a la API de Cloud Storage solo si ha habilitado la API de Cloud Storage en el proyecto.

Alcances predeterminados

Cuando creas una nueva instancia de Compute Engine, se configura automáticamente con los siguientes alcances 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 su Google Cloud proyectos:
    https://www.googleapis.com/auth/monitoring.write
  • Acceso de solo lectura a las funciones de gestión de servicios necesarias para Google CloudPuntos finales (Alfa) :
    https://www.googleapis.com/auth/service.management.readonly
  • Acceso de lectura o escritura a las funciones de control de servicio necesarias para Google CloudPuntos finales (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 seguimiento en un proyecto.
    https://www.googleapis.com/auth/trace.append

Mejores prácticas de ámbitos

Hay muchos ámbitos de acceso disponibles para elegir, pero una práctica recomendada es establecer el ámbito de acceso cloud-platform , que es un ámbito de OAuth para Google Cloud servicios y luego controlar el acceso de la cuenta de servicio otorgándole funciones de IAM.

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

Ejemplos de alcances

Siguiendo las mejores prácticas de ámbitos, si habilitó el ámbito de acceso a cloud-platform en una instancia y luego otorgó las siguientes funciones de IAM predefinidas :

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

Entonces la cuenta de servicio solo tiene los permisos incluidos en esos tres roles. Las aplicaciones que se hacen pasar por esa cuenta de servicio no pueden realizar acciones fuera de estos roles a pesar de la Google Cloud ámbito de acceso.

Por otro lado, si otorga un alcance más restrictivo en la instancia, como el alcance de solo lectura de Cloud Storage ( https://www.googleapis.com/auth/devstorage.read_only ) y establece la función de administrador roles/storage.objectAdmin en la cuenta de servicio, entonces, de manera predeterminada, las solicitudes de la CLI de gcloud y las bibliotecas cliente no podrán administrar los objetos de Cloud Storage desde esa instancia, aunque haya otorgado a la cuenta de servicio roles/storage.ObjectAdmin role. Esto se debe a que el alcance de solo lectura de Cloud Storage no autoriza a la instancia a manipular los datos de Cloud Storage.

Los ámbitos de acceso de ejemplo incluyen los siguientes:

  • https://www.googleapis.com/auth/cloud-platform . Vea y administre sus datos en Google Cloud servicios en el proyecto de 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.

¿Qué sigue?