Cuentas de servicio

En esta página, se explican las cuentas de servicio, los tipos de cuentas de servicio y las funciones de IAM disponibles para las cuentas de servicio.

Antes de comenzar

  • Comprende los conceptos básicos de IAM.

¿Qué son las cuentas de servicio?

Una cuenta de servicio es un tipo especial de cuenta que usa una aplicación o una instancia de máquina virtual (VM), no una persona. Las aplicaciones usan cuentas de servicio para realizar llamadas autorizadas a la API, ya sea autenticadas como la cuenta de servicio en sí o como usuarios de Google Workspace o Cloud Identity a través de delegación de todo el dominio.

Por ejemplo, una VM de Compute Engine puede ejecutarse como una cuenta de servicio, y esa cuenta puede obtener permisos para acceder a los recursos que necesita. De esta forma, la cuenta de servicio es la identidad del servicio y los permisos de la cuenta de servicio controlan los recursos a los que tiene acceso el servicio.

Una cuenta de servicio se identifica por su dirección de correo electrónico, que es única a la cuenta.

Diferencias entre una cuenta de servicio y una cuenta de usuario

Las cuentas de servicio difieren de las cuentas de usuario en algunos aspectos clave:

  • Las cuentas de servicio no tienen contraseñas y no pueden acceder a través de navegadores ni cookies.
  • Las cuentas de servicio están asociadas con pares de claves RSA privadas/públicas que se usan para la autenticación de Google.
  • Puedes permitir que otros usuarios o cuentas de servicio actúen en nombre de una cuenta de servicio.
  • Las cuentas de servicio no son miembros de tu dominio de Google Workspace, a diferencia de las cuentas de usuario. Por ejemplo, si compartes elementos con todos los miembros de tu dominio de Google Workspace, no se compartirán con las cuentas de servicio. Del mismo modo, los administradores de Google Workspace o Cloud Identity no pueden ser propietarios ni administradores de ningún elemento creado por una cuenta de servicio. Esto no se aplica cuando se usa la delegación de todo el dominio, ya que las llamadas a la API están autorizadas como usuario suplantado, no como la cuenta de servicio.

Claves de cuenta de servicio

Cada cuenta de servicio está asociada con dos conjuntos de pares de claves RSA públicas/privadas que se usan para autenticarse en Google: claves administradas por Google y claves administradas por el usuario.

Claves administradas por Google

Los pares de claves administradas por Google implican que Google almacena las partes pública y privada de la clave, que las rota con regularidad (cada clave se puede usar para firmar por un máximo de dos semanas) y que la clave privada siempre se mantiene guardada y nunca es accesible directamente. IAM permite que las API usen estas claves para firmar en nombre de la cuenta de servicio. Consulta Crea credenciales para cuentas de servicio de corta duración si deseas obtener más información.

Claves administradas por el usuario

Los pares de claves administradas por el usuario implican que eres propietario de la parte pública y privada de un par de claves. Puedes crear uno o más pares de claves administradas por el usuario (también conocidas como claves “externas”) que se pueden usar desde fuera de Google Cloud. Google solo almacena la parte pública de una clave administrada por el usuario.

Además, puedes crear una clave pública en el formato adecuado y subirla a Google. Una vez allí, se asociará de forma permanente a la cuenta de servicio especificada. Cuando necesitas realizar operaciones de firmado en nombre de esa cuenta de servicio, como durante la creación de claves de la cuenta de servicio, se usa la clave pública que se subió.

La porción privada de un par de claves administradas por el usuario se usa con mayor frecuencia con las credenciales predeterminadas de la aplicación. Luego, la clave privada se usa para autenticar aplicaciones de servidor a servidor.

En el caso de las claves administradas por el usuario, eres responsable de la seguridad de la clave privada y otras operaciones de administración, como la rotación de claves. Las claves administradas por el usuario se pueden administrar con la API de IAM, la herramienta de línea de comandos de gcloud o la página de cuentas de servicio en Google Cloud Console. Puedes crear hasta 10 claves de cuentas de servicio por cuenta de servicio a fin de facilitar la rotación de claves.

