Comprender las cuentas de servicio

Contexto

Una cuenta de servicio es un tipo especial de Cuenta de Google que pertenece a tu aplicación o a una máquina virtual (VM) en lugar de a un usuario final individual. Tu aplicación toma la identidad de la cuenta de servicio para llamar a las API de Google a fin de que los usuarios no se involucren de forma directa. Una cuenta de servicio puede tener cero o más parejas de claves de cuenta de servicio. Estas se usan en la autenticación en Google.

Una vez que decides que necesitas una cuenta de servicio, puedes hacerte las siguientes preguntas para entender cómo la usarás:

  • ¿A qué recursos puede acceder la cuenta de servicio?
  • ¿Qué permisos necesita la cuenta de servicio?
  • ¿Dónde se ejecutará el código que toma la identidad de la cuenta de servicio: en Google Cloud Platform o de forma local?

Usa el siguiente diagrama de flujo para descubrir las respuestas a las preguntas antes mencionadas:

Diagrama de flujo de la cuenta de servicio

Una de las características de las cuentas de servicio de IAM es que puedes usarlas como recurso y como identidad.

Cuando usas la cuenta de servicio como una identidad, puedes asignarle una función y permitirle acceder a un recurso (como un proyecto).

Cuando la usas como un recurso, puedes permitirle a un usuario el acceso a esa cuenta de servicio. Puedes otorgarle a un usuario las funciones de propietario, editor, lector, o usuario de cuenta de servicio para acceder a la cuenta de servicio.

Otorga acceso a las cuentas de servicio

Otorgarle a una cuenta de servicio acceso a un recurso es similar a otorgarle acceso a cualquier otra identidad. Por ejemplo, si ejecutas una aplicación en Google Compute Engine y deseas que solo acceda a crear objetos en Google Cloud Storage. Puedes crear una cuenta de servicio para la aplicación y otorgarle la función de Creador de objetos de almacenamiento. En el siguiente diagrama, se ilustra este ejemplo:

Diagrama de flujo de la cuenta de servicio

Para obtener más información, consulta Otorga funciones a las cuentas de servicio.

Actúa como una cuenta de servicio

Supongamos que tienes un trabajo de gran extensión y que tus empleados tienen permiso para iniciarlo. No quieres que el trabajo se interrumpa cuando el último empleado en iniciarlo se vaya de la empresa.

La forma de solucionar este problema es con la creación de una cuenta de servicio para iniciar y detener el trabajo. Puedes hacerlo con los siguientes pasos:

  1. Crea una cuenta de servicio.

  2. Otorga la función de usuario de cuenta de servicio (iam.serviceAccountUser) de la cuenta de servicio a tus empleados que necesitan permiso para empezar el trabajo. En este caso, la cuenta de servicio es el recurso.

  3. Otorga la función de administrador de instancias de procesamiento (roles/compute.instanceAdmin.v1) a los mismos empleados.

  4. Ahora, los empleados pueden crear instancias de Compute Engine que administran la cuenta de servicio, se conectan a ella y usan la cuenta de servicio para empezar el trabajo. Por ejemplo:

    gcloud compute instances create my-instance --scopes=cloud-platform \
    --service-account=my-service-account@test9q.iam.gserviceaccount.com \
    --zone=us-central1-a
    

Para obtener más información, consulta la función usuario de la cuenta de servicio.

Migra datos a Google Cloud Platform

Supongamos que procesas datos en otro proveedor de servicios en la nube y quieres transferir los datos procesados a Google Cloud Platform. Puedes usar la cuenta de servicio desde las máquinas virtuales en la nube externa para enviar los datos a Google Cloud Platform. Para hacer esto, debes crear y descargar una clave de cuenta de servicio cuando creas la cuenta de servicio y luego usar esa clave desde el proceso externo para llamar a las API de Cloud Platform.

Haz un seguimiento de las cuentas de servicio

Con el paso del tiempo, a medida que creas más y más cuentas de servicio, quizás pierdas de vista para qué se usa cada cuenta de servicio.

El nombre comercial de una cuenta de servicio es una buena forma de capturar información adicional sobre la cuenta, como su propósito o una persona de contacto para ella. Para las cuentas de servicio nuevas, puedes propagar el nombre comercial cuando creas la cuenta de servicio. Para las cuentas de servicio ya existentes, usa el método serviceAccounts.update() a fin de modificar el nombre comercial.

Borra y vuelve a crear cuentas de servicio

Es posible borrar una cuenta de servicio y luego crear una cuenta de servicio nueva con el mismo nombre. Usar el nombre de una cuenta de servicio que se borró podría ocasionar un comportamiento inesperado.

Cuando borras una cuenta de servicio, las vinculaciones de funciones no se borran de inmediato. Si creas una cuenta de servicio nueva con el mismo nombre de una cuenta de servicio borrada hace poco, las vinculaciones anteriores todavía podrían existir. Sin embargo, no se aplicarán a la cuenta de servicio nueva incluso si ambas cuentas tienen la misma dirección de correo electrónico. Este comportamiento sucede porque las cuentas de servicio obtienen un ID único dentro de Cloud IAM en el momento de su creación. De manera interna, todas las vinculaciones de funciones se otorgan mediante estos ID y no con la dirección de correo electrónico de la cuenta de servicio. Por esta razón, cualquier vinculación de funciones que existía para una cuenta de servicio que se borró no se aplica a la nueva cuenta de servicio que usa la misma dirección de correo electrónico.

