いますぐ.envファイルの使用をやめよう!
目次
はじめに 👋🏽
大規模企業システムに取り組んできた私は、99%のJavaScriptのチュートリアルが本番環境の設定や秘密情報のために.env
ファイルを使うように言っていることにがっかりしています。それは愚かなことです。
このコミュニティを悩ませている行動を正す時が来ました。.env
ファイルの問題と究極の解決策を探ってみましょう。
.envファイルの問題点 🚫
1. .envファイルの保管
問題は…ファイルです。あなたの「本番」ファイルをリポジトリに保管するべきではありません。それをどこに置くのですか?直接VMのルートに?Dockerコンテナについては、秘密情報を直接イメージに焼き込みますか?イメージが漏れたら、誰もがあなたの秘密にアクセスできるわけです。
2. シークレット設定の更新
データベースのパスワードを更新する必要がある場合はどうなるでしょうか?.env
を更新する人は、ファイルのあらゆる秘密にアクセスできるようになります。これが悪い理由を説明する必要もありません。設定が更新するたびにそれを行う人はすべての秘密を見ることができます。
3. バージョン管理
ある新機能をデプロイする際に設定/秘密変数を更新する必要があり、何かが間違ってアプリケーションがロールバックされたとしましょう。
おっと、誰かが.env
の最後の値を覚えていますか?履歴がなく、アプリケーションは削除/上書きしたばかりの値を必要とします。
設定サーバーが救世主となる 🦸♂️
これらの問題の完璧な解決策は、設定サーバーを使用することです。設定サーバーは、設定と秘密情報を保管するための外部化されたアプリケーションです。秘密情報を環境全体で管理するための中心的なハブとみなされます。
AmazonのAWSパラメータストア、Googleシークレットマネージャ、またはオープンソース愛好家向けにはHashiCorp Vaultのように、多くのクラウドサービスが設定サーバーとして機能します。
ほとんどの場合、秘密情報や設定を作成したら、https://app.com/config/DB_PASSWORD/v1
のようなURLが提供されます。
設定サーバーがどのように.env
ファイルに関するすべての問題を解決するか見てみましょう。
.envファイルの保管問題の解決
設定サーバーを使用すると、すべての秘密は一箇所で集中管理され、暗号化され、承認したアプリケーションとユーザーのみがアクセスできるようになります。
2. シークレットの更新
設定サーバーを使用すると、秘密情報の更新ではなく、新しいバージョンを作成します。新しいバージョンを作成した後、.../config/DB_PASSWORD/v2
や.../config/DB_PASSWORD/v3
のように秘密情報のURLを更新します。
3. バージョン管理
ソリューション2にあるように、ほとんどの設定サーバーには自動的なバージョン管理があります。秘密を更新する必要がある場合は、新しいバージョンを作成し、アプリケーション内の設定URLを更新します。アプリケーションがロールバックされた場合は、元の設定URLを自動的に使用します。
この方法で、秘密は保護されおり、アプリケーションは以前の秘密で問題なくロールバックできます。
設定サーバーのその他のメリット ✅
シークレットの自動ローテーション
秘密情報は古くなる可能性があり、それによりシステムが危険にさらされることがあります!AWSのような一元化された設定は自動的なシークレットローテーションを提供します。
もしあなたのチームまたは組織が同じ設定を取得していれば、自動的に最新の値で更新されます。Slackで送る必要もなく、「信頼できる」開発者に依頼する必要もなく、.env
ファイルの更新を忘れる可能性もありません。簡単で無痛です!
VPCエンドポイント
設定サーバーは通常、VPC上にホストされており、サービスにローカルホストのような接続を提供します。これにより、秘密をインターネットにさらすことなく、また外部の誰かがサーバーに問い合わせることを防ぎながら、秘密情報を引き出すことができます(ほとんど遅延がありません)。
監査ログ
秘密が漏れたのか?設定サーバーは通常、秘密がいつ、どこでアクセスされたかをチェックできる監査ログを持っています。
更新された設定によりエラーが発生したのか?それが最後にいつ更新されたのかを確認し、必要に応じてすべてのサービスに対してグローバルアップデートを実行します。プレーンテキストファイルの編集は必要ありません。
最後に 💭
今、開発者たちは本番サービスに中央集権的な設定を使用し始めることを願っています。.env
ファイルは信頼性がなく、アクセス管理、バージョン管理、安全な更新がありません。
私が言いたいのは、.env
ファイルには目的がないということではありません。これらはローカルや開発指向の環境に使用できます。
私が言いたいことは、特に私のデータがあなたのサービスにある場合、貴重な秘密を単純なファイルに保存しないでください。
著者について 👨🏾💻
私はグレゴリー・ゲインズで、Googleでソフトウェアエンジニアをしています。良い記事を書こうとしています。もっとコンテンツが欲しい場合は、Twitterの@GregoryAGainesでフォローしてください。
さあ、素晴らしい何かを創造してみましょう!質問があれば、Twitter(@GregoryAGaines)で私に連絡してください。話をしましょう。
読んでいただきありがとうございます!
こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/gregorygaines/stop-using-env-files-now-kp0