Prácticas recomendadas para almacenar claves API de forma segura

En el pasado, he visto a muchas personas usar repositorios de Git para almacenar información confidencial relacionada con sus proyectos.

Últimamente, he visto a algunas personas anunciar que están almacenando claves API en sus repositorios privados de GitHub. Estoy escribiendo este artículo porque la gente debería entender los riesgos de almacenar claves API con su código.

Este artículo no pretende ser una solución permanente a los problemas que pueda tener al almacenar claves API. En cambio, es mi propio análisis del problema y mis sugerencias sobre cómo solucionarlo.

Entonces, ¿cuál es exactamente el problema de almacenar información confidencial cerca de su código en un repositorio de Git?

Por qué no debería almacenar claves API en repositorios de Git

El almacenamiento de claves de API, o cualquier otra información confidencial, en un gitrepositorio es algo que debe evitarse a toda costa. Incluso si el repositorio es privado, no debería verlo como un lugar seguro para almacenar información confidencial.

Comencemos por ver por qué es una mala idea almacenar claves API en repositorios públicosgit .

Por naturaleza, gitcualquier persona puede acceder a un repositorio público .

En otras palabras, cualquier persona con conexión a Internet puede acceder al contenido de un gitrepositorio público . No solo eso, sino que también pueden examinar todo el código dentro del repositorio y posiblemente incluso ejecutarlo. Si almacena una clave de API en un repositorio público, está publicando al aire libre para que cualquiera pueda verla.

Una búsqueda reciente de client_secret en GitHub reveló que hay más de 30.000 confirmaciones que potencialmente exponen una clave y un secreto de API. En algunos casos, solo copia y pega el código para acceder inmediatamente a la API.

Este problema se está volviendo tan importante que algunas empresas invierten en recursos para asegurarse de que no haya claves ni secretos de API filtrados.

El año pasado, Slack comenzó a buscar tokens de API expuestos e invalidarlos de manera proactiva. Esta acción evita el acceso malicioso a las cuentas de Slack, pero no es posible que encuentre todos los tokens filtrados.

Entonces, esto está sucediendo en los repositorios públicos de Git. ¿Y las privadas ? ¿Por qué es eso un problema?

Los repositorios privados de Git alojados en servicios como GitHub, GitLab y Bitbucket están expuestos a un tipo de riesgo diferente. Cuando integra una aplicación de terceros con uno de los servicios mencionados, es posible que esté abriendo sus repositorios privados a esos terceros. Esas aplicaciones podrán acceder a sus repositorios privados y leer la información contenida en ellos.

Si bien eso por sí solo no crea un riesgo, imagine si una de esas aplicaciones se vuelve vulnerable a los atacantes. Al obtener acceso no autorizado a una de esas aplicaciones de terceros, los atacantes pueden obtener acceso a sus datos confidenciales, incluidas claves y secretos API.

Entonces, ¿dónde se deben almacenar las claves API?

Hay muchas alternativas para almacenar claves y secretos API de forma segura. Algunos de ellos le permiten usar su repositorio de Git y cifrar los datos confidenciales. Otras herramientas son más sofisticadas y descifran información confidencial como parte de un flujo de trabajo de implementación. Veamos algunas de las soluciones disponibles.

git-remote-gcrypt

La primera solución le permite cifrar todo un repositorio de Git. git-remote-gcrypt hace eso agregando funcionalidad a los ayudantes remotos de Git para que una nueva capa de transporte encriptada esté disponible. Los usuarios solo tienen que configurar un nuevo control remoto encriptado e insertar un código en él.

Siga leyendo si está buscando una solución más detallada que le permita cifrar archivos individuales.

git-secret

git-secretes una herramienta que funciona en su máquina local y cifra archivos específicos antes de enviarlos a su repositorio. Detrás de escena, git-secrethay un script de shell que usa GNU Privacy Guard (GPG) para cifrar y descifrar archivos que pueden tener información confidencial.

git-crypt

Otra solución es git-crypt. Es muy similar a git-secret en la forma en que opera, pero tiene algunas diferencias interesantes.

Lo primero que hay que tener en cuenta git-cryptes que es un ejecutable binario y no un script de shell, como es git-secret. Ser un ejecutable binario significa que para usarlo primero debes compilarlo, o necesitas encontrar una distribución binaria para tu máquina.

Si está usando una Mac, tiene suerte porque HomeBrew ofrece un git-cryptpaquete listo para instalar. Todo lo que tienes que hacer es ejecutar brew install git-crypten una terminal.

Caja negra

BlackBox es una herramienta creada por Stack Overflow. Esta es la empresa detrás de las comunidades de preguntas y respuestas populares, como Stack Overflow, Server Fault y Super User. BlackBox es una herramienta robusta, ya que funciona con Git, así como con otros sistemas de control de versiones como Mercurial y Subversion.

También admite el cifrado de cadenas pequeñas y no solo archivos completos. Lo hace cuando trabaja con Puppet y usa Puppet's Hiera, una herramienta de búsqueda de valores clave para datos de configuración.

Tener la capacidad de cifrar y descifrar cadenas individuales hace que BlackBox sea una gran solución para proteger claves y secretos de API.

Configuración de Heroku y Vars de configuración

Si está trabajando con Heroku, no debe almacenar ninguna información confidencial, como claves API y secretos en sus repositorios de Git. Heroku ofrece una solución que le permite establecer variables de configuración.

Luego, su aplicación puede acceder al contenido de esas variables de configuración durante el tiempo de ejecución accediendo a las variables de entorno correspondientes. Aunque los valores no están encriptados, esta solución le permite evitar el uso de su repositorio Git para almacenar claves API.

Dokku, una solución de código abierto como Heroku, ofrece las mismas capacidades.

Secretos de Docker

Al final del espectro de posibles soluciones están los secretos de Docker. Esta solución fue presentada por Docker en febrero de 2017. Desde entonces, ha ganado popularidad.

Los secretos de Docker le permiten definir variables cifradas y las pone a disposición de servicios específicos durante el tiempo de ejecución. Los secretos se cifran tanto durante el tránsito como en reposo.

Este enfoque convierte a Docker secrets en la solución perfecta para almacenar y utilizar claves y secretos de API de forma segura y cifrada.

Resumen

A estas alturas, debe ser consciente de los peligros de almacenar información confidencial, como claves de API y secretos, en repositorios públicos y privados de Git.

Comprender las posibles formas en que sus repositorios podrían estar expuestos es clave para evaluar y mitigar los riesgos asociados con las fugas de información.

Este artículo también propone algunas soluciones diferentes que le permiten cifrar claves y secretos de API para que pueda utilizar de forma segura sus repositorios de código.

Estoy seguro de que existen más soluciones que pueden ayudarlo a lograr los mismos resultados.