Cuentas de servicio


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

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

Para obtener información de las prácticas recomendadas para crear y administrar cuentas de servicio, lee la documentación Prácticas recomendadas para trabajar con cuentas de servicio.

Pruébalo tú mismo

Si es la primera vez que usas Google Cloud, crea una cuenta para evaluar el rendimiento de Compute Engine en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.

Probar Compute Engine gratis

¿Qué es una cuenta de servicio?

Una cuenta de servicio es un tipo especial de cuenta que usa una carga de trabajo de aplicación o procesamiento, en lugar de una persona. Las cuentas de servicio se administran a través de la Identity and Access Management (IAM).

Ten en cuenta lo siguiente cuando uses cuentas de servicio con tus VMs:

  • Puedes conectar la misma cuenta de servicio a varias VMs, pero una sola VM puede tener solo una cuenta de servicio.
  • Si conectas la misma cuenta de servicio a varias VM, cualquier cambio posterior que realices en la cuenta de servicio afectará a todas las VMs que usen la cuenta de servicio. Esto incluye cualquier cambio que realices en los roles de IAM otorgados a la cuenta de servicio. Por ejemplo, si quitas una función, todas las VMs que usan la cuenta de servicio pierden los permisos que otorga ese rol.

Cómo usa Compute Engine las cuentas de servicio

Compute Engine usa dos tipos de cuentas de servicio:

Se puede conectar 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. La aplicación usa estas credenciales para la autenticación en las API de Google Cloud y la autorización para acceder a los recursos de Google Cloud. Solo las cuentas de servicio administradas por el usuario se pueden conectar a una instancia, y una instancia solo puede tener una cuenta de servicio conectada. Puedes cambiar la cuenta de servicio que está conectada a una instancia en el momento de la creación o posterior.

La instancia usa las cuentas de servicio administradas por Google para acceder a los procesos internos en tu nombre.

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.

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 distintas: los roles otorgadas a la cuenta de servicio conectada y los permisos de acceso que configuraste 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 tienes una app que lee y escribe archivos en Cloud Storage. Primero debe autenticarse en la API de Cloud Storage. Puedes crear una instancia con el permiso cloud-platform y adjuntar una cuenta de servicio a la instancia. Luego, puedes otorgar roles de Identity and Access Management (IAM) a la cuenta de servicio para otorgarle a tu app acceso a los recursos adecuados. Tu app usa las credenciales de la cuenta de servicio para autenticarse en la API de Cloud Storage sin incorporar ninguna clave secreta ni credencial de usuario en tu instancia, imagen o código de app. Tu app también usa la autorización que proporcionan los roles de IAM en la cuenta de servicio para acceder a los recursos. Para obtener más información de la autorización, consulta 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 creas de forma explícita y la cuenta de servicio predeterminada de Compute Engine.

Cuentas de servicio nuevas

Usa IAM para crear y administrar tus propias cuentas de servicio. Después de crear una cuenta, otórgale roles de IAM y configura instancias para que se ejecuten como 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 cuenta de servicio nueva, consulta Crea una VM que use una cuenta de servicio administrada por el usuario.

Cuenta de servicio predeterminada de Compute Engine

Los proyectos nuevos que tengan habilitada 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 crean de forma automática, con un nombre y una dirección de correo electrónico generados automáticamente, y se agregan a tu proyecto cuando habilitas la API de Compute Engine. Tienes el control total de la cuenta.
  • Se otorga de forma automática el rol de editor básica de IAM, si no inhabilitaste este comportamiento. Puedes modificar los roles de la cuenta de servicio para controlar el acceso de la cuenta de servicio a las APIs de Google.
  • Vinculada de forma predeterminada a todas las VMs que creaste a través de Google Cloud CLI o la consola de Google Cloud. Puedes anular este comportamiento si especificas una cuenta de servicio diferente cuando creas la VM o si especificas de forma explícita que no haya ninguna cuenta de servicio conectada a la VM.

Puedes inhabilitar o 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 de forma accidental la cuenta de servicio predeterminada de Compute Engine, puedes intentar recuperarla en un período de 30 días. Para obtener más información, consulta Borra y recupera cuentas de servicio.

Si la cuenta de servicio predeterminada de Compute Engine se borró hace más de 30 días, puedes intentar recuperar la cuenta de servicio a través de el proceso en Soluciona problemas de cuentas de servicio predeterminadas.

Cuentas de servicio administradas por Google

Estas cuentas de servicio (a veces conocidas como agentes de servicio) las crea y administra Google, y se asignan 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.

No puedes adjuntar cuentas de servicio administradas por Google a una instancia de Compute Engine.

Agente de servicios de las API de Google

Además de la cuenta de servicio predeterminada, todos los proyectos habilitados con Compute Engine tienen un agente de servicio de las API de Google, que se puede identificar a través de el correo electrónico:

