파이썬/Web

[Django] SECRET_KEY (작성 중..)

gyuho.kim 2019. 1. 24. 23:19

SECRET_KEY

- 암호화 서명을 제공하는데 사용되며 SECRET_KEY 값이 없을 경우 장고는 실행되지 않는다.

- django-admin startproject 명령으로 프로젝트 생성 시 자동으로 키 값이 생성됨.

- 보안과 직관된 데이터이므로 외부에 노출되지 않도록 각별한 주의하 필요하다.



어디에 이용되지?

  • 사용 중인 django.contrib.sessions.backends.cache 외에 다른 백엔드 세션이나 기본 

  • CookieStorage 또는 FallbackStorage 사용중인 모든 메세지들

  • 모든 PasswordResetView 토큰들

  • 다른 키가 제공되기 전까지 암호화 서명에 사용


settings.py에서 SECRET_KEY 분리

  • 환경변수로 SECRET_KEY 가져오기

  • 비밀파일 패턴으로 SECRET_KEY 가져오기

(1) 환경변수

SECRET_KEY 값을 환경변수로 등록해두고 이를 가져와 사용한다면,  협업을 위해 커밋할 경우 키 값이 외부에 공개되는 것을 방지할 수 있다.


- 환경변수 등록

$ vi .bashrc


$ export SECRET_KEY=' 본인 SECRET_KEY 값 '

$ echo $SECRET_KEY


- 환경변수 참조

# 환경 변수로 부터 키값을 가져옴

import os

SECRET_KEY = os.environ['환경변수명']


(2) 비밀파일 패턴 

json 파일 생성하고, 파일로 부터 설정값을 읽어오는 방식. json 파일은 .gitignore 등록해 커밋 되지 않도록 하는 것.


- json 생성



- 비밀파일로 부터 데이터를 가져오는 함수 작성 (repo/conf/util.py)

import json


# json 파일 경로

secret_file = os.path.join(BASE_DIR, 'devel.json'


with open('secret_file', mode='rt', encoding='utf-8') as file:

secrets = json.loads(file.read())


def get_secret(setting, data=secrets):



데이터 가져오기 (repo/conf/devel.py)