Las claves de cuenta de servicio se suelen usar para autenticarse en los servicios deGoogle Cloud . Sin embargo, también pueden convertirse en un riesgo de seguridad si no se gestionan correctamente, lo que aumenta la vulnerabilidad a amenazas como la filtración de credenciales, la apropiación de privilegios, la divulgación de información y el no repudio.
En muchos casos, puedes autenticarte con alternativas más seguras a las claves de cuentas de servicio. En esta guía se explica cómo migrar del uso de claves de cuentas de servicio como mecanismo de autenticación principal a alternativas más seguras, con excepciones ocasionales en las que las claves de cuentas de servicio sean realmente necesarias.
Este documento está dirigido a administradores de seguridad que quieran mejorar su estrategia de seguridad reduciendo el uso de claves de cuentas de servicio y utilizando mecanismos de autenticación más seguros. Estos administradores de seguridad pueden ser responsables de la seguridad de las cargas de trabajo de producción, los flujos de trabajo de los desarrolladores y los procesos internos que utilizan claves de cuentas de servicio.
Información general
Para eliminar las claves de cuentas de servicio de las cargas de trabajo, es necesario planificarlo con cuidado para evitar interrupciones accidentales. El siguiente plan de migración se ha diseñado para permitirte aplicar controles centralizados y, al mismo tiempo, minimizar las interrupciones para los desarrolladores.
Este plan de migración incluye tres fases:
- Evaluación: en esta fase, evalúa tu entorno para saber dónde hay claves de cuenta de servicio y si se están usando.
- Planificación: en esta fase, decides qué controles vas a implementar y comunicas el plan de migración a las partes interesadas.
- Implementación: en esta fase, empiezas a refactorizar las cargas de trabajo para autenticarlas con alternativas más seguras a las claves de cuentas de servicio. También puedes desarrollar funciones adicionales para monitorizar continuamente tu entorno y mitigar los riesgos futuros.
Evaluar el uso de las claves de cuenta de servicio
En esta fase, evalúa tu entorno para saber dónde hay claves de cuenta de servicio y si se están usando.
En las siguientes secciones se describe qué datos puedes recoger para entender mejor cómo se usan las claves de cuenta de servicio en tu organización.
Recoger datos sobre el uso clave
Primero, identifica dónde se encuentran las claves de cuentas de servicio y cómo se usan.
Google Cloud proporciona herramientas para comprender el uso de las cuentas de servicio. Estas herramientas te ayudan a determinar qué cuentas de servicio y claves se han usado recientemente para autenticar, qué cuentas de servicio no se han usado en los últimos 90 días y qué cuentas de servicio tienen roles con demasiados privilegios.
Puedes combinar la información de todas estas herramientas para hacerte una idea más clara de cómo se usan las cuentas de servicio y las claves en tu organización. Para ver un ejemplo de cómo combinar información de estas fuentes en toda tu organización, consulta la arquitectura de referencia desplegable en GitHub. Esta arquitectura de referencia agrega datos de varias herramientas y los exporta periódicamente a una tabla de BigQuery para analizarlos.
La arquitectura de referencia implementa una canalización de datos que consulta el Inventario de Recursos de Cloud para identificar las claves de las cuentas de servicio de tu organización. A continuación, el flujo de datos combina esos datos con datos sobre el uso de claves y permisos de la cuenta asociada. La tabla resultante, sa_key_usage
, te ayuda a responder preguntas como las siguientes:
- ¿Cuántas claves persistentes se han creado? Este número puede ser útil como métrica general para monitorizar el progreso a medida que dejas de usar las claves.
- ¿Qué proyectos y cuentas de servicio usan claves? Esta información te ayuda a identificar a los propietarios de las cargas de trabajo que usan claves de cuentas de servicio.
- ¿Qué claves están inactivas? Es probable que puedas eliminar estas claves sin necesidad de que los propietarios de las cargas de trabajo realicen más evaluaciones.
- ¿Qué claves están asociadas a cuentas de servicio que tienen recomendaciones sobre permisos excesivos? Si una clave de cuenta de servicio está asociada a una cuenta de servicio con demasiados privilegios, sobre todo si tiene el rol de propietario, editor o lector, la clave puede ser especialmente peligrosa. Buscar cuentas de servicio que tengan recomendaciones de roles puede ayudarte a identificar qué cuentas de servicio tienen demasiados privilegios. Una vez que hayas identificado estas cuentas de servicio, puedes decidir priorizar estas cargas de trabajo para la migración. También puedes aplicar las recomendaciones de roles para reducir de forma proactiva los permisos excesivos.
Esta canalización de datos se ejecuta a diario y escribe en una tabla de BigQuery con particiones por fecha. Puedes usar esta tabla para investigar cuentas de servicio o claves específicas, o para monitorizar el progreso de las correcciones con una herramienta de panel de control como Looker Studio.
Enriquecer los datos de uso de claves con contexto adicional
Una vez que haya recogido datos sobre el uso de las claves, puede enriquecerlos con fuentes de datos adicionales. Le recomendamos que añada fuentes de datos que ya utilice para hacer un seguimiento de la gobernanza y la procedencia de los recursos. En función de tu gobernanza, puedes añadir datos adicionales como los siguientes:
- Información de propiedad de una base de datos de gestión de configuración (CMDB) o un sistema similar.
- Información de gobernanza configurada en las etiquetas de proyecto, como el equipo o el centro de costes responsable de un proyecto.
- Información del entorno sobre las claves usadas en cargas de trabajo de entornos externos a Google Cloud.
Crear un plan para reducir el uso de claves de cuentas de servicio
Antes de implementar cualquier cambio para reducir el uso de claves de cuentas de servicio, debe determinar qué cargas de trabajo y entornos se verán afectados y cómo aplicará esos cambios. También debes comunicar este plan en toda tu empresa y asegurarte de que los responsables de la carga de trabajo lo apoyen.
En las siguientes secciones se presentan los temas clave que debe abordar tu plan. Tu plan específico variará en función del tamaño de tu organización y de los requisitos específicos de tus cargas de trabajo.
Decide la responsabilidad de los propietarios de las cargas de trabajo actuales
Aunque un equipo de seguridad central puede evaluar qué claves hay, una migración correcta requiere el esfuerzo de los propietarios de las cargas de trabajo. En el caso de las claves que se incluyan en el ámbito de la migración, los propietarios de las cargas de trabajo deben determinar cuál de los métodos de autenticación disponibles se adapta a su caso práctico y, a continuación, llevar a cabo la migración.
Piensa en cómo equilibrar las mejoras de tu postura de seguridad actual con el esfuerzo que deben hacer los propietarios de las cargas de trabajo. En las siguientes secciones se describen dos enfoques de ejemplo: uno que prioriza en gran medida las mejoras en tu postura de seguridad y otro que prioriza en gran medida la minimización del esfuerzo de los propietarios de las cargas de trabajo. Tu enfoque puede variar. Por ejemplo, puedes decidir seleccionar individualmente qué cargas de trabajo están incluidas.
Ejemplo: Se evalúan todas las cargas de trabajo actuales para la migración
Una posible estrategia es aplicar controles de claves de cuentas de servicio a todas las cargas de trabajo actuales y futuras. Para ello, se deben llevar a cabo tareas como las siguientes:
- Colaborar con los propietarios de las cargas de trabajo para evaluar el uso de las cargas de trabajo actuales.
- Exigir a los propietarios de las cargas de trabajo que migren todas las cargas de trabajo que usen claves, a menos que se les haya concedido una excepción.
- Impedir que todas las cargas de trabajo futuras usen claves de cuentas de servicio, a menos que se les haya concedido una excepción.
Este enfoque prioriza las mejoras de tu estrategia de seguridad, pero requiere más esfuerzo por parte de los desarrolladores y los propietarios de las cargas de trabajo a corto plazo. Para llevar a cabo un plan de este tipo, los propietarios de las cargas de trabajo deben comprometerse a participar en la revisión y la refactorización de las cargas de trabajo.
Ejemplo: No se evalúan cargas de trabajo actuales para la migración
Otra opción es permitir que las cargas de trabajo actuales tengan una excepción automática para seguir usando claves de cuenta de servicio y aplicar los nuevos controles solo a las cargas de trabajo futuras.
Este enfoque mejora la postura de seguridad de las cargas de trabajo futuras y minimiza la responsabilidad de los propietarios de las cargas de trabajo actuales. Sin embargo, no mejora la postura de seguridad de las cargas de trabajo actuales.
Identificar los logros rápidos
En tu evaluación, puedes identificar claves que se pueden eliminar de forma segura sin que los propietarios de las cargas de trabajo tengan que hacer más correcciones. Por ejemplo, si una clave no tiene actividad durante 90 días o está relacionada con recursos que ya no están activos, es posible que puedas quitarla de forma segura sin tener que migrar a otro mecanismo de autenticación.
Haz una lista de las claves que cumplan estos criterios. Usarás esta lista durante la fase de implementación para eliminar las claves innecesarias. Antes de añadir una clave a la lista, confirma si hay casos prácticos que requieran la clave de cuenta de servicio con poca frecuencia, como el acceso de producción de emergencia que dependa de las claves de cuenta de servicio.
Planificar dónde aplicar los cambios en las políticas de organización
Para migrar correctamente y dejar de usar claves de cuentas de servicio, debes evitar que se creen claves nuevas. Durante la fase de implementación, aplica la restricción de la política de organización iam.disableServiceAccountKeyCreation
para evitar la creación de claves de cuentas de servicio.
Aunque esta restricción no impide el uso de las claves actuales, puede interrumpir las cargas de trabajo que roten sus claves con regularidad. Antes de empezar la fase de implementación, decide dónde la aplicarás en tu jerarquía de recursos para minimizar las interrupciones.
Puede que prefieras aplicar la restricción inicialmente a nivel de proyecto o carpeta en lugar de a nivel de organización. Por ejemplo, puedes aplicar la restricción a la carpeta que se usa en tu entorno de desarrollo antes de implementarla en las carpetas de producción. En una organización grande con muchos equipos, puedes aplicar la restricción a una carpeta de un solo equipo y, después, aplicarla a otras carpetas a medida que las migres.
Puedes usar políticas de organización con etiquetas para aplicar obligatoriamente políticas de organización de forma condicional a nivel de proyecto o de carpeta.
Diseñar un proceso de excepciones
Aunque el objetivo de esta migración es reducir o eliminar el uso de claves de cuentas de servicio, hay algunos casos prácticos legítimos que requieren claves de cuentas de servicio. Aunque ninguna carga de trabajo requiera claves de cuenta de servicio, es posible que las cargas de trabajo futuras sí lo hagan. Por lo tanto, debes definir un proceso operativo para evaluar y aprobar excepciones en los casos prácticos que requieran claves de cuenta de servicio.
Define un proceso para que los propietarios de cargas de trabajo soliciten una excepción que permita que su carga de trabajo use claves de cuentas de servicio. Asegúrate de que los responsables de tomar la decisión de conceder una excepción tengan los conocimientos técnicos necesarios para validar el caso práctico, consultar con los propietarios de la carga de trabajo qué alternativas más seguras a las claves de cuentas de servicio podrían ser más adecuadas y asesorar a los propietarios de la carga de trabajo sobre las prácticas recomendadas para gestionar las claves de cuentas de servicio.
Comunicar los próximos cambios a los propietarios de las cargas de trabajo
Una vez que hayas diseñado un plan, debes comunicarlo claramente en toda tu organización y asegurarte de que las partes interesadas, especialmente los directivos, estén dispuestas a comprometerse con la migración.
Aunque los detalles específicos de la migración variarán en función de tu organización, te recomendamos que incluyas los siguientes temas en tu plan de comunicación:
- El impacto negativo que pueden tener las claves de cuentas de servicio no seguras en la organización y los motivos que te llevan a migrar de las claves de cuentas de servicio.
- Los nuevos controles de seguridad para evitar la creación de claves de cuentas de servicio y cómo pueden afectar a los procesos actuales.
- Guía para desarrolladores sobre cómo identificar alternativas más seguras a las claves de cuentas de servicio.
- El proceso que deben seguir los equipos para solicitar una excepción que permita usar claves de cuentas de servicio, así como la frecuencia con la que se vuelve a evaluar esta excepción.
- El plazo para aplicar los cambios propuestos.
Colabora con los propietarios de las cargas de trabajo para perfeccionar tu plan y asegurarte de que funcione en toda tu organización.
Implementar controles y refactorizar cargas de trabajo
Una vez que hayas creado un plan y se lo hayas comunicado a los propietarios de las cargas de trabajo, puedes empezar a dejar de usar las claves de cuenta de servicio.
En esta fase, empiezas a refactorizar las cargas de trabajo para autenticarlas con alternativas más seguras a las claves de cuentas de servicio. También puedes desarrollar funciones adicionales para monitorizar tu entorno de forma continua y reducir los riesgos futuros.
En las siguientes secciones se describen los pasos que puedes seguir para refactorizar las cargas de trabajo y eliminar las claves con las mínimas interrupciones posibles. Puedes seguir estos pasos en el orden que quieras, en función de la prioridad y el esfuerzo que requiera tu organización.
Aplicar controles para detener la creación de claves de cuentas de servicio
Para detener la creación de claves de cuentas de servicio, aplica la restricción de la política de la organización iam.disableServiceAccountKeyCreation
.
Sin embargo, antes de aplicar esta restricción, debes añadir etiquetas a los proyectos o carpetas que estarán exentos de la política. Puedes permitir excepciones para las cargas de trabajo que no puedan migrar de las claves de cuenta de servicio o para las cargas de trabajo nuevas que tengan un motivo legítimo para autenticarse solo con claves de cuenta de servicio.
Después de añadir etiquetas a proyectos y carpetas exentos, puedes definir una política de la organización con etiquetas para aplicar la restricción iam.disableServiceAccountKeyCreation
a proyectos y carpetas no exentos.
Para evitar que se creen claves de cuenta de servicio en todos los proyectos y carpetas no exentos, haz lo siguiente:
-
Asegúrate de que tienes el rol Administrador de etiquetas (
roles/resourcemanager.tagAdmin
) y el rol Administrador de políticas de organización (roles/orgpolicy.policyAdmin
) a nivel de organización. Para saber cómo asignar roles a nivel de organización, consulta Gestionar el acceso a proyectos, carpetas y organizaciones. -
A nivel de organización, cree una clave y un valor de etiqueta que utilizará para definir si un recurso debe estar exento de la política de organización. Te recomendamos que crees una etiqueta con la clave
disableServiceAccountKeyCreation
y los valoresenforced
ynot_enforced
.Para saber cómo crear claves y valores de etiquetas, consulta el artículo Crear y definir una etiqueta.
-
Asigne la etiqueta
disableServiceAccountKeyCreation
a la organización y defina su valor comoenforced
. Todos los recursos de la organización heredan este valor de etiqueta, a menos que se sobrescriba con otro valor.Para saber cómo adjuntar etiquetas a los recursos, consulta Adjuntar etiquetas a recursos.
-
En cada proyecto o carpeta que quieras excluir de la política de la organización, añade la etiqueta
disableServiceAccountKeyCreation
y asigna el valornot_enforced
. Si asignas un valor de etiqueta a un proyecto o una carpeta de esta forma, se anula el valor de etiqueta heredado de la organización. -
Crea una política de organización que impida la creación de claves de cuentas de servicio para todos los recursos, excepto los recursos exentos. Esta política debe incluir las siguientes reglas:
-
Configura la restricción
iam.disableServiceAccountKeyCreation
para que no se aplique a ningún recurso con la etiquetadisableServiceAccountKeyCreation: not_enforced
. La condición de esta regla debería tener el siguiente aspecto:"resource.matchTag('ORGANIZATION_ID/disableServiceAccountKeyCreation', 'not_enforced')"
-
Configura la restricción
iam.disableServiceAccountKeyCreation
para que se aplique a todos los demás recursos.
-
Corregir las cargas de trabajo actuales
En cada carga de trabajo que use claves de cuenta de servicio, colabora con los propietarios de la carga de trabajo para elegir e implementar un método de autenticación alternativo.
Cuando accedas a los servicios de Google Cloud mediante la CLI de Google Cloud, las bibliotecas de cliente de Cloud, las herramientas que admiten Credenciales Predeterminadas de Aplicación (ADC) como Terraform o las solicitudes REST, usa el siguiente diagrama para elegir un método de autenticación:
Este diagrama te ayuda a responder las siguientes preguntas:
-
¿Estás ejecutando código en un entorno de desarrollo de un solo usuario, como tu propia estación de trabajo, Cloud Shell o una interfaz de escritorio virtual?
- Si es así, ve a la pregunta 4.
- Si no es así, ve a la pregunta 2.
- ¿Estás ejecutando código en Google Cloud?
- Si es así, ve a la pregunta 3.
- Si no es así, ve a la pregunta 5.
- ¿Ejecutas contenedores en Google Kubernetes Engine?
- Si es así, usa Workload Identity Federation for GKE para asociar cuentas de servicio a pods de Kubernetes.
- Si no es así, asigna una cuenta de servicio al recurso.
-
¿Tu caso práctico requiere una cuenta de servicio?
Por ejemplo, quieres configurar la autenticación y la autorización de forma coherente para tu aplicación en todos los entornos.
-
¿Tu carga de trabajo se autentica con un proveedor de identidades externo que admite la federación de identidades de cargas de trabajo?
- Si es así, configura la federación de identidades de cargas de trabajo para permitir que las aplicaciones que se ejecutan on-premise o en otros proveedores de servicios en la nube usen una cuenta de servicio.
- Si no es así, crea una clave de cuenta de servicio.
En algunos casos, es posible que no puedas usar ningún método de autenticación que no sean las claves de cuenta de servicio. Estos son algunos ejemplos de situaciones en las que una clave de cuenta de servicio puede ser tu única opción viable:
- Estás usando productos comerciales estándar (COTS) o aplicaciones de software como servicio (SaaS) que te piden que introduzcas unaGoogle Cloud clave de cuenta de servicio directamente en su interfaz de usuario.
- Tu carga de trabajo se está ejecutando fuera de Google Cloud y no está autenticada con un proveedor de identidades que pueda admitir la federación de identidades de carga de trabajo.
Si debes seguir usando claves de cuenta de servicio, asegúrate de que sigues las prácticas recomendadas para gestionar las claves de cuenta de servicio.
También puedes decidir no corregir determinadas cargas de trabajo porque consideras que el riesgo de seguir usando claves de cuentas de servicio no justifica el coste de cambiar a otro método de autenticación.
Eliminar claves innecesarias
Si tienes la certeza de que no necesitas una clave de cuenta de servicio, debes eliminarla. Entre las claves innecesarias se incluyen las siguientes:
Claves que no se han usado recientemente o que están relacionadas con recursos que no se han usado, que ha identificado en la sección Identificar logros rápidos de esta página.
Claves de cargas de trabajo que se han migrado a otros métodos de autenticación.
Después de eliminar todas las claves de cuenta de servicio de un proyecto, asegúrate de que se aplique la restricción
iam.disableServiceAccountKeyCreation
a ese proyecto. Si el proyecto estaba exento de esta restricción, quite la etiqueta que permitía la exención.
Para eliminar claves de forma segura, te recomendamos que inhabilites la clave antes de eliminarla. La eliminación es irreversible, pero si la inhabilitas, podrás volver a habilitar la clave rápidamente si detectas algún problema inesperado. Después de inhabilitar la clave, espera hasta que tengas la certeza de que eliminarla de forma permanente no causará problemas y, a continuación, elimínala. Si, después de inhabilitar la clave, detectas problemas inesperados, vuelve a habilitarla, soluciona los problemas y repite el proceso hasta que puedas eliminarla de forma segura.
Usar controles integrados para responder a las claves filtradas
Google Cloud ofrece herramientas y servicios para ayudarte a detectar y responder a las claves de cuentas de servicio filtradas. Puedes usar los siguientes mecanismos para responder a las filtraciones de claves de cuentas de servicio:
- La restricción de respuesta a la exposición de claves de cuenta de servicio te permite inhabilitar automáticamente las claves expuestas que detecte Google Cloud .
Mejoras continuas en la gestión de cuentas de servicio
Siempre que sea posible, implementa las prácticas recomendadas para gestionar las claves de cuentas de servicio. Mejorar los procesos de gestión de claves puede ayudar a mitigar el riesgo de que queden claves de cuentas de servicio en tu organización.
Siguientes pasos
- Prácticas recomendadas para usar cuentas de servicio
- Prácticas recomendadas para gestionar claves de cuentas de servicio
- Crea un proceso de gestión de incidentes colaborativo