今日は簡単なモジュール、Python-dotenvモジュールを見てみましょう。
Webサイトでは、コードの一部がエンドポイントや特定のドメインから情報を受け取る必要があるため、このWebサイトのセキュリティがどのように脅かされるのかと思うことがよくあります。
この良い例が、GitHub における SECRET_KEYS の利用や、Django プロジェクトにおけるこれらの利用です。
開発中にこれらのキーやシークレットを公開するのはいいかもしれませんが、誰にでも公開される本番の段階でも公開し続けるのはかなりリスキーです。
これは、悪意のある人がDDoS攻撃をしたり、あなたのウェブサイトやアプリケーションから重要な情報を取得しようとしたりする多くの問題につながるかもしれません。
では、この問題を解決し、認証情報を安全に保つにはどうしたらいいのでしょうか?
幸いなことに、python-dotenvモジュールがあり、外部に公開することなくSECRETSやKEYを扱うことができ、開発中も安全に保つことができます。
1.0 python-dotenv はどのように機能するのでしょうか?
あなたの質問に簡単に答えるなら、それは一箇所にすべての証明書を含むファイルの概念を導入することです。
このファイルは開発システムまたはホスティングシステムにのみ存在し、コードの一部としては利用できないため、認証情報が必要なときはいつでもどこでもこのファイルを使用することになりますが、キー自体は一切公開されません。
1.1 このファイル名は何ですか?
このファイルは、ほとんどの場所で拡張子が .env
となっており、この記事でもそのような名前になっています。
1.2 コードでこのファイルにアクセスする?
この SECRET_KEYS をコードで使用するために、python-dotenv
モジュールという便利なモジュールを使用します。
python-dotenvモジュールはプロジェクトの
settings.py` ファイルで設定され、かなり目立たないようにキーにアクセスできるようになっています。
これはとてもシンプルなアイデアで、これが終わる頃には私が言っている意味がわかると思いますので、早速使ってみましょう。
python-dotenvのインストール
python-dotenvモジュールのインストールは非常に簡単で、
pip` マネージャーのための簡単なコマンドで実行できます。
pip install -U python-dotenv
|
python-dotenv モジュールの使用
インストールが完了したら、残りのコードを設定して、二度と認証情報を公開する心配がないようにしましょう。
2.1 .env のセットアップ
プロジェクトファイルでクレデンシャルを使おうとする前に、まず .env
ファイルに詳細を記録しておかないと使えないことに注意することが重要です。
そこで、.env
ファイルを作成し、プロジェクトで使用するクレデンシャルを入力してみましょう。
# .env file SECRET_KEY= v %)9n7kg^65(4-uir6!pa@oqqsdn8agv9h8_ #ohn*55$th-gff
DOMAIN=tester.org EMAIL=admin@${DOMAIN} |
ランダムに生成されたSECRET_KEY、DOMAIN、EMAILを.env
ファイルに挿入し、今のところこれで十分です。
2.2 settings.pyを使用して認証情報を解析する
多くのプロジェクトが、プロジェクト特有の設定を指定するために settings.py
ファイルを使用しています。
Django Framework では、 settings.py
ファイルは、使用するプロジェクトのコンポーネントに関する情報、およびプロジェクトを接続するために重要な仕様を記録するために使用されます。
Flask Frameworkでも settings.py
が作成される背景には、同じような理由があります。
そのため、今回は例として python-dotenv
モジュールを使ってプロジェクトで SECRETS を扱うために役立つ settings.py
を独自に作成します。
# settings.py ## importing the load_dotenv from the python-dotenv module from dotenv import load_dotenv
## using existing module to specify location of the .env file from pathlib import Path
import os
load_dotenv() env_path = Path( '.' ) / '.env'
load_dotenv(dotenv_path = env_path)
# retrieving keys and adding them to the project # from the .env file through their key names SECRET_KEY = os.getenv( "SECRET_KEY" )
DOMAIN = os.getenv( "DOMAIN" )
EMAIL = os.getenv( "EMAIL" )
|
既存の settings.py
を編集したい場合は、自由に編集してください。
- python-dotenv モジュールのインポート
このコードでは、環境変数のキーを設定する load_dotenv
機能のために、 python-dotenv
をインポートしています。
これは、.env
ファイルにあるすべての SECRETS を、このプロジェクトの環境変数としてアクセスできるようにすることを意味します。
.envファイルにアクセスするために
pathlibモジュールから
Path関数をインポートし、
python-dotenvモジュールによって作成された環境変数のキーを操作するために
os` モジュールをインポートしています。
- env_path 変数
env_path は .env
ファイルが格納されているディレクトリを指定する手段として使用します。
この例では、settings.py
と同じディレクトリに保存されているので、カレントディレクトリを指定します。
- os.getenv 関数
これは、環境変数のキーが存在する場合に、それを取得するために使用される関数です。
この関数は、.env
ファイルから必要なキーを取得するために使用します。
この記事もチェック:Pythonのpyfigletモジュールを使ってASCIIアートを作成する方法
2.3 アプリケーションの分散開発に関する提案
開発段階では、必要な認証情報をチームに伝え、.env
ファイルのコピーを各自に提供するとよいでしょう。
こうすることで、彼らは問題なくプロジェクトに取り組み、テストやデバッグを行うことができます。
万が一、誤って公開してしまった場合でも、新しい秘密鍵を生成するオプションがあるので、慌てる必要はありません。
さらに、安全対策として、デプロイ前に新しいキーを生成しておくことは一般的に良いアイデアです。
まとめ
セキュリティ上の脆弱性の多くは、漏洩した認証情報に対処することで解決できます。
また、 python-dotenv
は開発中や開発後に、より安全なプロジェクト環境を構築するために役立ちます。
これらは、多くのウェブベースのアプリケーションや、DjangoやFlaskのようなフレームワークに適用することができます。
全体として、.env
ファイルのコピーを誰かが手に入れることができないと知って、夜、快適に眠ることができる感覚があります。
より安全なシステムに、乾杯!
この記事もチェック:PythonでAnacondaのインストール、開発環境構築をする方法
参考文献
- 公式 python-dotenv ドキュメント
- dotenv モジュールのソースコード