라이브러리는 도서관 아닌가요

[Django 4] Django settings.py의 SECRET_KEY 초기 보안 설정 본문

Django/Django 프로젝트

[Django 4] Django settings.py의 SECRET_KEY 초기 보안 설정

veryhi 2021. 10. 7. 16:16

 

이번에는 settings.py 파일에 있는 SECRET_KEY의 보안 설정을 살펴보기로 한다.
저번 포스트의 호흡이 길어서 이번 건 조금 짧게 다루는 걸로...ㅎ

 

 

 

저번 포스트( https://verycrazy.tistory.com/3?category=1016571 )에서

 

testproject/testproject/settings.py에 있는 내용을 살펴보면 아래와 같이 SECRET_KEY가 있다.

 

Django에서 무작위로 생성한 보안 키 값으로 보안이 중요한 프로젝트에서는 절대...

 

 

 

외부에 공개하면 안된다!

 

 

 

https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-SECRET_KEY 

 

...공식 문서에서도 권고한다.

 

 

 

...즉 저렇게 하면 안 된다는 말이다.

 

 

 

 

 

이 SECRET_KEY 값을 다루는 방법은 많지만 대게 .json 파일로 분리하여 관리한다.

 

아래와 같이 프로젝트 폴더 내에 .json 확장자로 파일을 생성한다.

 

 

 

 

 

그 다음 SECRET_KEY 값을 복사하여,

 

아래와 같이 json 형식을 지켜 내용을 구성한다.

 

(아래처럼 "더블 쿼테이션":(콜론)을 잊지 말자)

 

 

 

 

 

그리고 비게 된 SECRET_KEY의 자리에 아래와 같이 코드를 추가한다.

import json
from django.core.exceptions import ImproperlyConfigured
secret_file = os.path.join(BASE_DIR, '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 {0} environment variable".format(setting)
        raise ImproperlyConfigured(error_msg)

SECRET_KEY = get_secret("SECRET_KEY")

 

 

 

 

 

이렇게 하면 일차적으로 SECRET_KEY를 감춘 것이다.

 

( TMI: 정확하게는 로컬에 저장되어 있지만, 이를 읽어오는 방식으로 변경하여 코드 상의 노출을 없앴다. )

 

runserver를 시켜 정상적으로 동작하는지 확인하자. 전과 같이 동작하면 처리가 잘 된 것이다^^

 

 

 

혹시나 개발할 때 git을 사용한다면,
.gitignore를 만들고, secret.json 키워드를 등록하여
git에 push를 넣을 때 json 파일이 따라가지 않도록 막아주도록 하자.

 

 

 

아래는 Django에서 숨겨야 하는 모든 파일이나 값들을 모아둔 Gitignore 리스트이다.

https://www.toptal.com/developers/gitignore/api/django

 

 

 

필요에 따라 리스트를 잘 뽑아내어 사용하도록 하자.

 

 

 

실수로 SECRET_KEY가 노출되었다면 어쩌나?

 

 

 

1. 으... 개발자가 아니라 스파게티 요리사가 될 것만 같아. 과감히 프로젝트를 삭제하고 다시 시작한다.

 

 

 

2. 다음의 내용 따위를 구글링해보고

https://stackoverflow.com/questions/15170637/effects-of-changing-djangos-secret-key

key_generator의 방식을 이용해본다.

https://miniwebtool.com/django-secret-key-generator/

 

Django Secret Key Generator

Django Secret Key Generator

miniwebtool.com

혹은 코드를 이용해서 재생성한다. https://github.com/honux77/inflearn-django/blob/master/script/genkey.py

 

 

 

 

 

...끼치는 영향이 아주 없는 것 같지는 않다.

 

 

 

 

 

SECRET_KEY 분리 완료

 

Comments