[django] SECRET_KEY 분리하기
업데이트:
안녕하세요!👋
장고에는 프로젝트를 생성하면 SECRET_KEY가 주어지는데 이를 git사이트에 코드를 올릴때 공개되지 않도록 숨기는 방법에 대해 적어보려 합니다
🙏요약
이번 글에서는 django 시크릿 키에 대한 설명과 이를 분리하여 git등에서 소스를 공개할 때 숨기는 방법에 대해 알아보겠습니다.
- django의 시크릿 키
- SECRET_KEY 분리 및 숨기기
📔SECRET_KEY
django의 프로젝트를 생성하면 settings.py에 위와같이 SECRET_KEY가 자동으로 생성됩니다 django-insecure-
는기본으로 앞에 붙어있고 뒤에 50글자인 SECRET_KEY가 붙어있는데요
만약 여러분들이 원하는 SECRET_KEY를 사용하고 싶다면 50자의 문자열을 \
, '
, "
을 사용하지 않고 만들어서 넣으면 됩니다!
이는 django의 여러 기능들에서 사용이 됩니다.
- django.contrib.sessions.backends.cache 이외의 session backend를 사용하고 있거나
- 기본 get_session_auth_hash()를 사용하는 모든 sessions
- CookieStorage 혹은 FallbackStorage 를 사용하는 모든 messages
- 모든 PasswordResetView
- 다른 키가 제공되지 않는 암호화 서명 사용 시
출처 : 초보몽키님 블로그
또한 로그인 시에 사용하는 인증,인가시에도 토큰을 발급할때 활용되기도 합니다
django의 많은 보안 기능을 유지하기 위해서 시크릿 키는 숨길 필요가 있습니다
✨SECRET_KEY 숨기기
이제 이러한 SECRET_KEY를 숨겨 보겠습니다
먼저 BASE_DIR에 secrets.json 파일을 만듭니다 보통 프로젝트의 가장 루트 디렉토리가 BASE_DIR입니다(settings.py가 있는 폴더의 위 폴더)
settings.py가 있는 폴더또한 하나의 앱을 담당하는 폴더이므로startapp으로 app을 만들면 폴더가 생성되는 곳에 secrets.json파일을 만들어 주시면 되겠습니다
secrets.json
{
"SECRET_KEY" : "django-insecure-asdfasdfafdasdfasdfasfdasdfasdfasdfadsfasdfasdff(50글자)"
}
이 후 settings.py에서 json 패키지를 사용하여 시크릿 키를 가져와서 넣습니다
import os,json
from django.core.exceptions import ImproperlyConfigured
# SECURITY WARNING: keep the secret key used in production secret!
secret_file = os.path.join(BASE_DIR, 'secrets.json') # secrets.json 파일 위치를 명시
with open(secret_file) as f:
secrets = json.loads(f.read())
def get_secret(setting, secrets=secrets):
try:
return secrets[setting]
except KeyError:
error_msg = "Set the {} environment variable".format(setting)
raise ImproperlyConfigured(error_msg)
SECRET_KEY = get_secret("SECRET_KEY")
물론 딱히 에러 예외처리를 하지 않으실 분들은 함수를 만들지 않고 secrets[“SECRET_KEY”]로 바로 접근해서 사용하셔도 무관합니다
이후에 .gitigonre에 secrets.json을 명시해주면 위 파일은 git에 저장되지 않겠죠?
그럼 다들 보안을 생각하며 프로젝트를 진행해 보아요
댓글남기기