web-dev-qa-db-fra.com

Est-il dangereux d'utiliser des variables environnementales pour les données secrètes?

Après avoir lu cet article de blog dans lequel l'auteur expose des arguments contre l'utilisation de variables d'environnement pour stocker des secrets, je ne sais pas comment procéder au déploiement de mon application.

Ses principaux arguments sont les suivants:

  • Étant donné que l'environnement est implicitement disponible pour le processus, il est difficile, voire impossible, de suivre l'accès et la façon dont le contenu est exposé (ps -eww).

  • Il est courant que les applications récupèrent tout l'environnement et l'impriment pour le débogage ou le rapport d'erreurs. Tellement de secrets sont divulgués à PagerDuty qu'ils ont un processus interne bien graissé pour les éliminer de leur infrastructure.

  • Les variables d'environnement sont transmises aux processus enfants, ce qui permet un accès involontaire. Cela rompt le principe du moindre privilège. Imaginez que dans le cadre de votre application, vous appelez un outil tiers pour effectuer une action — tout d'un coup, cet outil tiers a accès à votre environnement, et Dieu sait ce qu'il en fera.

  • Lorsque les applications se bloquent, il est courant qu'elles stockent les variables d'environnement dans des fichiers journaux pour un débogage ultérieur. Cela signifie des secrets en texte brut sur le disque.

  • Mettre des secrets dans les variables ENV se transforme rapidement en connaissances tribales. Les nouveaux ingénieurs qui ne sont pas conscients de la nature sensible de variables d'environnement spécifiques ne les traiteront pas de manière appropriée/avec soin (en les filtrant en sous-processus, etc.).

Ceux-ci me semblent tout à fait raisonnables, mais je ne suis pas un professionnel de la sécurité. Sa suggestion alternative est d'utiliser la fonctionnalité de secret de Docker, mais cela suppose que vous utilisez Docker ... ce que je ne suis pas. Je suis sur Heroku. Donc je ne suis pas sûr de ça maintenant. Il ne semble pas y avoir de support pour l'utilisation de Vault sur Heroku, du mieux que je puisse dire.

8

En général, le stockage de secrets dans des variables d'environnement présente certains inconvénients, comme le dit Diogo dans son article.

De manière générique, pour des plateformes comme Heroku, ou en utilisant des technologies comme Docker où l'application devrait être éphémère, des outils de gestion des secrets dédiés sont la meilleure solution. L'idée est qu'il devrait y avoir un outil qui détient le secret sous forme cryptée et le fournit à l'application au moment de l'exécution.

Le secret peut alors vivre à l'intérieur de l'application, généralement sous forme de fichier, qui peut être lu et les secrets utilisés à partir de ce fichier si nécessaire.

Deux exemples d'outils dans ce domaine sont Hashicorp Vault et Square's Keywhiz .

En plus de cela si vous déployez sur un cloud, le fournisseur de cloud devrait généralement avoir une sorte de gestion des secrets, par exemple AWS Secrets Manager .

Je n'ai pas beaucoup d'expérience avec la gestion des secrets sur Heroku, mais ils semblent avoir un add-on appelé ice qui fonctionne dans ce domaine.

2
Rory McCune