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 Identity and Access Management (IAM) que se aplican a las cuentas de servicio. Para aprender a 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 las aplicaciones que se ejecutan en tu instancia de Compute Engine para interactuar con otras API de Google Cloud Platform. Las aplicaciones pueden usar credenciales de cuenta de servicio para otorgarse autorización a un conjunto de API y realizar acciones dentro de los permisos otorgados a la cuenta de servicio y a 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 API en su nombre.

Esta identidad se usa para que otros servicios de Google Cloud Platform identifiquen aplicaciones que se ejecutan en las instancias de tu máquina virtual. Por ejemplo, si escribes una aplicación que lee y escribe archivos en Google Cloud Storage, primero esta debe autenticarse en la API de Google Cloud Storage. Puedes crear una cuenta de servicio y otorgarle acceso a la API de Cloud Storage. Luego, actualizarías el código de tu aplicación para pasar las credenciales de la cuenta de servicio a la API de Cloud Storage. Tu aplicación se autentica sin problemas en la API, sin incorporar claves secretas o credenciales de usuario en tu instancia, imagen o código de aplicación.

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 mediante Google 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.

Para 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 proyectos recién creados tienen la cuenta de servicio predeterminada de Compute Engine, la cual se puede 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 IAM, pero puedes modificar las funciones de la cuenta de servicio para limitar de forma segura a qué API de Google puede acceder la cuenta de servicio.

Puedes borrar esta cuenta de servicio de tu proyecto, pero al hacerlo podría fallar 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 documentación 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 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 automáticamente a tu proyecto con la función de editor de proyecto de IAM.
  • Se encuentra habilitada de manera predeterminada en todas las instancias que se crearon con la herramienta de línea de comandos de gcloud y GCP Console. Puedes anular esto especificando otra cuenta de servicio cuando creas la instancia o inhabilitando explícitamente 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 Platform Console, puedes especificar qué cuenta de servicio utilizará la instancia cuando llame a las API de GCP. La instancia se configurará automáticamente con los siguientes niveles de acceso:

  • Acceso de solo lectura a Google 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 configurar el nivel de acceso completo de cloud-platform en la instancia y, luego, otorgar funciones de IAM a la cuenta de servicio para limitar su acceso de forma segura. Consulta Permisos de la cuenta de servicio para más detalles.

Cuando creas una instancia mediante una solicitud a la API directamente sin usar la herramienta de línea de comandos de gcloud o Google Cloud Platform Console, la cuenta de servicio predeterminada no tiene habilitada la instancia. Sin embargo, aún puedes habilitar la cuenta de servicio predeterminada especificándola 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 manera predeterminada, la cuenta obtiene automáticamente la función de editor de 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 Google Compute Engine realice sus 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 propiedad 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 manera predeterminada, a la cuenta se le otorga automáticamente la función compute.serviceAgent en tu proyecto.

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 definen los alcances de OAuth predeterminados para las solicitudes que se realizan a través de la herramienta de 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. Sin embargo, no se extienden a otros protocolos de autenticación como gRPC.

La práctica recomendada es configurar el nivel de acceso completo de cloud-platform en la instancia y, luego, limitar de forma segura el acceso de la cuenta de servicio mediante 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.

Existen muchos niveles de acceso entre los que puedes elegir, pero también puedes configurar directamente el nivel de acceso de cloud-platform, que es un alcance de OAuth para todos los servicios de Cloud Platform, y, luego, otorgarle funciones de IAM a la cuenta de servicio a fin de limitar su acceso de forma segura.

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 Cloud Platform.

Por otro lado, si otorgas un alcance más restrictivo a la instancia, como el alcance de solo lectura de Cloud Storage (https://www.googleapis.com/auth/devstorage.read_only), y configuras la función de administrador roles/storage.objectAdmin en la cuenta de servicio, entonces, de manera predeterminada, las solicitudes de la herramienta de gcloud y las bibliotecas cliente no podrán administrar los objetos de Google Cloud Storage desde esa instancia, aunque hayas otorgado a la cuenta de servicio la función roles/storage.ObjectAdmin. 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.

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 alcances 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 a una cuenta de servicio las funciones de IAM para administrar los objetos de Google Cloud Storage o para administrar los depósitos de Google 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 una vez que otorgues 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 alcances de OAuth predeterminados para las solicitudes que se realizan a través de la herramienta de 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.

Niveles de 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 alcances de OAuth predeterminados que se usan en las solicitudes de la herramienta de gcloud o las bibliotecas cliente. Ten en cuenta que no tienen ningún efecto cuando se realizan solicitudes no autenticadas 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 completo de cloud-platform en la instancia, luego limitar de forma segura el acceso a la API de la cuenta de servicio con funciones de 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 efecto si no habilitaste la API relacionada en el proyecto al que pertenece la cuenta de servicio. Por ejemplo, otorgar un nivel de acceso para Google Cloud Storage en una instancia de máquina virtual 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 niveles de acceso:

  • https://www.googleapis.com/auth/cloud-platform: acceso completo a todos los recursos de Google Cloud Platform
  • 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 Google 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