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. Si compartes elementos de Google Workspace, como documentos o eventos, con todos los miembros de tu dominio de Google Workspace, no se comparten con cuentas de servicio. Del mismo modo, los elementos de Google Workspace que crea una cuenta de servicio no se crean en el dominio de Google Workspace. Como resultado, tu Google Workspace y los administradores de Cloud Identity no pueden ser propietarios ni administrar estos elementos.

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 el uso de claves administradas por el usuario, puedes aplicar las siguientes restricciones de políticas de la organización a una organización, un proyecto o una carpeta:

  • constraints/iam.disableServiceAccountKeyCreation: Evita que los miembros creen claves de cuenta de servicio administradas por el usuario.
  • constraints/iam.disableServiceAccountKeyUpload: Evita que los miembros suban una clave pública para una cuenta de servicio.

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 habilitas o usas algunos servicios de Google Cloud, se 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.

Si tu aplicación se ejecuta en un entorno de Google Cloud que tiene una cuenta de servicio predeterminada, puede usar las credenciales para que la cuenta de servicio predeterminada llame a las API de Google Cloud. De forma alternativa, puedes crear tu propia cuenta de servicio administrada por el usuario y usarla para autenticar. Para obtener más información, consulta Encuentra credenciales de forma automática.

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, en los registros de auditoría o en la página de IAM en Cloud Console.

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 automáticamente a cada uno de ellos, consulta Agentes de servicio.

Ubicaciones de la cuenta de servicio

Cada cuenta de servicio está ubicada en un proyecto. Después de crear una cuenta de servicio, no puedes moverla a un proyecto diferente.

Hay algunas formas de organizar tus cuentas de servicio en proyectos:

  • Crea cuentas de servicio y recursos en el mismo proyecto.

    Con este enfoque, es fácil comenzar a usar las cuentas de servicio. Sin embargo, puede ser difícil realizar un seguimiento de tus cuentas de servicio cuando se distribuyen en muchos proyectos.

  • Centraliza las cuentas de servicio en un proyecto separado.

    Este enfoque requiere una configuración adicional si adjuntas cuentas de servicio a los recursos en otros proyectos, lo que permite que esos recursos usen su cuenta de servicio como su identidad. Sin embargo, este enfoque también facilita la administración de las cuentas de servicio para tu organización, ya que todas tus cuentas de servicio están en el mismo lugar.

    Según la configuración predeterminada, puedes crear hasta 100 cuentas de servicio en un proyecto. Si necesitas crear cuentas de servicio adicionales, solicita un aumento de la cuota.

Permisos de las cuentas de servicio

Las cuentas de servicio son identidades y recursos.

Debido a que las cuentas de servicio son identidades, puedes permitir que una cuenta de servicio acceda a los recursos de tu proyecto si le otorgas una función, al igual que lo harías con cualquier otro miembro. Por ejemplo, si deseas permitir que la cuenta de servicio de tu aplicación acceda a los objetos en un bucket de Cloud Storage, puedes otorgar a la cuenta de servicio la función de visualizador de objetos de almacenamiento (roles/storage.objectViewer) en el bucket.

Sin embargo, las cuentas de servicio también son recursos que aceptan políticas de IAM. Como resultado, puedes permitir que otros miembros accedan a una cuenta de servicio si les otorgas una función en la cuenta de servicio o en uno de los recursos principales de la cuenta de servicio. Por ejemplo, para permitir que un usuario robe la identidad de una cuenta de servicio, puedes otorgarle al usuario la función de usuario de cuenta de servicio (roles/iam.serviceAccountUser) en esta.

Para obtener más información sobre cómo otorgar funciones a los miembros, incluidas las cuentas de servicio, consulta Cómo otorgar, cambiar y revocar el acceso a los recursos.

Para obtener más información sobre cómo otorgar funciones en cuentas de servicio, consulta Administra el robo de identidad de cuentas de servicio.

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.

Permisos de acceso

Los permisos de acceso son un método heredado para especificar los permisos de una instancia de máquina virtual (VM) de Compute Engine. Definen los permisos de OAuth predeterminados que se usan en las solicitudes de la herramienta de gcloud y las bibliotecas cliente.

Google Cloud ahora usa IAM, no permisos de acceso, a fin de especificar los permisos para las instancias de Compute Engine. Sin embargo, aún debes establecer un permiso de acceso cuando configuras una instancia para actuar en nombre de una cuenta de servicio.

Si quieres obtener más información, consulta la documentación de 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 la sección sobre cómo crear credenciales de cuentas de servicio de corta duración.

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.

Credencial predeterminada de la aplicación

Las credenciales predeterminadas de la aplicación son una herramienta que usan las bibliotecas cliente de Google Cloud para descubrir de forma automática las credenciales de la cuenta de servicio. Puedes especificar una clave de cuenta de servicio en una variable de entorno, y las credenciales predeterminadas de la aplicación usan esa clave de cuenta de servicio de forma automática. Si no especificas una clave, las credenciales predeterminadas de la aplicación usan la cuenta de servicio adjunta al recurso que ejecuta tu código o la cuenta de servicio predeterminada para el servicio que ejecuta tu código.

Para obtener más información, consulta Encuentra credenciales automáticamente.

¿Qué sigue?

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: