Django, git push 전 seceret_key 세팅

반응형

아마 노마드 쌤의 django 에어비앤비 클론 강의를 보낸때에는 이 내용을 알려주지는 않았던 것 같다.

(후반에 알려줄 수도 있지만 후반까지 안 보았기에...)

 

당장 클론 코딩을 하거나 토이 플젝을 할때는 크게 문제가 안되겠지만, 항상 이러한 부분은 습관을 들여야 한다고 생각한다.

해당 시크릿 키는 '보안 기능'과 관련이 있다.

이게 유출된다면 '유저의 패스워드'를 복호화하는 '해시 함수'가 유출되는 것이기에, 보안적으로 문제가 될 소지가 있다.

 

장고의 settings.py에 들어가면

SECRET_KEY = "본인의 고유 비밀 키"

해당 따옴표 안에 50자의 랜덤 문자로 구성된 비밀키가 들어가있을 것이다.

해당 키는 절대로 외부로 공개되어서는 안된다.

  • django.contrib.sessions.backends.cache 이외의 session backend를 사용하고 있거나,기본 get_session_auth_hash()를 사용하는 모든 sessions
  • CookieStorage 혹은 FallbackStorage 를 사용하는 모든 messages
  • 모든 PasswordResetView
  • 다른 키가 제공되지 않는 암호화 서명 사용 시 사용된다.

시크릿키는 위의 부문에서 사용된다. 그렇기에 비밀키가 노출되면 보안 부분이 취약해질 수 있다.

물론 이와같이 개인 클론코딩이나 토이 프로젝트같은 경우에는 전혀 문제될 것이 없지만 미리 알아두자는 취지에서 작성한다.

시크릿키를 분리하는 방법은 여러가지가 있겠지만 본인은 여기서 '환경변수패턴'을 이용하고자 한다.

  • zshrc 수정(bash shell을 쓰는 경우에는 bashrc or bash_profile을 수정하면 될 것이다)
❯ vim ~/.zshrc
export AIRBNB_SECRET_KEY='본인의 고유 비밀 키 추가'

vim 에서 입력할때는 해당 위치에서 i를 누르면 되고 나갈때는 esc를 누른후 :wq를 누르면 된다.

import os # 상단에 os를 추가해준다.
SECRET_KEY = os.environ["AIRBNB_SECRET_KEY"] # 시크릿키 부분을 환경변수에서 받아올 수 있게 설정

혹시나 환경변수를 인식하지 못하거나 존재하지 않을시에 대한 예외처리를 구성해줄 수도 있다

# settings.py
import os
from django.core.exceptions import ImproperlyConfigured


def get_env_variable(var_name):
  try:
    return os.environ[var_name]
  except KeyError:
    error_msg = "Set the {} environment variable".format(var_name)
    raise ImproperlyConfigured(error_msg)


SECRET_KEY = get_env_variable("AIRBNB_SECRET_KEY")

  • 동작 확인
❯ python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
January 01, 2021 - 05:34:23
Django version 2.2.5, using settings 'config.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

정상적으로 동작하는 것을 확인할 수 있다.

반응형