2월 19, 2024

Django secret key 관리하기

https://www.programmingstory.com/2024/02/django-diary-6-crud-delete.html

지난 포스팅에서 간단한 Diary web을 만들었고 이를 git에 올렸더니 위와 같은 경고 메세지가 떴다. 


즉 내가 만든 github repository가 위험이 있다는 것이다. 즉 원래같으면 

GitGuardian에서 위와 같이 떠야 하는데, At risk가 떴다는 것은 무엇인가를 해결해야 한다는 뜻이다. 

자세히 에러 문구를 보면 위와 같이 open secret incident가 포함되어 있다고 나와있다. 에러 메세지를 더 클릭해보면 settings.py에서 SECRET_KEY가 포함되어 있고 이 secret_key는 비밀 값이기 때문에 프로젝트 코드에 포함되면 안되며, github에도 올리면 안된다. 

 

그래서 우리는 이러한 시크릿 키를 별도의 JSON 파일에 적어서 별도로 관리해주게 된다. 먼저 그럼 우리는 secrets.json 파일을 만들어주도록 하자.

 

secrets.json 파일을 만들고 아래와 같이 코드를 추가해주자.

{
    "SECRET_KEY": "<Django secret key>"
}

 

또는 settings.py에 원래 존재하던 secret_key 코드를 그대로 적어두어도 된다.

 

그리고 이제 settings.py에 들어가서 코드를 아래와 같이 수정해준다.

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

BASE_DIR = Path(__file__).resolve().parent.parent
ROOT_DIR = os.path.dirname(BASE_DIR)
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")

 

그런 다음에 이를 secret key를 git에는 ignore 해주겠다는 뜻으로 .gitignore에 다음과 같이 추가해준다.

# .gitignore
secrets.json

이런식으로 수정해주면 secret key를 별도로 관리할 수 있게 되며, git에서도 secret incident라는 알림이 사라지는 것을 볼 수 있다.