Considera usar Cloud Key Management Service (Cloud KMS) para administrar tus claves de forma segura.

Evita las claves administradas por el usuario

Las claves administradas por el usuario son credenciales muy potentes y pueden representar un riesgo de seguridad si no se administran de forma adecuada.

Para limitar su uso, aplica la Restricción de políticas de la organización constraints/iam.disableServiceAccountKeyCreation a proyectos, carpetas o, incluso, a toda tu organización. Después de aplicar la restricción, puedes habilitar las claves administradas por el usuario en ubicaciones bien controladas para minimizar el riesgo potencial causado por las claves no administradas.

Tipos de cuentas de servicio

Cuentas de servicio administradas por el usuario

Puedes crear cuentas de servicio administradas por el usuario en tu proyecto con la API de IAM, Cloud Console o la herramienta de línea de comandos de gcloud. Eres responsable de administrar y proteger estas cuentas.

De forma predeterminada, puedes crear hasta 100 cuentas de servicio administradas por el usuario en un proyecto. Si esta cuota no satisface tus necesidades, puedes usar Cloud Console para solicitar un aumento de cuota. Las cuentas de servicio predeterminadas que se describen en esta página no se consideran para esta cuota.

Cuando creas una cuenta de servicio administrada por el usuario en tu proyecto, debes elegir un nombre para esta. Este nombre aparecerá en la dirección de correo electrónico que identifica a la cuenta de servicio, en el que se usa el siguiente formato:

service-account-name@project-id.iam.gserviceaccount.com

Cuentas de servicio predeterminadas

Cuando usas algunos servicios de Google Cloud, estos crean cuentas de servicio administradas por el usuario que permiten que el servicio implemente trabajos que acceden a otros recursos de Google Cloud. Estas cuentas se conocen como cuentas de servicio predeterminadas.

Las cuentas de servicio predeterminadas te ayudan a comenzar a usar los servicios de Google Cloud. Para las cargas de trabajo de producción, te recomendamos crear tus propias cuentas de servicio administradas por el usuario y otorgar las funciones adecuadas a cada una.

Cuando se crea una cuenta de servicio predeterminada, se le otorga la función de editor (roles/editor) en tu proyecto de forma automática. Esta función incluye una gran cantidad de permisos. Para respetar el principio de privilegio mínimo, te recomendamos inhabilitar la concesión automática de funciones. Para ello, agrega una restricción a la política de tu organización o revoca la función de editor de forma manual. Si inhabilitas o revocas la concesión de la función, debes decidir qué funciones se deben otorgar a las cuentas de servicio predeterminadas.

En la siguiente tabla, se enumeran los servicios que crean cuentas de servicio predeterminadas:

Servicio Nombre de la cuenta de servicio Dirección de correo electrónico
App Engine y cualquier servicio de Google Cloud que use App Engine Cuenta de servicio predeterminada de App Engine project-id@appspot.gserviceaccount.com
Compute Engine y cualquier servicio de Google Cloud que use Compute Engine Cuenta de servicio predeterminada de Compute Engine project-number-compute@developer.gserviceaccount.com

Cuentas de servicio administradas por Google

Algunos servicios de Google Cloud necesitan acceso a tus recursos para actuar en tu nombre. Por ejemplo, cuando usas Cloud Run para ejecutar un contenedor, el servicio necesita acceder a cualquier tema de Pub/Sub que pueda activarlo.

A fin de satisfacer esta necesidad, Google crea y administra cuentas de servicio para muchos servicios de Google Cloud. Estas cuentas de servicio se conocen como cuentas de servicio administradas por Google. Es posible que veas cuentas de servicio administradas por Google en la política de IAM de tu proyecto y en los registros de auditoría.

