Cuentas de servicio

En esta página, se describen las cuentas de servicio y sus permisos, que pueden estar limitados tanto por los niveles de acceso que se aplican a las instancias de VM como 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 tu instancia de Compute Engine para interactuar con otras API de Google Cloud Platform. Las aplicaciones pueden usar las credenciales de la cuenta 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 denieguen 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 puede usar una instancia o una aplicación para ejecutar solicitudes a la API en tu nombre.

Esta identidad se usa para que otros servicios de Google Cloud Platform identifiquen aplicaciones que se ejecutan en tus instancias de máquina virtual. 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 otorgar acceso a la cuenta de servicio a la API de Cloud Storage. Luego, actualiza tu app para que pase las credenciales de la cuenta de servicio a la API de Cloud Storage. Tu app se autentica sin problemas en la API y no incorpora claves secretas o credenciales de usuario en tu instancia, imagen o código de app.

Si tus cuentas de servicio tienen los permisos de IAM necesarios, esas cuentas de servicio pueden crear y administrar instancias y otros recursos. Las cuentas de servicio pueden modificar o quitar 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 de servicio 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 creas explícitamente 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 aplicaciones 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 la documentación Crea y habilita cuentas de servicio para instancias.

Cuenta de servicio predeterminada de Compute Engine

Los nuevos proyectos vienen con 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 a tu proyecto automáticamente, pero tú tienes el control total sobre la cuenta.

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

Puedes borrar esta cuenta de servicio de tu proyecto, pero esto podría provocar la falla de cualquier aplicación que dependa de las credenciales de la cuenta de servicio. Si borras de forma accidental la cuenta de servicio predeterminada de Compute Engine, puedes intentar recuperarla dentro de los 30 días. Para obtener más información, consulta la página sobre cómo crear y administrar cuentas de servicio.

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

  • El proyecto de Google Cloud Platform Console la crea de forma automática, y tiene un nombre y una dirección de correo electrónico generados automáticamente.
  • Se agrega de forma automática a tu 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 gcloud y GCP Console. Puedes anular esto si especificas otra cuenta de servicio cuando creas la instancia o 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 gcloud o Google Cloud Platform Console, puedes especificar qué cuenta de servicio usa la instancia cuando llama a las API de GCP. La instancia se configura de forma automática con los siguientes niveles 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 proyectos de Google Cloud:
    https://www.googleapis.com/auth/monitoring.write
  • Acceso de solo lectura a las funciones de administración de servicios requeridas para Google Cloud Endpoints (Alfa):
    https://www.googleapis.com/auth/service.management.readonly
  • Acceso de lectura y escritura a las funciones de Control de servicios requeridas para Google Cloud Endpoints (Alfa):
    https://www.googleapis.com/auth/servicecontrol

Los niveles de acceso definen los alcances de OAuth predeterminados para las solicitudes realizadas a través de las bibliotecas cliente y gcloud. Como resultado, limitan potencialmente 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 nivel de acceso cloud-platform completo en la instancia y luego limites de forma segura el acceso de tu cuenta de servicio mediante funciones de IAM para la cuenta de servicio. Consulta Permisos de la cuenta de servicio para ver más detalles.

Cuando creas una instancia con una solicitud directa a la API sin usar la herramienta de línea de comandos gcloud ni Google Cloud Platform 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, y las asignada a tu proyecto automáticamente. Estas cuentas representan diferentes servicios de Google y cada cuenta tiene cierto nivel de acceso a tu proyecto de Google Cloud Platform.

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 correo electrónico:

[PROJECT_NUMBER]@cloudservices.gserviceaccount.com

Esta cuenta de servicio está diseñada específicamente para ejecutar procesos internos de Google en tu nombre. La cuenta es propiedad de Google y no figura en la sección Cuentas de servicio de GCP Console. De forma predeterminada, la cuenta recibe la función de editor de proyecto de manera automática en el proyecto y aparece en la sección IAM de GCP Console. Esta cuenta de servicio solo se borra cuando se borra el proyecto. Sin embargo, puedes cambiar las funciones otorgadas a esta cuenta, incluida la revocación de todo tipo de acceso a tu proyecto.

Ciertos recursos dependen de esta cuenta de servicio y de los permisos de editor predeterminados otorgados a la cuenta de servicio. 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 a la cuenta de servicio, o modificas los permisos de tal manera que no otorguen permisos para 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 específicamente para que Compute Engine realice las tareas de servicio en tu proyecto. Se basa en la Política de IAM de agente de servicios otorgada en tu proyecto de Google Cloud. También es la cuenta de servicio de Compute Engine que se 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 GCP Console. De forma predeterminada, a la cuenta se le otorga la función compute.serviceAgent en tu proyecto automáticamente.

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

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

Permisos de la cuenta 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 niveles de acceso de una instancia determinan los niveles predeterminados de OAuth para las solicitudes realizadas mediante la herramienta gcloud y las bibliotecas cliente de la instancia. Como resultado, los niveles de acceso limitan potencialmente 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 nivel de acceso cloud-platform completo en la instancia y, a continuación, limitar de forma segura el acceso a la cuenta de servicio con las funciones de IAM.

Básicamente:

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

Tanto los niveles de acceso como las funciones de IAM se describen en detalle en las secciones a continuación.

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

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

Por ejemplo, si habilitaste el nivel 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 nivel de acceso de Google Cloud Platform.

Por otro lado, si otorgas un nivel más restrictivo en la instancia, como el nivel 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 manera predeterminada, las solicitudes desde la herramienta gcloud y las bibliotecas cliente no podrán administrar los 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 nivel de solo lectura de Cloud Storage no autoriza a la instancia a manipular datos de Cloud Storage.

En general, la documentación de cada método de la API enumera los alcances necesarios para ese método. Por ejemplo, el método instances.insert proporciona una lista de niveles 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 de servicio acceda a los métodos de la API relevantes.

Por ejemplo, puedes otorgar las funciones de IAM a una cuenta de servicio 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 nivel de acceso que deseas, puedes otorgar una de las funciones básicas, como editor de proyecto, o puedes crear y otorgar funciones personalizadas.

  • Debes configurar niveles 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 de IAM otorgadas a la cuenta de servicio, los niveles de acceso de una instancia determinan los niveles predeterminados de OAuth para las solicitudes realizadas a través de la herramienta gcloud y las bibliotecas cliente en la instancia. Como resultado, los niveles de acceso limitan potencialmente aún más el acceso a los métodos de la API cuando se autentica mediante OAuth.

Alcance del acceso

Los niveles de acceso son el método heredado de especificar permisos para tu instancia. Los niveles de acceso no son un mecanismo de seguridad. En cambio, definen los niveles predeterminados de OAuth que se usan en las solicitudes de la herramienta 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 gRPC o las API de SignBlob.

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

Una práctica recomendada es establecer el nivel 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 niveles de acceso se aplican por instancia. Configuras los niveles de acceso cuando creas una instancia y estos persisten solo durante la vida útil de la instancia.

Los niveles 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 niveles de acceso para Cloud Storage en una instancia de máquina virtual, esto permite que la instancia realice una llamada a la API de Cloud Storage solo si habilitaste la API de Cloud Storage en el proyecto.

Estos son algunos ejemplos de niveles de acceso:

  • https://www.googleapis.com/auth/cloud-platform. Acceso completo a todos los recursos de GCP.
  • https://www.googleapis.com/auth/compute. Control total de acceso 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

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de Compute Engine