Python-dotenvのインストール、使い方について詳しく解説する

スポンサーリンク

今日は簡単なモジュール、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ファイルから必要なキーを取得するために使用します。

2.3 アプリケーションの分散開発に関する提案

開発段階では、必要な認証情報をチームに伝え、.envファイルのコピーを各自に提供するとよいでしょう。

こうすることで、彼らは問題なくプロジェクトに取り組み、テストやデバッグを行うことができます。

万が一、誤って公開してしまった場合でも、新しい秘密鍵を生成するオプションがあるので、慌てる必要はありません。

さらに、安全対策として、デプロイ前に新しいキーを生成しておくことは一般的に良いアイデアです。

まとめ

セキュリティ上の脆弱性の多くは、漏洩した認証情報に対処することで解決できます。

また、 python-dotenv は開発中や開発後に、より安全なプロジェクト環境を構築するために役立ちます。

これらは、多くのウェブベースのアプリケーションや、DjangoやFlaskのようなフレームワークに適用することができます

全体として、.envファイルのコピーを誰かが手に入れることができないと知って、夜、快適に眠ることができる感覚があります。

より安全なシステムに、乾杯!

参考文献

  • 公式 python-dotenv ドキュメント
  • dotenv モジュールのソースコード
タイトルとURLをコピーしました