코딩공부/Python Django

django secret key 분리, secrets.json 생성

integerJI 2020. 5. 15. 22:44

git으로 프로젝트를 진행한다면 ( 2 ) - django secret key 분리하기


보고 배운 곳 : https://inma.tistory.com/83

 

.gitignore 설정하기 : https://integer-ji.tistory.com/179

 

해당 글을 보았다면 모두가 보는 공개된 장소 (Git)에는 중요한 정보를 올리지 않아야 한다.

 

django-admin을 통하여 project를 만들었다면

 

settings.py에 secret key가 생겼을 것이다.

 

우리는 이 key를 지켜야 한다

(AWS key 등 잘못하면 과금이 되기 때문에 모든 key는 자신의 지갑과 같다고 생각해야 한다.)


1. 왜 숨겨야 하나?

 

생성한 project 아래에 settings.py에 가보면 SECRET KEY가 있다. 

 

https://wayhome25.github.io/django/2017/07/11/django-settings-secret-key/

 

몽키님의 블로그를 봐보면 SECRET KEY가 노출될 경우

 

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

 

SECRET_KEY

Default: '' (Empty string)

A secret key for a particular Django installation. This is used to provide cryptographic signing, and should be set to a unique, unpredictable value.

django-admin startproject automatically adds a randomly-generated SECRET_KEY to each new project.

Uses of the key shouldn’t assume that it’s text or bytes. Every use should go through force_text() or force_bytes() to convert it to the desired type.

Django will refuse to start if SECRET_KEY is not set.

 

django 공식 문서 중..

 

그러니 우리는 SECRET KEY를 잘 관리해야 한다.

 

2. 분리하기

 

manage.py와 동일한 위치에 secrets.json파일을 만들어 settings.py에 있는 SECRET_KEY를 넣어줍니다.

 

{
    "SECRET_KEY" : "xxx"
}

 

3. settings.py에서 json 파일 읽어오기

import os, json
from django.core.exceptions import ImproperlyConfigured

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.1/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!

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 {} environment variable".format(setting)
        raise ImproperlyConfigured(error_msg)

SECRET_KEY = get_secret("SECRET_KEY")

 

기존에 있던 SECRET_KEY를 지워주고 해당 소스를 넣어주었다.

 

소스 참조 : https://inma.tistory.com/83

 

해당 소스를 넣고 runserver를 했을 때 정상적으로 django가 실행된다면 성공한 것이다.

 

 

4. .gitignore에서 secrets.json 제외시키기

이렇게 gitignore에 SECRET_KEY가 담긴 secrets.json를 제외시켜주면 끝!