A fin de evitar confusiones, sugerimos usar nombres únicos para las cuentas de servicio. Si esto no es posible, puedes otorgarle una función a la nueva cuenta de servicio de la siguiente forma:

  1. Quita de manera explícita cualquier vinculación mediante la otorgación de esa función a la cuenta de servicio anterior.
  2. Vuelve a otorgarle esas funciones a la cuenta de servicio nueva.

Debes quitar las vinculaciones de funciones antes de volver a agregarlas. Otorgar la función otra vez no dará resultado, ya que le otorgará la función a la cuenta de servicio anterior que se borró.

Otorga permisos mínimos a las cuentas de servicio.

Solo deberías otorgarle a la cuenta de servicio los permisos mínimos necesarios para que logre su objetivo. A fin de obtener más información, consulta Otorga funciones a una cuenta de servicio para recursos específicos.

Cuando les otorgas permisos a los usuarios a fin de que accedan a una cuenta de servicio, ten en cuenta que ese usuario puede acceder a todos los recursos para los que esa cuenta de servicio tiene permisos. Por esta razón, es importante configurar los permisos de tu cuenta de servicio con cuidado, es decir, ser estricto en cuanto a quién puede actuar como cuenta de servicio en tu equipo.

Los usuarios con funciones de IAM para actualizar las instancias de App Engine y Compute Engine (como implementador de App Engine o administrador de instancia de procesamiento) pueden ejecutar código de manera efectiva mientras la cuenta de servicio se usa para ejecutar estas instancias y, de forma indirecta, obtener acceso a todos los recursos a los que tiene acceso la cuenta de servicio. De manera similar, el acceso SSH a una instancia de Compute Engine puede proporcionar la habilidad de ejecutar código como esa instancia.

Administra claves de cuenta de servicio

Existen dos tipos de claves de cuenta de servicio:

  • Claves administradas por GCP. Los servicios de Cloud Platform como App Engine y Compute Engine usan estas claves. No pueden descargarse y se rotan y usan de forma automática para acceder por un máximo de hasta dos semanas. El proceso de rotación es probabilístico. El uso de la nueva clave mejorará y empeorará de manera gradual durante el ciclo de vida de la clave. Recomendamos almacenar en la caché la clave pública configurada para la cuenta de servicio por lo menos por 24 horas a fin de asegurarte de que siempre tendrás acceso a la clave actual.

  • Claves administradas por el usuario. El usuario puede crear, descargar y administrar estas claves. Expiran luego de 10 años de su creación.

Para las claves administradas por el usuario, debes asegurarte de que tienes procesos configurados a fin de cumplir con los requisitos de administración de claves como los siguientes:

  • Almacenamiento de claves
  • Distribución de claves
  • Revocación de claves
  • Rotación de claves
  • Protección de claves contra usuarios no autorizados
  • Recuperación de claves

Cualquiera con acceso a las claves también podrá acceder a los recursos mediante la cuenta de servicio. Siempre evita que los desarrolladores registren claves en el código fuente o en el directorio de Descargas.

Para mejorar la seguridad de las claves, sigue las siguientes pautas:

Usa cuentas de servicio con Compute Engine

Las instancias de Compute Engine necesitan ejecutarse como cuentas de servicio para tener acceso a otros recursos de Cloud Platform. Para asegurarte de que tus instancias de Compute Engine sean seguras, ten en cuenta lo siguiente:

  • Puedes crear VM en el mismo proyecto con diferentes cuentas de servicio. Para cambiar la cuenta de servicio de una VM una vez creada, usa el método instances.setServiceAccount.

  • Puedes otorgar funciones de IAM a cuentas de servicio para definir a qué tienen acceso. En muchos casos, ya no deberás depender de los alcances. Esto te da la ventaja de modificar los permisos de una cuenta de servicio de una VM sin recrear la instancia.

  • Ya que las instancias dependen de que sus cuentas de servicio tengan acceso a los recursos de Cloud Platform, evita borrar cuentas de servicio cuando todavía las usan instancias en ejecución. Si borras cuentas de servicio, las instancias pueden empezar a fallar en sus operaciones.

Recomendaciones

  • Restringe quién puede actuar como cuenta de servicio. Los usuarios que son usuarios de cuenta de servicio para una cuenta de servicio pueden acceder, de manera indirecta, a todos los recursos a los que tiene acceso la cuenta de servicio. Por lo tanto, ten cuidado cuando otorgas la función de usuario de cuenta de servicio a un usuario.

  • Otórgale a la cuenta de servicio solo los permisos mínimos necesarios para que logre su objetivo. A fin de obtener más información, consulta Otorga funciones a una cuenta de servicio para recursos específicos.

  • Crea cuentas de servicio para cada servicio solo con los permisos requeridos.

  • Usa el nombre comercial de una cuenta de servicio para realizar un seguimiento de las cuentas de servicio. Cuando crees una cuenta de servicio, propaga el nombre comercial con el propósito de esa cuenta de servicio.

  • Define una convención para nombrar tus cuentas de servicio.

  • Implementa procesos para automatizar la rotación de las claves de cuentas de servicio administradas por el usuario.

  • Aprovecha la API de la cuenta de servicio de IAM para implementar la rotación de claves.

  • Audita las cuentas de servicio y claves mediante el método serviceAccount.keys.list() o la página Visor de registros en la consola.

  • No borres cuentas de servicio cuando todavía las usan instancias en ejecución en Google App Engine o Google Compute Engine.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de Cloud Identity and Access Management