Back-End

[Django] SECRET_KEY 암호화 (github commit시 주의)

NIMHO 2023. 5. 2. 18:29
728x90

처음에 만들었던 project를 아무 생각 없이 github에 올렸다.

그냥 서버 여는 것만 해서 secret_key가 있다고 생각은 못했는데,

Django에서 secret_key가 노출됐다고 메일이 왔다.

 

secret_key가 노출되면 나중에 AWS를 이용해 실제 서버를 열고 배포했을 때,

잘못하면 요금 폭탄을 맞을 수 있다고 한다.

 

그래서 암호화하는 방법을 알아봤다.

728x90

secret_key값 분리하기

1. secrets.json

setting.py에 있는 secret_key값을 secret.json에 빼주기로 했다.

 

manage.py와 동일한 위치에 secret.json파일을 생성해 주고 아래 코드를 입력한다.

{
	"SECRET_KEY": "<본인 Secret_key>"
}

 

2. setting.py

그리고 setting.py도 수정해주어야 한다.

원래 있던 코드 윗부분을 아래와 같이 수정해 준다.

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


BASE_DIR = Path(__file__).resolve().parent.parent

secret_file = os.path.join(BASE_DIR, 'secret.json')

with open(secret_file) as f:
    secrets = json.loads(f.read())


def get_secret(setting):
    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에 바로 키값이 있었는데, get_secret을 통해서 찾아올 수 있다.

 

secret_file이라는 변수에 secret.json 파일을 담아준 뒤 해당 파일을 열고 secrets이라는 변수에 담아준다.

get_secret함수는 비밀 변수를 가져오거나 예외를 발생시키는 함수이.

json에 있는 'SECRET_KEY'를 가져오는 역할을 해준다.

 

3. gitignore 파일

이렇게만 하고 github에 올리면 secret.json을 만들어준 의미가 없다.

 

.gitignore파일에 secrets.json을 추가해 비밀값은 커밋에 포함되지 않도록 설정해 주면 된다.

gitignore은 원하지 않는 파일을 커밋 대상에서 제외시켜 주는 파일이다.

보안상 올리면 안 되는 파일이나 비밀스러운 파일은 gitignore에 추가해 주면 된다.

728x90