Migra claves de cuentas de servicio

Por lo general, las claves de cuentas de servicio se usan para autenticar los servicios de Google Cloud. Sin embargo, también pueden convertirse en un riesgo para la seguridad si no se administran de forma adecuada, lo que aumenta la vulnerabilidad a amenazas como filtración de credenciales, elevación de privilegios, divulgación de información y no repudio.

En muchos casos, puedes autenticarte con alternativas más seguras que las claves de cuentas de servicio. Esta guía te ayuda a migrar desde las claves de cuentas de servicio como el mecanismo de autenticación principal para usar alternativas más seguras, con excepciones ocasionales en las que las claves de cuentas de servicio son realmente necesarias.

Este documento está dirigido a los administradores de seguridad que deseen mejorar su postura de seguridad mediante la reducción del uso de claves de cuentas de servicio para aplicar 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 desarrolladores y los procesos internos existentes que usan claves de cuentas de servicio.

Descripción general

Para quitar claves de cuentas de servicio de las cargas de trabajo existentes, se debe planificar con cuidado a fin de evitar interrupciones accidentales. El siguiente plan de migración está diseñado para que puedas aplicar controles centralizados a la vez que minimizas las interrupciones para los desarrolladores.

Este plan de migración incluye tres fases:

  • Evalúa: En esta fase, debes evaluar tu entorno existente para comprender dónde existen las claves de cuentas de servicio y si las claves están en uso.
  • Planifica: En esta fase, debes decidir qué controles implementarás y comunicar el plan de migración a las partes interesadas.
  • Implementa: En esta fase, comienzas a refactorizar las cargas de trabajo para autenticarse con alternativas más seguras que las claves de cuentas de servicio. También compilas capacidades adicionales para supervisar tu entorno de forma continua y mitigar el riesgo futuro.

Evalúa el uso de claves de cuentas de servicio

En esta fase, evaluarás tu entorno existente para comprender dónde existen claves de cuentas de servicio y si las claves están en uso.

En las siguientes secciones, se describen los datos que puedes recopilar para comprender mejor cómo se usan las claves de la cuenta de servicio en tu organización.

Recopila datos sobre el uso de claves

Primero, identifica dónde se encuentran las claves de la cuenta de servicio y cómo se usan.

Google Cloud proporciona herramientas para comprender el uso de la cuenta de servicio. Estas herramientas te ayudan a determinar qué cuentas de servicio y claves se usaron recientemente para autenticarse, qué cuentas de servicio no se usaron en los últimos 90 días y qué cuentas de servicio tienen roles con privilegios excesivos.

Puedes combinar información de todas estas herramientas para obtener un mejor panorama de cómo se usan las cuentas de servicio y las claves en toda tu organización. Para ver un ejemplo de cómo combinar la información de estas fuentes en toda tu organización, consulta la arquitectura de referencia implementable en GitHub. Esta arquitectura de referencia agrega datos de varias herramientas y los exporta con regularidad a una tabla de BigQuery para su análisis.

La arquitectura de referencia implementa una canalización de datos que consulta Cloud Asset Inventory para identificar claves de cuentas de servicio en tu organización. Luego, la canalización de datos combina esos datos con los del uso de permisos y la cuenta asociada. La tabla resultante, sa_key_usage, te ayuda a responder preguntas como las siguientes:

  • ¿Cuántas claves persistentes se crearon? Este número puede ser útil como una métrica de alto nivel para realizar un seguimiento del progreso a medida que migras para dejar de usar 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 borrar estas claves sin una evaluación adicional de los propietarios de las cargas de trabajo.
  • ¿Qué claves están asociadas con las cuentas de servicio que tienen recomendaciones sobre el exceso de permisos? Si una clave de cuenta de servicio está asociada con una cuenta de servicio con privilegios excesivos, en especial una con un rol de Propietario, Editor o Visualizador, la clave puede ser muy riesgosa. Buscar cuentas de servicio que tengan recomendaciones de roles puede ayudarte a identificar qué cuentas de servicio tienen privilegios excesivos. Después de identificar estas cuentas de servicio, puedes decidir priorizar estas cargas de trabajo para la migración. También puedes optar por aplicar las recomendaciones de roles para reducir de forma proactiva los permisos no usados.

