- まちがえて
SECRET_KEY
をGitHubにプッシュしてしまった! - Django標準の機能で
SECRET_KEY
を生成したい!
このような疑問にお答えします。
SECRET_KEY
は、以下の条件を満たす必要があります。
- 5種類以上の文字を使用
- 50文字以上の長さ
これを自力で考えるのはとても大変なので、Django組み込みの関数を使って生成する方法をお伝えします。
DjangoのSECRET_KEYを再生成する方法
Django 組み込みの関数でキーを発行
DjangoでSECRET_KEY
を再生成するには、以下の関数を使います。
from django.core.management.utils import get_random_secret_key
# SECRET_KEYを生成する
new_secret_key = get_random_secret_key()
print(new_secret_key)
get_random_secret_key()
関数は、Djangoがsettings.py
のSECRET_KEY
を生成しているものなので安心して使えます。
環境変数で管理することでセキュリティ向上を目指す
SECRET_KEY
はハードコーディングせずに、環境変数として管理することが推奨されます。
もちろんget_random_secret_key()
を使ってから.env
に文字列を貼り付けても良いですが、ちょっと面倒なのでシェルスクリプトを作ってコマンド一つで実装できるようにしましょう。
スクリプトは以下になります。
#!/bin/bash
# OSの種類を判定
if [[ "$OSTYPE" == "darwin"* ]]; then
# MacOS
OS_TYPE="MacOS"
else
# その他のUNIX系OS(主にLinux)
OS_TYPE="Other"
fi
# DjangoでSECRET_KEYを生成
SECRET_KEY=$(python3 -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())")
# .envファイルのパスを指定
ENV_FILE=".env"
# .envファイルの存在確認
if [ -f "$ENV_FILE" ]; then
echo ".envファイルが見つかりました。SECRET_KEYを更新します。"
# OSに応じてsedコマンドを実行
if [ "$OS_TYPE" == "MacOS" ]; then
sed -i '' '/^SECRET_KEY=/d' "$ENV_FILE"
else
sed -i '/^SECRET_KEY=/d' "$ENV_FILE"
fi
echo "SECRET_KEY=$SECRET_KEY" >> "$ENV_FILE"
echo "SECRET_KEYを更新しました。"
else
echo ".envファイルが見つかりません。新しく作成します。"
echo "SECRET_KEY=$SECRET_KEY" > "$ENV_FILE"
echo ".envファイルを作成し、SECRET_KEYを設定しました。"
fi
# 変更の確認
echo "更新後の.envファイルの内容:"
cat "$ENV_FILE"
これをプロジェクトのルートディレクトリに配置して、以下のコマンドを実行します。
bash ./update_env_secret_key.sh
環境変数のSECRET_KEY
をsettings.pyで読み込むために、以下のように書き換えます。
import environ
# .envファイルのパスを指定
env = environ.Env()
environ.Env.read_env(".env")
SECRET_KEY = env("SECRET_KEY")
.gitignore
ファイルで.env
を Git 管理対象外にしておくことで、間違ってキーを公開してしまうことを防げます。
コメント