Por ejemplo:

  • Agente de servicio de las API de Google Es probable que el proyecto contenga una cuenta de servicio llamada Agente de servicio de las API de Google, con una dirección de correo electrónico que use el siguiente formato: project-number@cloudservices.gserviceaccount.com

    Esta cuenta de servicio ejecuta procesos internos de Google en tu nombre. Se le otorga de forma automática la función de editor (roles/editor) en el proyecto.

  • Administrador de funciones para cuentas de servicio administradas por Google. Tus registros de auditoría para IAM pueden hacer referencia a la cuenta de servicio service-agent-manager@system.gserviceaccount.com.

    Esta cuenta de servicio administra las funciones que se otorgan a otras cuentas de servicio administradas por Google. Solo se puede ver en los registros de auditoría.

    Por ejemplo, si usas una API nueva, Google puede crear de forma automática una cuenta de servicio administrada por Google nueva y otorgar funciones a la cuenta de servicio en el proyecto. Si otorgas estas funciones, se genera una entrada de registro de auditoría, que muestra que service-agent-manager@system.gserviceaccount.com estableció la política de IAM para el proyecto.

  • Otras cuentas de servicio administradas por Google. Tu proyecto puede contener otras cuentas de servicio administradas por Google que actúan en nombre de servicios individuales. Estas cuentas de servicio se suelen denominar agentes de servicio. Es posible que se otorguen funciones automáticamente a los agentes de servicio. Los nombres de tales funciones suelen terminar en serviceAgent.

    Para ver una lista completa de los agentes de servicio y las funciones que se otorgan de forma automática a cada uno de ellos, consulta Agentes de servicio.

Permisos de las cuentas de servicio

Además de ser una identidad, una cuenta de servicio es un recurso que viene con políticas de IAM adjuntas. Estas políticas determinan quién puede usar la cuenta de servicio.

Por ejemplo, Alice puede tener la función de editor en una cuenta de servicio y Bob puede tener la función de visualizador en una cuenta de servicio. Funciona de la misma forma que la asignación de funciones en cualquier otro recurso de Google Cloud.

A las cuentas de servicio predeterminadas de Compute Engine y App Engine se les asigna la función de editor en el proyecto cuando son creadas para que el código que se ejecuta en tu app o instancia de VM tenga los permisos necesarios. En este caso, las cuentas de servicio son identidades que obtienen la función de editor para un recurso (proyecto).

Si deseas permitir que tu aplicación acceda a un depósito de Cloud Storage, debes otorgar a la cuenta de servicio (que tu aplicación usa) los permisos para leer el depósito de Cloud Storage. En este caso, la cuenta de servicio es la identidad a la que le otorgas permisos para otro recurso (el depósito de Cloud Storage).

La función de usuario de cuenta de servicio

Puedes otorgar la función de usuario de cuenta de servicio (roles/iam.serviceAccountUser) a nivel de proyecto a todas las cuentas de servicio del proyecto, o a nivel de cuenta de servicio.

  • Si se otorga la función de usuario de cuenta de servicio a un usuario para un proyecto, este tendrá acceso a todas las cuentas de servicio del proyecto, incluidas las cuentas de servicio que se creen en el futuro.

  • Otorgar la función de usuario de cuenta de servicio a un usuario para una cuenta de servicio específica solo le otorga a un usuario acceso a esa cuenta de servicio.

Los usuarios que tengan la función de usuario de cuenta de servicio en una cuenta de servicio pueden usarla para acceder de forma indirecta a todos los recursos a los que tiene acceso la cuenta de servicio. Por ejemplo, si una cuenta de servicio tiene la función de administrador de Compute (roles/compute.admin), un usuario que tiene la función de usuarios de cuenta de servicio (roles/iam.serviceAccountUser) en esa cuenta de servicio puede actuar como la cuenta de servicio para iniciar una instancia de Compute Engine. En este flujo, el usuario actúa en nombre de la cuenta de servicio para realizar cualquier tarea con sus funciones y permisos otorgados.

Para obtener más información sobre cómo otorgar funciones a los usuarios en cuentas de servicio, consulta Administra la suplantación de identidad de cuentas de servicio.

