취대넓얕
[기술면접] 13일차 문답 | 배포 시 주의점
째깍단
2023. 8. 4. 10:21
Django 프로젝트를 배포할 때, 노출되어서는 안되는 값은 어떤 것이 있습니까?
- DEBUG = False로 변경하여 디버깅 정보를 숨겨줌 = 디버깅 정보를 오픈하면 소스를 그대로 보여주는것
- database 와 관련된 정보 (username, password 등)
- Secret Key : 암호화 서명, 해싱등에 사용하는 값
- JWT토큰 설정
- ALLOWED_HOSTS : HTTP Host Header Attack 위협에 대응하기 위해서 비공개 처리
- AWS배포시 RDS, S3등 관련된 키 : AWS 계정 정보가 있기 때문에 비공개 처리
+ Django Secret Key는 왜 노출되면 안되는지?
장고에 SECRET_KEY가 없으면 프로그램이 동작하지 않고, 암호화 인증이 필요한 모든 곳에서 이용하므로 보안적으로도 중요
- SECRET_KEY 가 사용되는 곳
- django.contrib.sessions.backends.cache 이외의 다른 세션 백엔드를 사용하거나 기본 get_session_auth_hash()를 사용하는 경우의 모든 세션
- CookieStorage 또는 FallbackStorage를 사용하는 경우의 모든 메시지
- 모든 PasswordResetView 토큰 -다른 키가 제공되지 않는 한 암호화 서명 사용 등
Django 프로젝트를 배포할 때, 시크릿키를 노출하지 않는 방법에 대해서 설명하시오
장고에서는 프로젝트 생성 시 settings.py에 자동으로 SECRET_KEY를 생성해줍니다.
이 시크릿 키는 세션이나 토큰, 암호화된 서명에 사용되므로 외부에 노출되지 않도록 관리해야합니다.
시크릿 키를 노출하지 않는 방법으로 환경 변수 설정과 로컬 파일 생성이 있습니다.
환경변수 설정은 배포 도구에 따라 달라질 수 있지만, 기본적으로 .bashrc, .zshrc 등의 파일에 시크릿 키를 넣고 환경 변수를 설정한 후 settings.py에서 불러와 동적으로 키를 할당해줄 수 있습니다. 패키지 decouple 혹은 dotenv로 처리하기도 합니다.
로컬 파일을 생성하는 경우 .env나 json파일, my_settings.py 등의 파일을 생성하여 필요한 데이터를 저장하고, 마찬가지로 settings.py에 동적으로 할당해줍니다. 그리고 이 파일을 .gitignore에 추가하여 추적을 방지해야합니다.