Cuentas de servicio

En esta página, se describen las cuentas de servicio y sus permisos, que pueden estar limitados por los permisos de acceso que se aplican a las instancias de VM y por las funciones de la administración de identidades y accesos (IAM) que se aplican a las cuentas de servicio. Para obtener información sobre cómo crear y usar cuentas de servicio, lee la documentación Crea y habilita cuentas de servicio para instancias.

Una cuenta de servicio es una cuenta especial que pueden usar los servicios y aplicaciones que se ejecutan en la instancia de Compute Engine para interactuar con otras API de Google Cloud. Las apps pueden usar credenciales de cuentas de servicio con el fin de otorgarse autorización para trabajar con un conjunto de API y realizar acciones dentro de los permisos otorgados a la cuenta de servicio y la instancia de máquina virtual. Además, puedes crear reglas de firewall que permitan o rechacen el tráfico hacia y desde instancias según la cuenta de servicio que asocies con cada instancia.

¿Qué es una cuenta de servicio?

Una cuenta de servicio es una identidad que una instancia o una aplicación pueden usar para ejecutar solicitudes a la API en tu nombre.

Esta identidad se usa para identificar a las apps que se ejecutan en instancias de máquinas virtuales de otros servicios de Google Cloud. Por ejemplo, si escribes una app que lee y escribe archivos en Cloud Storage, primero se debe autenticar en la API de Cloud Storage. Puedes crear una cuenta de servicio y otorgarle acceso a la API de Cloud Storage. Luego actualiza la app para pasar las credenciales de la cuenta de servicio a la API de Cloud Storage. La app se autentica sin problemas en la API y no incorpora claves secretas o credenciales de usuario en la instancia, imagen o código de app.

Si las cuentas de servicio tienen los permisos de IAM necesarios, pueden crear y administrar instancias y otros recursos. Las cuentas de servicio pueden modificar o borrar recursos solo si les otorgas los permisos de IAM necesarios a nivel de proyecto o recurso. También puedes definir qué cuenta de servicio está asociada a una instancia.

Una instancia solo puede tener una cuenta de servicio, y la cuenta debe estar creada en el mismo proyecto que la instancia.

Hay dos tipos de cuentas de servicio disponibles para las instancias de Compute Engine:

  • Cuentas de servicio administradas por el usuario
  • Cuentas de servicio administradas por Google

Cuentas de servicio administradas por el usuario

Las cuentas de servicio administradas por el usuario incluyen cuentas de servicio nuevas que debes crear de manera explícita y la cuenta de servicio predeterminada de Compute Engine.

Cuentas de servicio nuevas

Puedes crear y administrar tus propias cuentas de servicio con Cloud Identity and Access Management. Después de crear una cuenta, otórgale funciones de IAM y configura instancias para que se ejecuten como cuenta de servicio. Las apps que se ejecutan en instancias habilitadas con la cuenta de servicio pueden usar las credenciales de la cuenta para realizar solicitudes a otras API de Google.

Si deseas crear y configurar una cuenta de servicio nueva, consulta Crea y habilita cuentas de servicio para instancias.

Cuenta de servicio predeterminada de Compute Engine

Los proyectos nuevos incluyen la cuenta de servicio predeterminada de Compute Engine, que puedes identificar mediante este correo electrónico:

[PROJECT_NUMBER]-compute@developer.gserviceaccount.com

Google crea la cuenta de servicio predeterminada de Compute Engine y la agrega al proyecto de forma automática, pero tú tienes el control total sobre ella.

La cuenta de servicio predeterminada de Compute Engine se crea con la función de editor de proyectos de Cloud IAM, pero puedes modificar las funciones de la cuenta de servicio para limitar a qué API de Google tiene acceso.

Puedes borrar esta cuenta de servicio del proyecto, pero esto podría provocar la falla de cualquier aplicación que dependa de las credenciales de la cuenta de servicio. Si borras por accidente la cuenta de servicio predeterminada de Compute Engine, puedes intentar recuperarla dentro de 30 días. Para obtener más información, consulta Crea y administra cuentas de servicio.

En resumen, la cuenta de servicio predeterminada de Compute Engine tiene los siguientes atributos:

  • El proyecto de Google Cloud Console la crea de forma automática, y la cuenta tiene un nombre y una dirección de correo electrónico generados automáticamente.
  • Se agrega de forma automática al proyecto con la función de editor de proyectos de Cloud IAM.
  • Está habilitada de forma predeterminada en todas las instancias creadas por la herramienta de línea de comandos de gcloud y Cloud Console. Puedes anular esto si especificas otra cuenta de servicio cuando creas la instancia o si inhabilitas de manera explícita las cuentas de servicio para la instancia.

