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

¿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 a la API autorizadas.

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.
  • Se pueden otorgar permisos de Cloud IAM para 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 G Suite, a diferencia de las cuentas de usuario. Por ejemplo, si compartes elementos con todos los miembros de tu dominio de G Suite, estos no se compartirán con las cuentas de servicio. Del mismo modo, los administradores de G Suite no pueden ser propietarios ni administradores de ningún elemento creado por una 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 la parte pública y privada de la clave; las rota con regularidad (cada clave se puede usar para firmar un máximo de dos semanas), y la clave privada siempre se almacena en un depósito y nunca es accesible de forma directa. Cloud IAM permite que las API usen estas claves para firmar en nombre de la cuenta de servicio. Consulta Crea credenciales para cuenta de servicio de corta duración si deseas obtener más información.

Claves administradas por el usuario

beta feature Uploading public keys for service accounts

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, donde está asociada permanentemente con la cuenta de servicio especificada. Cuando necesites realizar operaciones de firma en nombre de esa cuenta de servicio, como al crear claves de cuenta de servicio, se usará la clave pública cargada.

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.

Para 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 Cloud 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

Cuando creas un nuevo proyecto de Google Cloud con Cloud Console, si la API de Compute Engine está habilitada para tu proyecto, se crea una cuenta de servicio de Compute Engine de forma predeterminada. Se la puede identificar con la siguiente dirección de correo electrónico:

PROJECT_NUMBER-compute@developer.gserviceaccount.com

Si tu proyecto contiene una aplicación de App Engine, la cuenta de servicio de App Engine se crea en tu proyecto de forma predeterminada. Se la puede identificar con la siguiente dirección de correo electrónico:

PROJECT_ID@appspot.gserviceaccount.com

Si creas una cuenta de servicio en tu proyecto, le pondrás nombre a la cuenta de servicio y se le asignará una dirección de correo electrónico con el siguiente formato:

SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

Puedes crear hasta 100 cuentas de servicio por proyecto (incluida la cuenta de servicio predeterminada de Compute Engine y la cuenta de servicio de App Engine) mediante la API de IAM, Cloud Console o la herramienta de línea de comandos de gcloud. Estas cuentas de servicio predeterminadas y las que creas de forma explícita son las cuentas de servicio administradas por el usuario.

Cuentas de servicio administradas por Google

Además de las cuentas de servicio administradas por el usuario, es posible que veas algunas cuentas de servicio adicionales en la política de IAM de tu proyecto o en Cloud Console. Estas cuentas de servicio son creación y propiedad de Google. Estas cuentas representan diferentes servicios de Google y a cada una se le otorgan funciones de IAM de forma automática para acceder a tu proyecto de Google Cloud.

Cuenta de servicio de las API de Google

Un ejemplo de una cuenta de servicio administrada por Google es una cuenta de servicio de API de Google a la que se identifica con la siguiente dirección de 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 y no aparece en la sección Cuentas de servicio de Cloud 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 Cloud Console. La cuenta de servicio solo se borra cuando se borra el proyecto. Los servicios de Google dependen de que la cuenta tenga acceso a tu proyecto. Por este motivo, no debes quitar o cambiar la función de la cuenta de servicio en tu proyecto.

Permisos de cuenta 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 para 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, el usuario 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 Configura la propiedad y el acceso a una cuenta 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 Cloud 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 recomendaciones para garantizar la seguridad:

  • Usa la API de Cloud IAM para auditar las cuentas de servicio, las claves y las políticas de 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ítalas de la política de Cloud IAM aplicable.

Para obtener más información sobre las prácticas recomendadas, consulta Comprender 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.

Access scopes

Los niveles 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 acceso de emergencia. Como alternativa, un emisor externo puede actuar en nombre de una cuenta de servicio con permisos limitados sin necesitar las credenciales de una cuenta de servicio con privilegios mayores.

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

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.

Qué sigue

Para obtener prácticas recomendadas sobre cómo usar las cuentas de servicio, consulta Comprender las cuentas de servicio.

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