Esta canalización de datos se ejecuta a diario y escribe en una tabla de BigQuery particionada por fecha. Puedes usar esta tabla para investigar cuentas de servicio o claves específicas, o realizar un seguimiento del progreso de la solución mediante una herramienta del panel como Looker Studio.

Enriquece los datos de uso de la clave con contexto adicional

Después de crear tu conjunto de datos de uso de claves, puedes extenderlo con fuentes de datos adicionales. Te recomendamos agregar fuentes de datos que ya uses para realizar un seguimiento de la administración y la procedencia de los recursos. Según tu administración existente, puedes agregar datos adicionales como los siguientes:

  • Información de propiedad de una base de datos de administración de configuración (CMDB) o un sistema similar
  • Información de administración configurada en etiquetas de proyecto, como el equipo o el centro de costos responsable de un proyecto.
  • Información del entorno sobre las claves que se usan para cargas de trabajo en entornos externos a Google Cloud.

Crea un plan para reducir el uso de claves de cuentas de servicio

Antes de implementar cualquier cambio para reducir el uso de la clave de cuenta de servicio, debes determinar qué cargas de trabajo y entornos se verán afectados y cómo aplicarás los cambios. También debes comunicar este plan en toda tu empresa y asegurarte de que los propietarios de cargas de trabajo admitan el plan.

En las siguientes secciones, se presentan temas clave que tu plan debe abordar. Tu plan específico variará según el tamaño de tu organización y los requisitos específicos de tus cargas de trabajo.

Decide la responsabilidad de los propietarios actuales de la carga de trabajo

Aunque un equipo de seguridad central puede evaluar qué claves existen, una migración exitosa requiere esfuerzo de los propietarios de las cargas de trabajo. Para las claves dentro del alcance de la migración, los propietarios de la carga de trabajo deben determinar cuáles de los métodos de autenticación disponibles funcionarán para su caso de uso y, luego, ejecutar esa migración.

Considera cómo equilibrar las mejoras en la postura de seguridad existente con el esfuerzo que requieren los propietarios de la carga de trabajo. En las siguientes secciones, se describen dos enfoques de muestra: uno que prioriza en gran medida las mejoras en la postura de seguridad y otro que prioriza en gran medida el esfuerzo de los propietarios de cargas de trabajo. Tu enfoque real puede variar, por ejemplo, puedes decidir seleccionar qué cargas de trabajo están dentro del alcance de forma individual.

Ejemplo: Todas las cargas de trabajo actuales se evalúan para la migración

Un enfoque posible es aplicar controles de clave de cuenta de servicio para todas las cargas de trabajo existentes y futuras. Esto implica pasos como los siguientes:

  • Colaborar con los propietarios de la carga de trabajo para evaluar su uso de claves en las cargas de trabajo existentes.
  • Exigir que los propietarios de las cargas de trabajo migren todas las cargas de trabajo existentes con uso de clave, a menos que se les haya otorgado una excepción.
  • Evitar que todas las cargas de trabajo futuras usen claves de cuentas de servicio, a menos que se les haya otorgado una excepción

Este enfoque prioriza las mejoras en la postura de seguridad existente, pero requiere más esfuerzo de los desarrolladores y los propietarios de las cargas de trabajo a corto plazo. Para ejecutar un plan como este de forma correcta, debes tener el compromiso de los propietarios de la carga de trabajo a fin de participar en la revisión y la refactorización de la carga de trabajo.

Ejemplo: No se evalúan las cargas de trabajo actuales para la migración

Otro enfoque es permitir que las cargas de trabajo existentes sean una excepción automática para que continúen usando las claves de cuentas de servicio y solo apliquen controles nuevos en 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 actuales de las cargas de trabajo. Sin embargo, no mejora la postura de seguridad de las cargas de trabajo existentes.

Identifica las ganancias rápidas

En la evaluación, puedes identificar claves que se pueden borrar de forma segura sin más trabajo de solución de los propietarios de las cargas de trabajo. 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 necesidad de migrar a un mecanismo de autenticación diferente.