Asocia una cuenta de servicio a una instancia

Cuando creas una instancia con la herramienta de línea de comandos de gcloud o con Google Cloud Console, puedes especificar qué cuenta de servicio usará la instancia cuando llame a las API de Google Cloud. La instancia se configura de forma automática con los siguientes permisos 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 los proyectos de Google Cloud:
    https://www.googleapis.com/auth/monitoring.write
  • Acceso de solo lectura a las funciones de administración de servicios necesarias para Google Cloud Endpoints (Alfa):
    https://www.googleapis.com/auth/service.management.readonly
  • Acceso de lectura/escritura a las funciones de Control de servicios necesarias para Google Cloud Endpoints (Alfa):
    https://www.googleapis.com/auth/servicecontrol

Los permisos de acceso definen los permisos de OAuth predeterminados para las solicitudes realizadas a través de las bibliotecas cliente y gcloud. Como resultado, pueden limitar el acceso a los métodos de la API cuando se autentica a través de OAuth. Sin embargo, no se extienden a otros protocolos de autenticación, como gRPC. Como resultado, se recomienda que establezcas el permiso de acceso cloud-platform completo en la instancia y, luego, otorgues a la cuenta de servicio funciones de IAM para limitar de forma segura el acceso de la cuenta. Consulta Permisos de las cuentas de servicio para conocer más detalles.

Cuando creas una instancia con una solicitud directa a la API sin usar la herramienta de línea de comandos de gcloud ni Google Cloud Console, la cuenta de servicio predeterminada no está habilitada para la instancia. Sin embargo, aún puedes habilitar la cuenta de servicio predeterminada si la especificas de forma explícita como parte de la carga útil de la solicitud.

Cuentas de servicio administradas por Google

Google crea y administra estas cuentas de servicio, además de asignarlas al proyecto de forma automática. Estas cuentas representan diferentes servicios de Google y cada una tiene cierto nivel de acceso al proyecto de Google Cloud.

Cuenta de servicio de las API de Google

Además de la cuenta de servicio predeterminada, todos los proyectos habilitados con Compute Engine tienen una cuenta de servicio de las API de Google, que se puede identificar mediante el siguiente correo electrónico:

[PROJECT_NUMBER]@cloudservices.gserviceaccount.com

Esta cuenta de servicio está diseñada para ejecutar procesos internos de Google en tu nombre. La cuenta es propiedad de Google y no aparece en la sección Cuentas de servicio de Cloud Console. De forma predeterminada, la cuenta recibe automáticamente la función de editor de proyecto y aparece en la sección IAM de Cloud Console. Esta cuenta de servicio solo se borra cuando se borra el proyecto. Sin embargo, puedes cambiar las funciones otorgadas a esta cuenta y, también, revocar todo tipo de acceso al proyecto.

Ciertos recursos dependen de esta cuenta de servicio y de los permisos de editor predeterminados otorgados a ella. Por ejemplo, los grupos de instancias administrados y el ajuste de escala automático usan las credenciales de esta cuenta para crear, borrar y administrar instancias. Si revocas los permisos de la cuenta de servicio o los modificas de tal manera que no permitan crear instancias, esto hará que los grupos de instancias administrados y el ajuste de escala automático dejen de funcionar.

Por estos motivos, no debes modificar las funciones de esta cuenta de servicio.

Cuenta de servicio de Compute Engine System

Todos los proyectos que habilitaron la API de Compute Engine tienen una cuenta de servicio de Compute Engine System, que se puede identificar mediante la siguiente dirección:

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

Esta cuenta de servicio está diseñada para que Compute Engine realice las tareas de servicio en el proyecto. Se basa en la política de IAM de agente de servicios otorgada en el proyecto de Google Cloud. También es la cuenta de servicio que Compute Engine usa para acceder a la cuenta de servicio del cliente en instancias de VM. Google es el propietario de esta cuenta, pero es específica para tu proyecto y está incluida en las secciones IAM y Cuentas de servicio de Cloud Console. De forma predeterminada, a la cuenta se le otorga automáticamente la función compute.serviceAgent en el proyecto.

Esta cuenta de servicio se borra solo cuando borras el proyecto. Puedes cambiar las funciones otorgadas a esta cuenta y revocar todo acceso al proyecto desde la cuenta. Revocar o cambiar los permisos de esta cuenta de servicio evita que Compute Engine pueda acceder a las identidades de las cuentas de servicio en las VM y puede causar interrupciones del software que se ejecuta dentro de las VM.

