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. Como la clave privada del par de claves RSA te permite autenticarte 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 las cuentas de servicio suponen un riesgo para la seguridad si no se gestionan con cuidado.
Las principales amenazas relacionadas con las claves de cuenta de servicio son las siguientes:
Filtración de credenciales: las claves de cuentas de servicio pueden acabar por error en lugares donde no deberían almacenarse. Un agente malicioso puede usar una clave de cuenta de servicio filtrada para autenticarse y obtener acceso a tu entorno.
Escalada de privilegios: si un agente pernicioso obtiene acceso a una clave de cuenta de servicio poco segura, puede usarla para aumentar sus privilegios.
Divulgación de información: las claves de cuentas de servicio pueden revelar datos confidenciales por error.
No repudio: al autenticarse mediante una clave de cuenta de servicio y permitir que la cuenta de servicio lleve a cabo operaciones en su nombre, un agente malintencionado podría ocultar su identidad y sus acciones.
En esta página se describen las prácticas recomendadas para gestionar, usar y proteger las claves de cuentas de servicio.
Protegerse frente a la filtración de credenciales
Al igual que los nombres de usuario y las contraseñas, las claves de cuenta de servicio son un tipo 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 tenga acceso la cuenta de servicio correspondiente.
Los agentes perniciosos pueden considerar que las claves de cuenta de servicio son más valiosas que una contraseña filtrada. Por ejemplo, es poco probable que se pueda iniciar sesión con una contraseña filtrada si la cuenta de usuario se ha configurado para usar la verificación en dos pasos y las verificaciones de inicio de sesión. Por el contrario, es probable que la autenticación con una clave de cuenta de servicio filtrada se realice correctamente, ya que las cuentas de servicio no están sujetas a ninguna verificación de inicio de sesión adicional.
Los agentes perniciosos pueden buscar claves de cuentas de servicio de las siguientes formas:
- Repositorios de código fuente de proyectos de software libre.
- Volcados de datos públicos de servicios vulnerados.
Además de las ubicaciones públicas, los agentes perniciosos pueden buscar claves de cuentas de servicio en ubicaciones privadas que hayan puesto en riesgo. Estos son algunos ejemplos:
- Bandejas de entrada de correo electrónico
- Sistemas de archivos compartidos
- Almacenamiento de copias de seguridad
- Directorios del sistema de archivos temporales
Una forma eficaz de reducir el riesgo de que se filtren claves de cuentas de servicio es disminuir el número de claves en circulación y desincentivar la creación de nuevas claves. En las secciones siguientes se describe cómo puedes limitar el número de claves de cuentas de servicio en circulación y qué otras medidas pueden ayudarte a limitar el riesgo de que se filtren cuentas de servicio.
Evitar dejar claves de cuentas de servicio en ubicaciones temporales
Cuando crees una clave de cuenta de servicio, muévela inmediatamente a la ubicación en la que quieras almacenarla. Asegúrate de que no se quede una copia por error en la carpeta de descargas o en la papelera de reciclaje de tu ordenador.
No compartas claves de cuentas de servicio entre usuarios
Cuando implementas una aplicación que requiere una clave de cuenta de servicio, es posible que no tengas permiso para crearla tú mismo. En su lugar, es posible que tengas que pedirle a otra persona que cree una clave de cuenta de servicio por ti.
No envíes claves de cuentas de servicio a repositorios de código fuente
Las claves de cuentas de servicio son credenciales y deben protegerse frente al acceso no autorizado. Si envías una clave de cuenta de servicio a un repositorio de código fuente, aumenta el riesgo de que la clave sea accesible para usuarios no autorizados y agentes malintencionados:
Los agentes malintencionados pueden analizar el código fuente de los repositorios de origen públicos para buscar claves filtradas.
En el futuro, puede que decidas convertir un repositorio de origen privado en público sin comprobar primero si contiene claves.
Otros miembros del equipo pueden almacenar copias del código fuente en su estación de trabajo.
Cuando trabajes en código que utilice una clave de cuenta de servicio, almacénala siempre por separado del código fuente para reducir el riesgo de enviar la clave al repositorio de origen por error. En muchos casos, puedes reducir aún más este riesgo si no usas claves de cuentas de servicio durante el desarrollo y utilizas tus credenciales personales en lugar de claves de cuentas de servicio.
No insertes claves de cuentas de servicio en archivos binarios de programas
Las claves de cuentas de servicio son cadenas que siguen un patrón determinado y se pueden identificar aunque estén insertadas en otros archivos o binarios. Si un agente malintencionado tiene acceso al archivo binario, puede extraer cualquier clave de cuenta de servicio insertada en él.
Los archivos binarios de los programas de las aplicaciones del lado del servidor se pueden alojar en repositorios de artefactos o se pueden copiar en las estaciones de trabajo de los desarrolladores con fines de depuración. Mantener las claves de cuenta de servicio separadas de los archivos binarios del programa ayuda a asegurar que un usuario que puede acceder al archivo binario no obtenga acceso implícito a las credenciales de la cuenta de servicio.
- En el caso de las aplicaciones del lado del cliente, como herramientas, programas de escritorio o aplicaciones móviles, no utilices cuentas de servicio.
- En el caso de las aplicaciones del lado del servidor, no insertes claves de cuentas de servicio en el archivo binario. En su lugar, mantén las claves separadas del archivo binario de la aplicación.
Rotar las claves de las cuentas de servicio para reducir el riesgo de seguridad que provocan las claves filtradas
Aunque puedes reducir la probabilidad de que se filtre accidentalmente una clave de cuenta de servicio, es difícil eliminar el riesgo por completo.
La rotación de claves es el proceso de sustituir las claves que ya tienes por otras nuevas y, a continuación, invalidar las claves sustituidas. Te recomendamos que rotes periódicamente todas las claves que gestionas, incluidas las de tu cuenta de servicio.
Rotar las claves de cuentas de servicio puede ayudar a reducir el riesgo que suponen las claves filtradas o robadas. Si se filtra una clave, los agentes perniciosos pueden tardar días o semanas en descubrirla. Si rotas las claves de tu cuenta de servicio con regularidad, es más probable que las claves filtradas no sean válidas cuando un ciberdelincuente las obtenga.
Usar tiempos de vencimiento para que las claves caduquen automáticamente
De forma predeterminada, las claves de cuenta de servicio que creas tienen un tiempo de vencimiento de un año y siguen siendo válidas hasta que las eliminas. También puedes definir tu propio tiempo de vencimiento. Si defines un tiempo de vencimiento para las claves de cuentas de servicio, puedes limitar el riesgo de seguridad, ya que se reduce el tiempo de vida de la credencial persistente. Sin embargo, hay otros riesgos asociados a la configuración de tiempos de vencimiento. Por ejemplo, si se establece un tiempo de vencimiento, las cargas de trabajo pueden fallar cuando caduquen sus claves.
Usa tiempos de vencimiento cuando necesites acceso temporal a un sistema que requiera una clave de cuenta de servicio. Por ejemplo, usa tiempos de vencimiento cuando hagas lo siguiente:
- Desarrollar código en un entorno que no es de producción para una aplicación que solo puede autenticarse con claves de cuenta de servicio.
- Usar una herramienta de terceros que solo pueda autenticarse con claves de cuentas de servicio.
No uses tiempos de vencimiento en los siguientes casos:
- Cargas de trabajo de producción. En producción, una clave de cuenta de servicio caducada podría provocar una interrupción accidental. En su lugar, usa claves que no caduquen y gestiona su ciclo de vida con la rotación de claves.
- Cargas de trabajo de no producción que necesitan acceso permanente, como un flujo de integración continua (CI).
- Sistemas de rotación de claves que impiden que se use una clave después de un periodo especificado.
Para limitar la validez de las claves de cuenta de servicio, puedes configurar un tiempo de vencimiento para las claves recién creadas en tu proyecto, carpeta u organización. El tiempo de vencimiento no se aplica a las claves que ya tengas.
Tener un proceso establecido para rotar las claves de cuenta de servicio también te ayuda a actuar rápidamente si sospechas que una clave de cuenta de servicio se ha visto comprometida.
Usar una clave específica para cada máquina que ejecute una aplicación
Para acotar las posibles fuentes de actividad sospechosa, crea claves individuales para cada copia de la aplicación. De esta forma, puedes usar el campo serviceAccountKeyName
que muchos servicios añaden a los registros de auditoría para distinguir desde qué máquina se ha originado una actividad.