PROJECT_NUMBER@cloudservices.gserviceaccount.com

Esta cuenta de servicio está diseñada en específico 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 la consola de Google Cloud. De forma predeterminada, la cuenta recibe el rol de editor de proyecto de manera automática en el proyecto y aparece en la sección IAM de la consola de Google Cloud. Esta cuenta de servicio solo se borra cuando se borra el proyecto. Sin embargo, puedes cambiar los roles otorgados 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, a menos que una recomendación de función sugiera de forma explícita que las modificas.

Agente de servicio de Compute Engine

Todos los proyectos que habilitaron la API de Compute Engine tienen un agente de servicio de Compute Engine, que tiene el siguiente correo electrónico:

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

Esta cuenta de servicio está diseñada en específico 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. Esta cuenta está oculta en la página de IAM en la consola, a menos que selecciones Incluye asignaciones de roles proporcionados por Google. De forma predeterminada, a la cuenta se le otorga el rol 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. Si revocas o cambias los permisos de esta cuenta de servicio, Compute Engine no podrá acceder a las identidades de tus cuentas de servicio en las VM, y es posible que se produzcan interrupciones del software que se ejecuta dentro de tus VM.

Por estos motivos evita hacer modificaciones en las funciones de esta cuenta de servicio tanto como sea posible.

Adjunta una cuenta de servicio a una instancia

Para evitar otorgar permisos excesivos a una aplicación, te recomendamos que crees una cuenta de servicio administrada por el usuario, le otorgues solo las funciones que tu aplicación necesita para funcionar de forma correcta y la conectes a tu instancia de Compute Engine. El código puede usar credenciales predeterminadas de la aplicación para autenticarse con las credenciales que proporciona la cuenta de servicio.

Puedes adjuntar una cuenta de servicio a una instancia de Compute Engine cuando creas la instancia o después. Solo se puede conectar una cuenta de servicio a una instancia a la vez. Si conectas una cuenta de servicio a una instancia que ya tiene una cuenta de servicio adjunta, la cuenta de servicio anterior ya no la usa.

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 tu app no pueda acceder a todas las API que necesita. Para obtener más información, consulta los Permisos de acceso en esta página.

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

Autorización

Cuando configuras una instancia para que se ejecute como una cuenta de servicio, debes determinar el nivel de acceso que tiene la cuenta de servicio a través de los roles de IAM que le otorgas. Si la cuenta de servicio no tiene roles de IAM, no se puede acceder a ningún recurso con la cuenta de servicio 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 gcloud CLI 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 a través de 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, controlar el acceso a la cuenta de servicio con las funciones de IAM.

En resumen:

  • 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.

Tanto los niveles de acceso como las funciones de IAM se describen en detalle en las secciones a continuació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.

Cuando otorgas 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 tendrá la autorización que le otorgará esa función.

Algunas cosas que debes recordar:

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

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

  • 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 los roles de IAM otorgados 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 gcloud CLI 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 a través de OAuth.

Permisos de acceso

Los permisos de acceso son el método heredado que permite especificar autorización para tu instancia. En cambio, definen los niveles predeterminados de OAuth que se usan en las solicitudes de gcloud CLI o las bibliotecas cliente. (Los permisos de acceso no se aplican a las llamadas realizadas a través de gRPC).

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.

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.

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, 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.

Permisos predeterminados

Cuando creas una instancia nueva de Compute Engine, 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
  • El acceso de escritura a Cloud Trace permite que una aplicación que se ejecuta en una VM escriba datos de seguimiento en un proyecto.
    https://www.googleapis.com/auth/trace.append

Prácticas recomendadas sobre los permisos

Hay muchos niveles de acceso disponibles para elegir, pero se recomienda configurar el permiso de acceso cloud-platform, que es un nivel de OAuth para la mayoría de los servicios de Google Cloud y, luego, controlar el acceso de la cuenta de servicio a través de los roles de IAM.

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

Ejemplos de permisos

De acuerdo con la práctica recomendada de los permisos, si habilitaste el nivel de acceso cloud-platform en una instancia y luego otorgaste los siguientes roles 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 de IAM. Las aplicaciones que simulan esa cuenta de servicio no pueden realizar acciones fuera de estos roles a pesar del nivel de acceso de Google Cloud.

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 el rol de administrador roles/storage.objectAdmin en la cuenta de servicio, entonces, de manera predeterminada, las solicitudes desde gcloud CLI y las bibliotecas cliente no podrán administrar los objetos de Cloud Storage desde esa instancia, incluso aunque hayas otorgado el rol 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.

Estos son algunos ejemplos de permisos de acceso:

  • https://www.googleapis.com/auth/cloud-platform Visualiza y administra tus datos en los servicios de Google Cloud del proyecto de Google Cloud especificado.
  • https://www.googleapis.com/auth/compute. 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.

¿Qué sigue?