Django SECRET_KEY를 json 파일로 관리하기
이전에 솔루션 보안 인증을 받을 때 직접적으로 들어가 있는 값들에 대해 문제가 된 적이 있었다. 어떻게 처리해야할지 찾아보니 별도로 json 파일로 관리하는 경우가 많았다. 그 방법에 대해 정리해보려고 한다.
import json
from django.core.exceptions import ImproperlyConfigured
with open("secrets.json") as f:
secrets = json.loads(f.read())
# Keep secret keys in secrets.json
def get_secret(setting, secrets=secrets):
try:
return secrets[setting]
except KeyError:
error_msg = "Set the {0} environment variable".format(setting)
raise ImproperlyConfigured(error_msg)
위 코드는 SECRET_KEY 관리로 검색하면 흔하게 볼 수 있는 코드이다.
get_secret 함수를 통해 특정 key로 접근 시 해당 값을 반환하거나 key가 없는 값일 경우 Set the {key} environment variable
이라는 에러메세지가 발생하게 된다.
{
"SECRET_KEY" : "secret",
"EMAIL_HOST_USER" : "email@email.xyz",
"EMAIL_HOST_PASSWORD" : "password",
"DATABASE_HOST" : "database.host",
"DATABASE_PORT" : "xxxx"
...
}
이제 SECRET_KEY 값 관리를 위해 경로에 secrets.json 파일을 생성 후 위와 같이 key값을 설정하여 secret 값들을 적어주고 아래와 같이 필요한 곳에 get_secret 함수를 호출하여 해당 값을 불러오도록 처리한다.
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY', get_secret('SECRET_KEY'))
EMAIL_HOST_USER = get_secret('EMAIL_HOST_USER')
EMAIL_HOST_PASSWORD = get_secret('EMAIL_HOST_PASSWORD')
DATABASES = {
'default' : {
...
'PASSWORD' : get_secret('DATABASE_PASSWORD'),
'HOST' : get_secret('DATABASE_HOST'),
'PORT' : get_secret('DATABASE_PORT')
}
참고 사이트 [Django] Secret key 분리하기