APIキー、データベース認証情報、その他の設定値といった機密情報を保護するには、環境変数を安全に設定することが極めて重要です。環境変数は動的に名前が付けられる値であり、コンピュータ上のプロセスの動作に影響を与えるため、設定データをコードベース外に保存することが可能になります。
環境変数を安全に管理するためのベストプラクティスは以下の通りです:
安全性の基本原則
-
機密情報をコードとバージョン管理から除外する 機密情報をアプリケーションのソースコードに直接ハードコードしないでください。環境変数を使用すれば、設定データをコードベースとは別に管理でき、アプリケーションのソースコードを変更せずに変更を適用できます。同様に、機密データをGitなどのバージョン管理システムにコミットすべきではありません。
-
ローカル開発には
.envファイルを使用する ローカル開発では、環境変数管理に.envファイルが一般的かつ効果的です。これらのファイルがリポジトリにコミットされないよう、必ず.gitignoreに追加してください。 -
例を提供: リポジトリに
.env.exampleファイルを含め、機密値を含まない必要な環境変数名を明記しましょう。これにより他の開発者がローカル環境を設定しやすくなります。 -
本番環境では専用のシークレット管理ツールを活用 本番環境では、セキュリティリスクと管理の複雑さから、
.envファイルのみに依存することは推奨されません。代わりに、HashiCorp Vault、AWS Secrets Manager、Azure Key Vault、Google Secret Managerなどの専門的なシークレット管理ソリューションを使用してください。これらのツールは暗号化されたストレージ、アクセス制御、シークレットローテーションなどの機能を提供します。 -
環境ごとに変数を分離する 各環境(開発、ステージング、本番)ごとに固有のシークレットと設定を使用します。これにより、ステージング環境が誤って本番データベースを指すといった問題を防止できます。
-
起動時の環境変数検証 アプリケーション起動時にルーチンを実装し、必要な環境変数がすべて設定され、正しい形式であることを確認します。これにより、設定の欠落や誤りを早期に検出し、実行時エラーを防止できます。
ツールと手法
.envファイル: ローカル開発には簡便ですが、本番環境には不向きです。dotenv(Node.js)やpython-dotenv(Python)などのライブラリは、これらのファイルから変数をロードするのに役立ちます。- プラットフォーム固有の変数ストレージ: クラウドプロバイダーは、暗号化やアクセス制御を伴う安全な環境変数の保存・注入メカニズムを提供しています。
- コンテナ化された環境: DockerやKubernetesでは、専用のシークレットメカニズムを使用します。これらは環境変数として注入するのではなく、値をファイルとしてマウントすることが多く、露出リスクを低減します。
避けるべき行為
- シークレットのハードコーディング: 機密データをコードに直接埋め込まないでください。
- .envファイルの不適切な共有: 電子メールやチャットでの.envファイル共有は避けてください。共有がどうしても必要な場合は、セキュアな保管庫や暗号化転送方法を使用してください。
- 環境間で変数を混在させる: 環境固有の変数が適切に分離されていることを確認してください。
- 古いキーの失効を忘れる: 古い認証情報や侵害された認証情報は定期的に更新・失効させてください。