Ossian Story
article thumbnail

 


[ Django Setting.py의 SECRET_KEY 보호하기 ]

  • Setting.py에는 Django의 SECRET_KEY, Database 설정 계정의 암호 등 민감정보가 텍스트로 기록되어 있음
  • 이러한 민감정보를 숨기기 위해 민감정보를 json 파일로 만들고 숨김, 숨겨진 민감정보 json 파일을 읽어들이는 방식으로 직접입력된 민감정보 텍스트를 보호
  • 민감정보를 입력하기 위한 json 파일 생성
$ pwd
/opt/todo

$ vi .secrets.json

--------------------------------------------------------------------------------
{
  "SECRET_KEY": "[Django의 SECRET_KEY 입력]",
  "DATABASE": "[Database 연결 계정의 암호 입력]"
}
--------------------------------------------------------------------------------

 

  • Django Setting.py 설정 변경
$ vi /opt/todo/todo/settings.py

-----------------------------------------------------------------------------------------
# Json 모듈 불러오기
import os, json
from django.core.exceptions import ImproperlyConfigured


# 기존 Django의 SECRET_KEY 정보 삭제
secret_file = os.path.join(BASE_DIR, '.secrets.json')


# secrets.json 파일을 읽은 후 secrets 변수에 저장
with open(secret_file) as f:
    secrets = json.loads(f.read())

# get_secret 함수를 생성하여 호출 시 해당 키 값 리턴
def get_secret(setting, secrets=secrets):
    try:
        return secrets[setting]
    except KeyError:
        error_msg = "Set the {} environment variable".format(setting)
        raise ImproperlyConfigured(error_msg)

# get_secret 함수를 호출하여 json SECRET_KEY 키의 값 적용
SECRET_KEY = get_secret("SECRET_KEY")

....


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'todo',
        'USER': 'todo_admin',
        
        # Database 연결 계정의 Password도 동일하게 Json의 DATABASE 키의 값 적용
        'PASSWORD': get_secret("DATABASE"),
        
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'OPTIONS': {
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
            'charset': 'utf8mb4',
        },
    }
}

-----------------------------------------------------------------------------------------

 

  • runserver, makemigrations & migrate 등의 명령어를 통해 정상적으로 작동하는지 확인

 

profile

Ossian Story

@ossians