Garder Le Secret Des Clés
L'une des causes de la local_settings.py anti-modèle est que la mise SECRET_KEY, AWS
touches, etc.. des valeurs dans les fichiers de paramètres a un problème:
- Secrets souvent doit être juste que: secret! Les garder dans la version de moyens de contrôle
que tout le monde à accès au référentiel a accès à eux.
Ma question est comment faire pour garder toutes les clés en secret?
- L'on a accepté la réponse a été supprimé pour plagiat, mais j'ai mis @neuronet les contributions de (tenter de résoudre la question) dans une communauté wiki ci-dessous.
- Suppression des 'variables d'environnement" à partir du changement de titre, la question de l'origine Q qu'il probablyl ne doit pas avoir été fait.
Vous devez vous connecter pour publier un commentaire.
Stocker vos
local_settings.py
de données dans un fichier crypté avec la commande GPG - de préférence strictementkey=value
lignes qui vous analysez et l'assigner à un dict (l'autre approche intéressante serait d'avoir comme exécutable python, mais le code de l'exécutable dans les fichiers de config me fait frissonner).Il y a un python gpg module, donc ce n'est pas un problème. Obtenez vos clés de votre trousseau de clés, et d'utiliser le trousseau de clés GPG outils de gestion de sorte que vous n'avez pas à garder à taper dans votre trousseau de mot de passe. Assurez-vous de lire les données directement à partir d'un fichier crypté, et pas seulement la création d'un décrypté fichier temporaire qui vous lisez. C'est une recette pour l'échec.
C'est juste un aperçu, vous aurez à construire vous-même.
De cette façon, le secret des données reste exclusivement dans le processus de la mémoire de l'espace, et pas dans un fichier ou dans des variables d'environnement.
Que je fais de mon Django projets à l'aide de Windows 7 et Windows Powershell, donc pour moi, c'était légèrement différent pour définir la variable d'environnement. Une fois qu'il a été mis en bien que, j'ai la suite dans ma
settings.py
fichier:Pour définir une variable d'environnement Windows à l'aide de PowerShell suivez les instructions dans le lien ci-dessous:
http://technet.microsoft.com/en-us/library/ff730964.aspx
Idéalement,
local_settings.py
ne doit pas être cochée pour la production/serveur déployé. Vous pouvez garder copie de sauvegarde quelque part d'autre, mais pas dans le contrôle de source.local_settings.py
peut être vérifié avec le développement de la configuration de confort, de sorte que chaque développeur a besoin de la changer.Ne fait que résoudre votre problème?
La question initiale portait sur la façon de garder des secrets dans les variables d'environnement. C'est examinée de manière approfondie dans le livre Deux Cuillères de Django. Ci-dessous est un résumé de ce qu'ils ont dit, suivie par une mise en garde sur l'utilisation de cette technique.
À partir de la page 48 (Section 5.3) de l'édition pour la version 1.11:
Sur la page suivante, le livre se poursuit:
Ils décrivent comment définir les variables d'environnement au niveau local et dans la production (avec Heroku comme un exemple, vous aurez besoin de vérifier si vous utilisez un autre hôte, c'est juste une possibilité):
Enfin, à la page 52 ils donnent des instructions sur la façon d'accéder à la clé. Par exemple, vous pourriez mettre la première deux lignes ci-dessous dans votre fichier de paramètres pour remplacer la clé brute chaîne qui y est mis par défaut:
Remarque cela ne fonctionne pas dans certains cas, par exemple, si vous utilisez un serveur Apache. Pour faire face à des situations où ce modèle ne fonctionne pas, vous devriez voir la Section 5.4 de leur livre ("Quand Vous ne Pouvez pas Utiliser les Variables d'Environnement'). Dans ce cas, ils recommandent l'utilisation d'un dossier secret.
Comme de la fin de l'année 2017, cette technique de stocker des secrets dans vos variables d'environnement est la meilleure pratique recommandée dans Deux Cuillères et Douze Facteur d'Application de modèle de conception. Il est également recommandé à la Django docs. Toutefois, il existe certains risques de sécurité: si un développeur, ou un code, d'accès à votre système, ils auront accès à vos variables d'environnement peut, par inadvertance (ou advertently) rendre publics. Ce point a été faite par Michael Reinsch ici:
http://movingfast.io/articles/environment-variables-considered-harmful/
J'ai écrit un getcreds() la fonction qui récupère la clé secrète à partir d'un fichier. Je garde le fichier dans un endroit accessible à www-data donc, où j'ai besoin des informations d'identification dans settings.py je viens de faire l'appel à getcreds() passant dans le nom de fichier comme argument. Elle retourne une liste de toutes les lignes dans le fichier et bingo j'ai des secrets cachés. Voici le code ...
Vous devrez peut-être utiliser os.environ.obtenir("SOME_SECRET_KEY")
os.environ.get("SOME_SECRET_KEY")
Voici une façon de faire qui est compatible avec le déploiement sur Heroku:
Créer un gitignored fichier nommé
.env
contenant:export DJANGO_SECRET_KEY = 'replace-this-with-the-secret-key'
Ensuite modifier
settings.py
pour enlever la réelleSECRET_KEY
et ajoutez ceci à la place:SECRET_KEY = os.environ['DJANGO_SECRET_KEY']
Ensuite, lorsque vous souhaitez exécuter le serveur de développement local, composez le:
source .env
python manage.py runserver
Enfin, lorsque vous déployez pour Heroku, allez dans les Paramètres de votre app tab et ajouter DJANGO_SECRET_KEY pour la Config de Vars.