A diferencia de los usuarios normales, las cuentas de servicio no tienen contraseñas. En su lugar, las cuentas de servicio usan pares de claves ECDSA para la autenticación. Debido a que la clave privada del par de clave RSA permite que te autentiques como la cuenta de servicio, tener acceso a la clave privada es similar a conocer la contraseña de un usuario. La clave privada se conoce como clave de cuenta de servicio. Las claves de cuentas de servicio son un riesgo de seguridad si no se administran con cuidado.
Las principales amenazas relacionadas con las claves de cuenta de servicio son las siguientes:
Filtración de credenciales: las claves de cuenta de servicio pueden terminar de forma involuntaria en lugares en los que no deben almacenarse. Una persona/entidad que actúa de mala fe puede usar una clave de cuenta de servicio que se haya filtrado para autenticarse y obtener acceso al entorno.
Elevación de privilegios: Si una persona/entidad que actúa de mala fe obtiene acceso a una clave de cuenta de servicio poco segura, es posible que pueda usar la clave para elevar sus privilegios.
Divulgación de información: Las claves de cuenta de servicio pueden divulgar de forma involuntaria datos confidenciales.
No rechazo: Si realizas la autenticación con una clave de cuenta de servicio y permites que la cuenta de servicio realice operaciones en tu nombre, una persona/entidad que actúa de mala fe podría ocultar su identidad y sus acciones.
En esta página, se presentan prácticas recomendadas para administrar, usar y proteger las claves de cuentas de servicio.
Protección contra filtraciones de credenciales
Al igual que un nombre de usuario y una contraseña, las claves de cuenta de servicio son una forma de credencial. Si un usuario puede acceder a una clave de cuenta de servicio válida, puede usarla para autenticarse y acceder a los recursos a los que tiene acceso la cuenta de servicio respectiva.
Las personas/entidades que actúan de mala fe pueden considerar que las claves de cuenta de servicio son más valiosas que una contraseña filtrada. Por ejemplo, es poco probable que el acceso a través de una contraseña filtrada tenga éxito si la cuenta de usuario se configuró para usar la verificación en 2 pasos y las verificaciones de identidad. Por el contrario, es probable que la autenticación con una clave de cuenta de servicio filtrada tenga éxito, ya que las cuentas de servicio no están sujetas a ninguna verificación de acceso adicional.
Las personas/entidades que actúan de mala fe pueden buscar claves de cuenta de servicio de las siguientes maneras:
- Repositorios de código fuente de proyectos de código abierto
- Volcados de datos públicos de servicios incumplidos
Además de las ubicaciones públicas, las personas/entidades que actúan de mala fe pueden buscar claves de cuenta de servicio en ubicaciones privadas que hayan vulnerado. Los ejemplos incluyen:
- Bandejas de entrada de los correos electrónicos
- Archivos compartidos
- Almacenamiento en copias de seguridad
- Directorios temporales del sistema de archivos
Una forma eficaz de disminuir el riesgo de filtraciones de claves de cuenta de servicio es reducir la cantidad de claves en circulación y desincentivar la creación de claves nuevas. En las siguientes secciones, se describe cómo puedes limitar la cantidad de claves de cuenta de servicio en circulación y qué otras medidas pueden ayudarte a limitar el riesgo de filtraciones de cuentas de servicio.
Evita dejar las claves de cuentas de servicio en ubicaciones temporales
Cuando crees una clave de cuenta de servicio, muévela de inmediato a la ubicación donde quieras almacenarla. Asegúrate de no dejar accidentalmente una copia en la carpeta de descarga ni en la papelera de reciclaje de tu computadora.
No pases claves de cuenta de servicio entre usuarios
Cuando implementas una aplicación que requiere una clave de cuenta de servicio, es posible que no tengas el permiso para crearla. En cambio, es posible que debas solicitar a una persona diferente que cree una clave de cuenta de servicio por ti.
No envíes claves de cuenta de servicio a los repositorios de código fuente
Las claves de cuenta de servicio son credenciales y deben protegerse del acceso no autorizado. Si envías una clave de cuenta de servicio a un repositorio de código fuente, hay un mayor riesgo de que los usuarios no autorizados y las personas/entidades que actúan de mala fe puedan acceder a la clave:
Las personas/entidades que actúan de mala fe pueden analizar el código fuente de los repositorios de fuente pública en busca de claves filtradas.
En el futuro, es posible que decidas convertir un repositorio de fuente privada en un repositorio público, sin verificar primero las claves.
Otros miembros del equipo pueden almacenar copias del código fuente en su estación de trabajo.
Cuando trabajes en un código que use una clave de cuenta de servicio, almacena siempre la clave de cuenta de servicio separada del código fuente para reducir el riesgo de enviar accidentalmente la clave al repositorio de origen. En muchos casos, puedes reducir aún más este riesgo si no usas las claves de cuenta de servicio durante el desarrollo y usas tus credenciales personales en lugar de las claves de cuenta de servicio.
No incorpores claves de cuenta de servicio en objetos binarios del programa
Las claves de cuenta de servicio son strings que coinciden con un patrón determinado y se pueden identificar incluso si están incorporadas en otros archivos u objetos binarios. Si una persona/entidad que actúa de mala fe tiene acceso al objeto binario, puede extraer cualquier clave de cuenta de servicio que esté incorporada en el objeto binario.
Los objetos binarios del programa para aplicaciones del servidor pueden estar alojados en repositorios de artefactos o pueden copiarse en estaciones de trabajo para desarrolladores con fines de depuración. Mantener las claves de cuenta de servicio separadas de los objetos binarios del programa ayuda a garantizar que un usuario que puede acceder al objeto binario no obtenga acceso de forma implícita a las credenciales de la cuenta de servicio.
- Para las aplicaciones del cliente, como herramientas, programas de escritorio o apps para dispositivos móviles, no uses cuentas de servicio.
- Para las aplicaciones del servidor, no incorpores claves de cuenta de servicio en el objeto binario. En su lugar, mantén las claves separadas del objeto binario de la aplicación.
Rota las claves de la cuenta de servicio para reducir el riesgo de seguridad causado por claves filtradas
Aunque puedes reducir la probabilidad de filtrar accidentalmente una clave de cuenta de servicio, puede ser difícil eliminar el riesgo por completo.
La rotación de claves es el proceso de reemplazar tus claves existentes con claves nuevas y, luego, invalidar las reemplazadas. Te recomendamos que rotes todas las claves que administras de forma rutinaria, incluidas las claves de tu cuenta de servicio.
La rotación de las claves de cuenta de servicio puede ayudar a reducir el riesgo que presentan las claves filtradas o robadas. Si se filtra una clave, es posible que las personas que actúan de mala fe tarden días o semanas en descubrir la clave. Si rotas las claves de tu cuenta de servicio con regularidad, hay más probabilidades de que las claves filtradas no sean válidas en el momento que una persona/entidad que actúa de mala fe las obtiene.
Usa plazos de vencimiento para permitir que las claves caduquen automáticamente.
De forma predeterminada, las claves de cuenta de servicio que creas tienen un hora de vencimiento de un año y permanecen válidas hasta que las borres. También puedes establecer tu propio tiempo de vencimiento. Establecer una hora de vencimiento para las claves de cuenta de servicio puede limitar el riesgo de seguridad, ya que reduce la vida útil de la credencial persistente. Sin embargo, existen otros riesgos asociados con la configuración de los plazos de vencimiento; por ejemplo, establecer un hora de vencimiento puede hacer que las cargas de trabajo fallen cuando vencen sus claves.
Usa plazos de vencimiento cuando necesites acceso temporal a un sistema que requiera una clave de cuenta de servicio. Por ejemplo, usa los plazos de vencimiento cuando hagas lo siguiente:
- Desarrollar código en un entorno que no sea de producción para una aplicación que solo pueda autenticarse con claves de cuenta de servicio
- Usar una herramienta de terceros que solo pueda autenticarse con claves de cuenta de servicio
Evita usar plazos de vencimiento para estas situaciones:
- Cargas de trabajo de producción En producción, una clave de cuenta de servicio vencida podría causar una interrupción accidental. En su lugar, usa claves que no tengan vencimiento y administra su ciclo de vida con la rotación de claves.
- Cargas de trabajo que no son de producción y que necesitan acceso permanente, como una canalización de integración continua (CI)
- Sistemas de rotación de claves que evitan que una clave se use después de un período específico
Para limitar la validez de las claves de cuenta de servicio, puedes configurar una hora de vencimiento para las claves recién creadas en tu proyecto, organización o carpeta. La hora de vencimiento no se aplica a las claves existentes.
Tener un proceso establecido para rotar las claves de cuenta de servicio también te ayuda a actuar con rapidez si sospechas que se vulneró una clave de cuenta de servicio.
Usa una clave dedicada para cada máquina que ejecute una aplicación
Para ayudarte a reducir las posibles fuentes de actividad sospechosa, crea claves individuales para cada copia de la aplicación. De esta manera, puedes usar el campo serviceAccountKeyName
que muchos servicios agregan a los registros de auditoría para distinguir en qué máquina se originó una actividad.