Después de leer esta publicación de blog en el que el autor presenta argumentos en contra del uso de variables ambientales para almacenar secretos, no estoy seguro de cómo proceder con el despliegue de mi aplicación.
Sus argumentos principales son los siguientes:
Dado que el entorno está implícitamente disponible para el proceso, es difícil, si no imposible, rastrear el acceso y cómo se obtienen los contenidos. expuesto (ps -eww).
Es común que las aplicaciones tomen todo el entorno y lo impriman para la depuración o el informe de errores. Tantos secretos consiguen filtrado a PagerDuty que tienen un proceso interno bien engrasado para elimínelos de su infraestructura.
Las variables de entorno se transmiten a procesos secundarios, lo que permite un acceso no deseado. Esto rompe el principio de lo menos privilegio. Imagina que como parte de tu aplicación, llamas a un herramienta de terceros para realizar alguna acción, de repente, eso La herramienta de terceros tiene acceso a su entorno, y Dios sabe lo que hace. hará con él.
Cuando las aplicaciones fallan, es común que almacenen las variables de entorno en los archivos de registro para su posterior depuración. Esto significa secretos de texto plano en el disco.
Poner secretos en variables ENV se convierte rápidamente en conocimiento tribal. Nuevos ingenieros que no son conscientes de la naturaleza sensible de Las variables de entorno específicas no las manejarán adecuadamente / con atención (filtrando a subprocesos, etc.).
Esto me parece muy razonable, pero no soy un profesional de seguridad. Su sugerencia alternativa es usar la funcionalidad de guardar secretos de Docker, pero eso es suponer que estás usando Docker ... lo cual no. Estoy en Heroku. Así que ahora no estoy seguro de esto. Parece que no hay soporte para usar Vault en Heroku, lo mejor que puedo decir.