Haz una lista de las claves que cumplen con estos criterios. Usarás esta lista durante la fase de implementación para borrar claves innecesarias. Antes de agregar una clave a la lista, confirma si hay casos de uso que requieren la clave de la cuenta de servicio con poca frecuencia, como el acceso de producción de emergencia que depende de las claves de cuentas de servicio.

Planifica dónde aplicar los cambios en las políticas de la organización

Para migrar de manera correcta el uso de claves de cuentas de servicio, debes evitar que se creen claves nuevas. Durante la fase de implementación, aplica la restricción de política de la organización iam.disableServiceAccountKeyCreation para evitar la creación de claves de cuentas de servicio nuevas.

Aunque esta restricción no impide el uso de claves existentes, puede interrumpir las cargas de trabajo existentes que rotan sus claves con regularidad. Antes de comenzar la fase de implementación, decide dónde la aplicarás en tu jerarquía de recursos para minimizar la interrupción.

Es posible que prefieras aplicar la restricción al nivel del proyecto o de la carpeta en lugar de la organización. Por ejemplo, puedes aplicar la restricción en la carpeta que se usa para tu entorno de desarrollo antes de implementarla en carpetas de producción. O bien, en una organización grande con muchos equipos, puedes aplicar la restricción en una carpeta para un solo equipo primero y, luego, aplicar la restricción en las carpetas adicionales a medida que se migran.

Puedes usar las políticas de la organización con etiquetas para aplicar de forma condicional las políticas de la organización a nivel del proyecto o de la carpeta.

Diseña un proceso de excepciones

Aunque el objetivo de esta migración es reducir o eliminar el uso de la clave de cuenta de servicio, hay algunos casos de uso legítimos que requieren claves de cuentas de servicio. Incluso si ninguna carga de trabajo existente requiere claves de cuentas de servicio, es posible que las cargas de trabajo futuras lo hagan. Por lo tanto, debes definir un proceso operativo para evaluar y aprobar las excepciones en los casos prácticos que requieren claves de cuentas de servicio.

Define un proceso para que los propietarios de cargas de trabajo soliciten una excepción que les permita usar sus claves de cuentas de servicio. Asegúrate de que los encargados de tomar decisiones que otorguen una excepción tengan los conocimientos técnicos para validar el caso de uso, consulta con los propietarios de la carga de trabajo sobre cuál de las alternativas más seguras a las claves de cuentas de servicio puede ser más apropiada y asesora a los propietarios de cargas de trabajo sobre las prácticas recomendadas para administrar claves de cuentas de servicio.

Comunica los próximos cambios a los propietarios de cargas de trabajo

Una vez que hayas diseñado un plan, debes comunicarlo de forma clara en toda tu organización y asegurarte de que las partes interesadas, en especial los líderes sénior, estén dispuestos a comprometerse con la migración.

Si bien los detalles de migración específicos variarán para tu organización, considera incluir los siguientes temas en tu plan de comunicación:

  • El impacto negativo que pueden tener las claves de cuentas de servicio no seguras y las motivaciones que alejan la migración 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 esto puede afectar los procesos existentes.
  • Orientación para que los desarrolladores identifiquen alternativas más seguras a las claves de cuentas de servicio.
  • Es el proceso para que los equipos soliciten una excepción a fin de permitir las claves de la cuenta de servicio, incluida la frecuencia con la que se vuelve a evaluar esta excepción.
  • El cronograma para aplicar los cambios propuestos.

Trabaja con los propietarios de las cargas de trabajo para definir mejor tu plan y asegurarte de que funcione en tu organización.

Implementa controles y refactoriza cargas de trabajo

Después de crear un plan y comunicarlo a los propietarios de la carga de trabajo, puedes comenzar a migrar las claves de las cuentas de servicio.

En esta fase, debes comenzar a refactorizar las cargas de trabajo para autenticarte con alternativas más seguras a las claves de la cuenta de servicio. También compilas capacidades adicionales para supervisar tu entorno de forma continua y mitigar el riesgo futuro.