Las cuentas de servicio representan la seguridad a nivel de servicio. La seguridad del servicio se determina según las personas que tienen funciones de IAM que permiten administrar y usar las cuentas de servicio, y las personas que tienen claves externas privadas para esas cuentas de servicio. Las siguientes son prácticas recomendadas para garantizar la seguridad:

  • Usa la API de IAM para auditar las cuentas de servicio, las claves y las políticas en esas cuentas de servicio.
  • Si tus cuentas de servicio no necesitan claves externas, bórralas.
  • Si los usuarios no necesitan permiso para administrar o usar cuentas de servicio, quítalos de la política de IAM aplicable.
  • Asegúrate de que las cuentas de servicio tengan la menor cantidad de permisos posible. Usa las cuentas de servicio predeterminadas con precaución, ya que se les otorga de forma automática la función de editor (roles/editor) en el proyecto.

Para obtener más información sobre las recomendaciones, consulta Comprende las cuentas de servicio.

La función creador del token de la cuenta de servicio

Esta función permite actuar en nombre de cuentas de servicio para crear tokens de acceso OAuth2, firmar BLOB o JWT.

La función actor de la cuenta de servicio

Esta función es obsoleta. Si necesitas ejecutar operaciones como la cuenta de servicio, usa la función de usuario de cuenta de servicio. Para proporcionar de manera efectiva los mismos permisos que el actor de la cuenta de servicio, deberías otorgar también la función creador del token de la cuenta de servicio.

Permisos de acceso

Los permisos de acceso son el método heredado de especificar permisos para tu VM. Antes de que existieran las funciones de IAM, los niveles de acceso eran el único mecanismo para otorgarles permisos a cuentas de servicio. Aunque ya no son la forma principal de otorgar permisos, todavía debes determinar niveles de acceso cuando configuras una instancia para que se ejecute como una cuenta de servicio. Para obtener más información sobre los alcances de acceso, consulta la documentación de Google Compute Engine.

Credenciales de cuentas de servicio de corta duración

Puedes crear credenciales de corta duración que te permitan asumir la identidad de una cuenta de servicio de Google Cloud. Estas credenciales se pueden usar para autenticar las llamadas a la API de Google Cloud o a otras API que no sean de Google.

El caso práctico más común para estas credenciales es delegar de forma temporal el acceso a los recursos de Google Cloud en diferentes proyectos, organizaciones o cuentas. Por ejemplo, en lugar de proporcionarle a un emisor externo credenciales permanentes de una cuenta de servicio con muchos privilegios, se le puede otorgar un acceso temporal de emergencia. Como alternativa, un emisor externo puede actuar en nombre de una cuenta de servicio designada con menos permisos sin necesidad de tener las credenciales de una cuenta de servicio con más privilegios.

A fin de obtener más información, consulta Crea credenciales de corta duración para las cuentas de servicio.

Federación de Workload Identity

Puedes otorgar identidades a partir de una carga de trabajo que se ejecuta fuera de Google Cloud, como en Amazon Web Services (AWS) o Microsoft Azure, para brindarles la capacidad de actuar como cuentas de servicio. Esto te permite acceder a los recursos directamente mediante el uso de credenciales de corta duración, en lugar de usar una clave de cuenta de servicio.

Para obtener más información, consulta Federación de Workload Identity.

Credenciales predeterminadas de la aplicación

Las credenciales predeterminadas de la aplicación son un mecanismo que facilita el uso de cuentas de servicio cuando se opera dentro y fuera de Google Cloud, así como en varios proyectos de Google Cloud. El caso práctico más común es probar código en una máquina local, migrar a un proyecto de desarrollo en Google Cloud y, luego, migrar a un proyecto de producción en Google Cloud. El uso de las credenciales predeterminadas de la aplicación garantiza que la cuenta de servicio funcione sin problemas. Cuando se prueba en tu máquina local, usa una clave de cuenta de servicio almacenada de forma local, pero cuando se ejecuta en Compute Engine, usa la cuenta de servicio predeterminada de Compute Engine del proyecto. Para obtener más información, consulta Credenciales predeterminadas de la aplicación.

Pasos siguientes

Para obtener más recomendaciones sobre cómo usar las cuentas de servicio, consulta Comprende las cuentas de servicio.

Lee las siguientes guías para obtener más información: