Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- pyladies
- flask
- 원티드
- React
- 네트워크
- env
- 파이콘코리아
- codepresso
- 전문가를위한파이썬
- git
- Python
- pyladiesseoul
- mongodb
- 패스트캠퍼스
- 코드프레소
- cleancode
- 깃
- 알고리즘
- 플라스크
- javascript
- fluentpython
- 프리온보딩
- 예리님
- js
- 리액트
- 위코드
- 환경변수
- AWS
- 파이썬
- 코테
Archives
- Today
- Total
개발자가 내팔자
[Flask] .env로 환경변수를 관리하여 보안이 든든한 서버를 개발해보자 (dotenv) 본문
Flask에서 dotenv로 관리하기
https://flask.palletsprojects.com/en/2.1.x/tutorial/factory/#the-application-factory
플라스크 공식문서 튜토리얼을 보면 SECRET_KEY
가 훤히 노출되어 있는 것을 볼 수 있다.
아무리 튜토리얼이라지만 너무 불편하다. 으으
우리는 보안까지 신경쓰는 멋진 개발자이기 때문에 dotenv를 이용하여 이러한 중요한 정보들을 은밀하게 관리하기로 한다.
import os
from flask import Flask
def create_app(test_config=None):
# create and configure the app
app = Flask(__name__, instance_relative_config=True)
app.config.from_mapping(
SECRET_KEY='dev',
DATABASE=os.path.join(app.instance_path, 'flaskr.sqlite'),
)
... ( 중략 ) ...
return app
패키지 설치
$ pip install python-dotenv
.env
파일 만들기
.env 파일은 절대로 외부에 공개되어서는 안된다.
시크릿 키나 비밀번호 같은 중요한 정보들을 담고 있기 때문이다.
그렇기 때문에 보통 .gitignore
같은 곳에 아래와 같은 문자열을 추가한다.
(참고로 앞에 .이 붙은 파일들은 숨겨진 비밀의 파일이라는 뜻이다. 터미널에서 그냥 ls
명령어를 쳐도 보이지 않는다.
# Environments
*.env
.env.*
아래는 실제 내가 운영하고 있는 서비스에서 사용하는 .env.sample
파일이다.
보안상의 문제로 인해 Rvalue를 모두 지워놨는데 원래는 key=value 형식으로 되어 있다.
개발 환경에 따라 .env.local
/ .env.dev
/ .env.prod
이런 식으로 env파일을 분리해놨다.
PORT=
API_EXTERNAL_PORT=
DB_HOST=
DB_PORT=
DB_NAME=
DB_USER_NAME=
DB_USER_PASSWORD=
REDIS_HOST=
REDIS_PORT=
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
GITHUB_CALLBACK_URL=
JWT_SECRET=
EMAIL_AUTH_EMAIL=
EMAIL_AUTH_PASSWORD=
EMAIL_HOST=
EMAIL_FROM_USER_NAME=
EMAIL_ENDPOINT=
FRONT_URL=
SLACK_HOOK_URL=
AWS_REGION=
AWS_ACCESS_KEY=
AWS_SECRET_KEY=
AWS_S3_UPLOAD_BUCKET=
ACCESS_TOKEN_KEY=
ORIGIN_LIST=
코드에 적용해보기
from dotenv import load_dotenv
load_dotenv(verbose=True) # take environment variables from .env.
def create_app(test_config=None):
# create and configure the app
app = Flask(__name__, instance_relative_config=True)
# Code of your application, which uses environment variables (e.g. from `os.environ` or
# `os.getenv`) as if they came from the actual environment.
app.config.from_mapping(
SECRET_KEY=os.getenv('SECRET_KEY'),
DATABASE=os.path.join(app.instance_path, 'flaskr.sqlite'),
)
... ( 중략 ) ...
return app
여기까지 해냈다면 축하한다!
이제 다른 사람들은 우리 코드를 아무리 뒤져봐도 secret_key가 무엇인지 결코 알 수 없을 것이다.
실수로 외부 유출을 하지 않는 한 말이다!!
모두들 소중한 보안을 위해 .env 파일에 꼭꼭 잘 숨기길 바란다. 이상!
https://pypi.org/project/python-dotenv/
'WEB > Back-end' 카테고리의 다른 글
[Ruby on Rails] 공식문서와 함께 하는 30분 만에 블로그 만들기! - 게시판 꾸미기/유효성검증 (0) | 2022.08.08 |
---|---|
[Ruby on Rails] 공식문서와 함께 하는 30분 만에 블로그 만들기! - 게시판 CRUD (0) | 2022.08.08 |
[MongoDB] JSON과 BSON의 차이 (번역) (0) | 2022.08.05 |
[Flask] PyMongo로 Flask + mongoDB로 DB 연결하기 (0) | 2022.08.02 |
[MongoDB] PyMongo MongoEngine의 차이는? (번역) (0) | 2022.08.02 |
Comments