En las siguientes secciones, se describen los pasos que puedes seguir para refactorizar las cargas de trabajo y borrar las claves con una interrupción mínima. Puedes elegir seguir estos pasos en cualquier orden, según la prioridad y el esfuerzo necesarios para tu organización.

Aplica controles para detener la creación de claves de cuentas de servicio nuevas

Para detener la creación de claves de cuentas de servicio nuevas, aplica la restricción de política de la organización iam.disableServiceAccountKeyCreation.

Sin embargo, antes de aplicar esta restricción, debes agregar etiquetas a todos los proyectos o carpetas que estarán exentos de la política. Puedes permitir excepciones para las cargas de trabajo existentes que no pueden migrar desde las claves de cuentas de servicio o para las cargas de trabajo nuevas que tengan un motivo legítimo para autenticarse solo con claves de cuentas de servicio.

Después de agregar etiquetas a proyectos y carpetas exentos, puedes establecer una política de la organización con etiquetas para aplicar la restricción iam.disableServiceAccountKeyCreation a las carpetas y los proyectos no exentos.

Para evitar la creación de claves de cuentas de servicio en todos los proyectos y carpetas no exentos, haz lo siguiente:

  1. Asegúrate de tener los roles de IAM necesarios para administrar etiquetas y administrar políticas de la organización a nivel de la organización.

  2. A nivel de la organización, crea una clave y un valor de etiqueta que usarás para definir si un proyecto o carpeta debe estar exento de la política de la organización. Recomendamos crear una etiqueta con la clave disableServiceAccountKeyCreation y los valores enforced y not_enforced.

    Para aprender a crear claves y valores de etiqueta, consulta Crea y define una etiqueta nueva.

  3. Adjunta la etiqueta disableServiceAccountKeyCreation a la organización y configúrala con el valor enforced. Todos los proyectos o carpetas de la organización heredan este valor de etiqueta, a menos que se reemplace por un valor de etiqueta diferente.

    Para obtener información sobre cómo adjuntar etiquetas a los recursos, consulta Adjunta etiquetas a los recursos.

  4. Para cada proyecto o carpeta que desees eximir de la política de la organización, adjunta la etiqueta disableServiceAccountKeyCreation y establece su valor en not_enforced. Configurar un valor de etiqueta para un proyecto o carpeta de esta manera anula el valor de la etiqueta heredado de la organización.

  5. Crea una política de la 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 tener las siguientes reglas:

    • Configura la restricción iam.disableServiceAccountKeyCreation para que no se aplique en ningún recurso con la etiqueta disableServiceAccountKeyCreation: not_enforced. La condición en esta regla debería verse de la siguiente manera:

      resource.matchTag(\"ORGANIZATION_ID/disableServiceAccountKeyCreation\", \"not_enforced\")
      
    • Configura la restricción iam.disableServiceAccountKeyCreation para que se aplique en todos los demás recursos.

    Para aprender a crear políticas de la organización con condiciones de etiquetas, consulta Configura una política de la organización con etiquetas.

Soluciona las cargas de trabajo existentes

Para cada carga de trabajo que usa claves de cuentas de servicio, colabora con los propietarios de la carga de trabajo a fin de elegir e implementar un método de autenticación alternativo.

Cuando accedes a los servicios de Google Cloud mediante Google Cloud CLI, las bibliotecas cliente de Cloud, las herramientas que admiten las credenciales predeterminadas de la aplicación (ADC), como Terraform, o las solicitudes de REST usa el siguiente diagrama para ayudarte a elegir un método de autenticación:

Árbol de decisión para elegir el método de autenticación según el caso de uso

En este diagrama, se te guiará a través de las siguientes preguntas:

  1. ¿Ejecutas 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?
    1. Si es así, continúa con la pregunta 4.
    2. De lo contrario, continúa con la pregunta 2.
  2. ¿Ejecutas código en Google Cloud?
    1. Si es así, continúa con la pregunta 3.
    2. De lo contrario, continúa con la pregunta 5.
  3. ¿Ejecutas contenedores en Google Kubernetes Engine o GKE Enterprise?
    1. Si es así, usa la federación de identidades para cargas de trabajo para GKE a fin de conectar cuentas de servicio a los Pods de Kubernetes.
    2. De lo contrario, conecta una cuenta de servicio al recurso.
  4. ¿Tu caso de uso requiere una cuenta de servicio?

    Por ejemplo, deseas configurar la autenticación y la autorización de manera coherente para tu aplicación en todos los entornos.

    1. De lo contrario, autentica con credenciales de usuario.
    2. Si es así, usa la identidad de una cuenta de servicio con credenciales de usuario.
  5. ¿Tu carga de trabajo se autentica con un proveedor de identidad externo que admite la federación de identidades para cargas de trabajo?
    1. Si es así, configura la federación de identidades para cargas de trabajo para permitir que las aplicaciones que se ejecutan de forma local o en otros proveedores de servicios en la nube usen una cuenta de servicio.
    2. De lo contrario, crea una clave de cuenta de servicio.

En algunos casos, es posible que solo puedas usar ningún método de autenticación para otras claves de cuentas de servicio. Los siguientes son algunos ejemplos de dónde una clave de cuenta de servicio podría ser tu única opción posible:

  • Usas productos comerciales listos para usar (COTS) o aplicaciones de software como servicio (SaaS) que te solicitan que ingreses una clave de cuenta de servicio de Google Cloud directamente en su interfaz de usuario.
  • Tu carga de trabajo se ejecuta fuera de Google Cloud y no está autenticada con un proveedor de identidad que pueda admitir la federación de Workload Identity.

En los casos en los que debas seguir usando las claves de cuentas de servicio, asegúrate de seguir las prácticas recomendadas para administrar claves de cuentas de servicio.

También puedes decidir no solucionar ciertas cargas de trabajo porque evalúas que el riesgo de seguir usando claves de cuentas de servicio no justifica el costo de cambiar a un método de autenticación diferente.

Borra claves innecesarias

Si estás seguro de que no es necesaria una clave de cuenta de servicio, debes borrarla. Las claves innecesarias incluyen lo siguiente:

  • Claves sin uso reciente o claves relacionadas con recursos sin usar, que identificaste en la sección Identifica beneficios rápidos de esta página.

  • Claves para cargas de trabajo que se migraron a otros métodos de autenticación.

    Después de borrar todas las claves de la 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, quita la etiqueta que permitió la exención.

Para borrar claves de forma segura, te recomendamos que inhabilites la clave antes de borrarla. La eliminación es irreversible, pero inhabilitarla te permite volver a habilitar la clave con rapidez si identificas problemas inesperados. Después de inhabilitar la clave, espera hasta que estés seguro de que quitar la clave de forma permanente no causará problemas y, luego, borra la clave. Si después de inhabilitar la clave, identificas problemas inesperados, vuelve a habilitarla, resuelve los problemas y repite el proceso hasta que puedas borrar la clave de forma segura.

Usa los controles integrados para responder a las claves filtradas

Google Cloud ofrece varias herramientas y servicios para ayudarte a detectar y responder a las claves de cuentas de servicio filtradas. Considera usar los siguientes mecanismos para ayudarte a responder a las claves de cuentas de servicio filtradas:

  • Habilita la detección de anomalías en Security Command Center para analizar los repositorios públicos en busca de claves. Este análisis crea un resultado account_has_leaked_credentials si se detectan claves filtradas.
  • Revisa el programa de protección criptográfica de Security Command Center y asegúrate de cumplir con los requisitos técnicos para la elegibilidad. El abuso de la minería de criptomonedas es un ataque común si se filtran las credenciales.
  • Configura Contactos esenciales para que tu equipo de seguridad reciba notificaciones de seguridad de Google Cloud, incluido el abuso que resulta de claves comprometidas. Asegúrate de que la dirección de correo electrónico se supervise y no dependa de usuarios individuales como un punto único de fallo.

Para obtener más información sobre la administración de incidentes, consulta Compila un proceso de administración de incidentes colaborativo.

Mejoras constantes en la administración de cuentas de servicio

Cuando sea posible, implementa prácticas recomendadas para administrar claves de cuentas de servicio. La mejora de los procesos de administración de claves puede ayudar a mitigar el riesgo de cualquier clave de cuenta de servicio restante en la organización.

¿Qué sigue?