Por estos motivos, no debes modificar las funciones para esta cuenta de servicio.

Permisos de las cuentas de servicio

Cuando configuras una instancia para que se ejecute como cuenta de servicio, determinas el nivel de acceso que tiene la cuenta de servicio mediante las funciones de IAM que le otorgas. Si la cuenta de servicio no tiene funciones de IAM, entonces no puede ejecutar ningún método de la API en esa instancia.

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

Se recomienda configurar el permiso de acceso cloud-platform completo en la instancia y, luego, limitar de forma segura el acceso a la cuenta de servicio con las funciones de IAM.

En resumen, sucede lo siguiente:

  • IAM restringe el acceso a las API según las funciones de IAM que se otorgan a la cuenta de servicio.
  • Los permisos de acceso pueden limitar aún más el acceso a los métodos de la API cuando se autentica a través de OAuth.

Los permisos de acceso y las funciones de IAM se describen en detalle en las siguientes secciones.

Hay muchos permisos de acceso que puedes elegir, pero también puedes configurar el permiso de acceso cloud-platform, que es un permiso de OAuth para todos los servicios de Google Cloud y, luego, limitar de forma segura el acceso de la cuenta de servicio mediante funciones de IAM.

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

Por ejemplo, si habilitaste el permiso de acceso cloud-platform en una instancia y, luego, otorgaste 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 esas tres funciones de IAM. Esa cuenta no puede realizar acciones fuera de estas funciones a pesar del permiso de acceso de Google Cloud.

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

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

Funciones de IAM

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

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

Las funciones de IAM son específicas de la cuenta. Eso significa que después de otorgar una función de IAM a una cuenta de servicio, cualquier instancia que se ejecute como esa cuenta de servicio puede usar esa función. Además, ten en cuenta la siguiente información:

  • Algunas funciones de IAM se encuentran actualmente en versión Beta.

    Si no hay una función de IAM predefinida para el permiso de acceso que deseas, puedes otorgar una de las funciones básicas, como editor de proyectos, o crear y otorgar funciones personalizadas.

  • Debes establecer permisos de acceso en la instancia para autorizar el acceso.

    Si bien el permiso de acceso de una cuenta de servicio está determinado por las funciones de IAM otorgadas a la cuenta, los permisos de acceso de una instancia determinan los permisos predeterminados de OAuth para las solicitudes realizadas a través de la herramienta de gcloud y las bibliotecas cliente en la instancia. Como resultado, los permisos de acceso pueden limitar aún más el acceso a los métodos de la API cuando se autentica mediante OAuth.

Permisos de acceso

Los niveles de acceso son el método heredado de especificar permisos para tu instancia. Los permisos de acceso no son un mecanismo de seguridad. En cambio, definen los permisos predeterminados de OAuth que se usan en las solicitudes realizadas desde la herramienta de gcloud o las bibliotecas cliente. Ten en cuenta que no tienen ningún efecto cuando se realizan solicitudes que no se autenticaron a través de OAuth, como en gRPC o las API de SignBlob.

Debes configurar los permisos de acceso cuando configuras una instancia para que se ejecute como cuenta de servicio.

Se recomienda establecer el permiso de acceso cloud-platform completo en la instancia y, luego, limitar de forma segura el acceso a la API de la cuenta de servicio con las funciones de Cloud IAM.

Los permisos de acceso se aplican por instancia. Debes establecer permisos de acceso cuando creas una instancia, y estos se conservan solo durante la vida útil de la instancia.

Los permisos de acceso no tienen ningún efecto si no habilitaste la API relacionada en el proyecto al que pertenece la cuenta de servicio. Por ejemplo, si otorgas un permiso de acceso para Cloud Storage en una instancia de máquina virtual, esto permite que la instancia llame a la API de Cloud Storage solo si habilitaste la API de Cloud Storage en el proyecto.

Estos son algunos ejemplos de permisos de acceso:

  • https://www.googleapis.com/auth/cloud-platform: Otorga acceso completo a todos los recursos de Google Cloud.
  • https://www.googleapis.com/auth/compute: Otorga control total de acceso a los métodos de Compute Engine.
  • https://www.googleapis.com/auth/compute.readonly: Otorga acceso de solo lectura a los métodos de Compute Engine.
  • https://www.googleapis.com/auth/devstorage.read_only: Otorga acceso de solo lectura a Cloud Storage.
  • https://www.googleapis.com/auth/logging.write: Otorga acceso de escritura a los registros de Compute Engine.

Próximos pasos