112 votes

Où stocker les clés secrètes DJANGO

J'ai cherché cette question partout et je n'ai pas trouvé la réponse. J'espère que je ne poste pas un doublon.

Il est conseillé partout de conserver vos clés secrètes dans un fichier distinct de votre fichier settings.py général. De plus, vous ne devez jamais livrer votre fichier "secret.py" qui contient des clés telles que SECRET_KEY, AWS_SECRET_KEY, etc.

Ma question est la suivante : dans votre serveur de production, vous devez référencer vos clés secrètes, ce qui signifie que votre fichier de paramètres "secret.py" doit se trouver quelque part sur le serveur, n'est-ce pas ? Si oui, comment protégez-vous vos clés secrètes en production ?

5voto

Dundee MT Points 63

Au lieu de la logique "si/alors", vous devez utiliser un outil conçu pour éliminer les données sensibles. J'utilise YamJam https://pypi.python.org/pypi/yamjam/ . Il permet tous les avantages de la méthode os.environ mais est plus simple -- vous devez toujours définir ces variables environ, vous devrez les mettre dans un script quelque part. YamJam stocke ces paramètres de configuration dans un magasin de configuration de la machine et permet également une capacité d'annulation projet par projet.

from YamJam import yamjam

variable = yamjam()['myproject']['variable']

C'est l'usage de base. Et comme la méthode os.environ, elle n'est pas spécifique à un framework, vous pouvez l'utiliser avec Django ou toute autre application/framework. Je les ai tous essayés, avec de multiples fichiers settings.py, une logique fragile de si/alors et des problèmes d'environnement. Au final, je suis passé à yamjam et je ne l'ai pas regretté.

3voto

Akshay Chandran Points 151

Ajouter à zack-plauch La réponse de la Commission, Pour obtenir le chemin vers le .env lorsque vous utilisez python-dotenv module le find_dotenv peut être utilisée,

from dotenv import load_dotenv, find_dotenv

load_dotenv(find_dotenv())

SECRET_KEY = os.environ['SECRET_KEY']

En find_dotenv() cherche un " .env "dans le chemin, de sorte qu'il peut être enregistré dans le même répertoire,

De même, si un nom est utilisé pour le .env comme " django-config.env ", load_dotenv(find_dotenv("django-config.env") récupérera et chargera les mappages des variables d'environnement hôte-machine.

0voto

hathlogic Points 156

Je suis surpris que personne n'ait parlé de django-environnement . Je crée généralement un .env comme ceci :

SECRET_KEY=blabla
OTHER_SECRET=blabla

Ce fichier doit être ajouté dans .gitignore

Vous pouvez vérifier dans git, un exemple de fichier nommé .env.example juste pour que les autres sachent de quelle env var ils ont besoin. Le contenu de .env.example ressemblera à ceci (juste des clés sans aucune valeur)

SECRET_KEY=
OTHER_SECRETS=

0voto

blessed Points 121

Où stocker SECRET_KEY DJANGO

Stockez votre django SECRET_KEY dans une variable d'environnement ou un fichier séparé, au lieu de coder directement Dans votre module de configuration settings.py

settings.py

#from an environment variable
import os

SECRET_KEY = os.environ.get('SECRET_KEY')

#from an file
with open('/etc/secret_key.txt') as f:
    SECRET_KEY = f.read().strip()

Comment générer Django SECRET_KEY manuellement :

$ python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"

7^t+3on^bca+t7@)w%2pedaf0m&$_gnne#^s4zk3a%4uu5ly86

import string
import secrets

c = string.ascii_letters + string.digits + string.punctuation

secret_key = ''.join(secrets.choice(c) for i in range(67))

print(secret_key) 

df&)ok{ZL^6Up$\y2*">LqHx:D,_f_of#P,~}n&\zs*:y{OTU4CueQNrMz1UH*mhocD

Assurez-vous que la clé utilisée en production n'est pas utilisée ailleurs et évitez de l'envoyer au contrôle de la source.

-1voto

Galt Barber Points 101

La sortie de débogage de django exposera les mots de passe stockés dans les variables d'environnement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X