1. ホーム
  2. python

[解決済み] バージョン管理システムで秘密鍵とパスワードを安全に保存するにはどうすればよいですか?

2022-06-10 20:10:35

質問

私は、開発サーバーと本番サーバーのホスト名やポートなどの重要な設定をバージョン管理システムで管理しています。しかし、私はそれが バッドプラクティス であることはわかっています。 秘密 (秘密鍵やデータベースパスワードのような) 秘密を VCS リポジトリに保存します。

しかし、パスワードは--他のどんな設定とも似ていますが--バージョン管理されるべきもののように思われます。そのため はどのようなものでしょうか?

を維持することになると想像しています。 秘密 を自分のファイルに保存して、そのファイルに その ファイルを暗号化し、バージョン管理します。しかし、どのような技術なのでしょうか?そして、これを適切に行うにはどうしたらよいのでしょうか?もっと良い方法はないのでしょうか?


私は一般的に質問していますが、私の特定の例では、秘密キーとパスワードは Django/Python を使用したサイトの git github .

また 理想的な 例えば、暗号化されたパスワードファイルが変更された場合、パスワードを要求するスクリプトが実行され、所定の位置に復号化されます。


編集:わかりやすくするために、私は am を格納する場所について質問しています。 生産 の秘密です。

どのように解決するのですか?

Herokuのプッシュ 環境変数の使用について を利用することを推奨します。

このような設定値を処理するための従来のアプローチは、それらをソースの下に置くことです - ある種のプロパティ ファイルに。これはエラーが発生しやすいプロセスであり、アプリ固有の設定を持つ別の (そして非公開の) ブランチを維持しなければならないことが多いオープン ソース アプリでは特に複雑です。

より良い解決策は、環境変数を使用し、キーをコードから除外することです。従来のホストまたはローカルで作業する場合、bashrc で環境変数を設定できます。Herokuでは、設定変数を使用します。

Foremanと .env ファイル Heroku は環境変数のエクスポート、インポート、同期を行うためのうらやましいツールチェーンを提供します。


個人的には、コードと一緒に秘密鍵を保存するのは間違っていると思います。これはソース管理とは根本的に矛盾しています。 コードに外在するサービス . 1つの利点は、開発者が HEAD をクローンして、何の設定もなしにアプリケーションを実行できることです。しかしながら、開発者が歴史的なコードのリビジョンをチェックアウトしたとします。そのコピーには昨年のデータベースパスワードが含まれているため、アプリケーションは今日のデータベースに対して失敗します。

上記の Heroku の方法では、開発者は昨年のアプリケーションをチェックアウトし、今日のキーで構成し、今日のデータベースに対して正常に実行することができます。