はじめに
大学の授業で、入力されたアーティストと近しいアーティストのネットワーク図を作成するシステムを作ったので、今回は個人的な趣味で、そのシステムを発展させてWebアプリケーションを開発しました。その際、APIのアクセスキー(環境変数)をコードに直接記述してGitHubに(publicで)上げてしまうと情報セキュリティの問題があると気付き、環境変数をセキュアに管理する方法を調べたので、その備忘録を残します。
方法
.envファイルを使用します。
具体的には、python-dotenvモジュールを使用して.envファイルを読み込みます。
.envファイルを使用することのメリットは以下の通りです。
- 環境変数を一元管理でき、設定の変更や追加が簡単になる
- データベースの接続情報やAPIキーなどの機密情報をソースコードに直接書かずに済むため、セキュリティが向上する(
.gitignoreファイルに.envを記述することで、GitHub上に公開されずに済みます。.gitignoreファイルの作成は後述) - チームで開発する際に、個々の開発者が自身の環境に合わせた.envファイルを用意することで、他の開発者や本番環境の設定に影響を与えることなく作業できる
手順
1. python-dotenvモジュールをインストールする
$ pip install python-dotenv
コマンドプロンプト上あるいはVSCodeのターミナル上で、pipコマンドを使用して、python-dotenvモジュールをインストールします。
2.「.env」ファイルを作成する
ルートディレクトリの直下に以下の.envファイルを作成します。
自分の場合は前回記事で紹介したWebアプリケーションのプロジェクトがあるので、以下のようになります。
{プロジェクト名}/
├── static/
│ └── style.css
├── templates/
│ └── index.html
│ └── result.html
│ └── error.html
├── app.py
└── .env
自分はSpotify APIを使用していたので、.envファイルにそのクライアントIDとシークレットキーを記述しました。
export SPOTIFY_CLIENT_ID='XXXXXXXXXXXX'
export SPOTIFY_CLIENT_SECRET='YYYYYYYYYYY'
3.「.env」ファイルを読み込む
from dotenv import load_dotenv
import os
# .envファイルから環境変数を読み込む
load_dotenv()
#SpotifyAPIのアクセストークン情報
# 環境変数からSpotify APIのクライアントIDとシークレットを取得
client_id = os.getenv('SPOTIFY_CLIENT_ID')
client_secret = os.getenv('SPOTIFY_CLIENT_SECRET')
print(client_id) #client_idが表示される
print(client_secret) #client_secretが表示される
load_dotenv()を使用して.envファイルを読み込みます。これにより、.envファイルに書かれたアクセストークン情報が環境変数に設定されます。
そして、os.getenv()を使用して環境変数の値を取得します。print文で適切に表示されることを確認してください。該当の環境変数が存在しない場合、Noneが返されます。
「.gitignore」ファイルの作成
gitで管理する場合に.gitignoreファイルを作成し、その中にファイル名を書くことで、書かれたファイル名をgitの管理対象から外すことができます。
手順としては以下の通りです。ルートディレクトリの直下に以下の.gitignoreファイルを作成します。
{プロジェクト名}/
├── static/
│ └── style.css
├── templates/
│ └── index.html
│ └── result.html
│ └── error.html
├── app.py
├── .env
└── .gitignore
.env
上記のように作成することで、GitHubにpublicでプロジェクトを公開しても、.gitignoreファイルのおかげで、.envファイルは公開されずに済みます。
終わりに
今回は、APIアクセストークンなどの環境変数のセキュアな管理方法についてまとめました。次回以降では、GitやDockerの操作方法などを書こうと思います。
参考文献
以下の記事を参考にしました。ありがとうございました。