[django] SECRET_KEY 분리하기

업데이트:

안녕하세요!👋
장고에는 프로젝트를 생성하면 SECRET_KEY가 주어지는데 이를 git사이트에 코드를 올릴때 공개되지 않도록 숨기는 방법에 대해 적어보려 합니다

🙏요약

이번 글에서는 django 시크릿 키에 대한 설명과 이를 분리하여 git등에서 소스를 공개할 때 숨기는 방법에 대해 알아보겠습니다.

  1. django의 시크릿 키
  2. SECRET_KEY 분리 및 숨기기

📔SECRET_KEY

image

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에 저장되지 않겠죠?
그럼 다들 보안을 생각하며 프로젝트를 진행해 보아요

긴글 봐주셔서 감사합니다 안녕 👋

댓글남기기