バージョン管理システムに秘密鍵とパスワードを安全に保存するにはどうすればいいですか? 質問する

バージョン管理システムに秘密鍵とパスワードを安全に保存するにはどうすればいいですか? 質問する

私は開発サーバーと本番サーバーのホスト名やポート番号などの重要な設定をバージョン管理システムに保存しています。しかし、悪い習慣保つ秘密(秘密鍵やデータベース パスワードなど) を VCS リポジトリに保存します。

しかし、パスワードは他の設定と同様にバージョン管理する必要があるようです。それでパスワードのバージョン管理を維持する適切な方法は何ですか?

それは、秘密独自の「シークレット設定」ファイルでそれファイルを暗号化し、バージョン管理します。しかし、どのような技術ですか? また、これを適切に行うにはどうすればよいでしょうか? これよりも優れた方法はあるのでしょうか?


私は一般的にこの質問をしていますが、私の特定の例では、秘密鍵とパスワードを保存したいと思っています。ジャンゴ/Python使用中のサイトギットそしてギットハブ

また、理想的解決策としては、git でプッシュ/プルするときに魔法のようなことを行います。たとえば、暗号化されたパスワード ファイルが変更されると、パスワードを要求し、それを所定の場所に復号化するスクリプトが実行されます。


午前 生産

ベストアンサー1

機密設定ファイルを暗号化しながらも、バージョン管理でファイルを維持したいというあなたの考えは、まさにその通りです。おっしゃるとおり、最善の解決策は、Git が特定の機密ファイルをプッシュするときに透過的に暗号化し、ローカル (つまり、証明書を持つ任意のマシン) で設定ファイルを使用できるようにし、Git や Dropbox、または VC でファイルを保存している他のユーザーが情報をプレーンテキストで読み取ることができないようにすることです。

プッシュ/プル中の透過的な暗号化/復号化に関するチュートリアル

この要点出典: github.comGit の smudge/clean フィルター ドライバーを openssl とともに使用して、プッシュされたファイルを透過的に暗号化する方法についてのチュートリアルを示します。いくつかの初期設定を行う必要があります。

仕組みの概要

.gitencrypt基本的には3つのbashスクリプトを含むフォルダを作成します。

clean_filter_openssl 
smudge_filter_openssl 
diff_filter_openssl 

これらは Git によって復号化、暗号化、および Git diff のサポートに使用されます。マスター パスフレーズとソルト (固定!) はこれらのスクリプト内で定義されており、.gitencrypt が実際にプッシュされないようにする必要があります。clean_filter_opensslスクリプトの例:

#!/bin/bash

SALT_FIXED=<your-salt> # 24 or less hex characters
PASS_FIXED=<your-passphrase>

openssl enc -base64 -aes-256-ecb -S $SALT_FIXED -k $PASS_FIXED

smudge_filter_open_sslおよびについても同様ですdiff_filter_oepnssl。Gist を参照してください。

機密情報を含むリポジトリには、.gitencrypt ディレクトリ (Git がプロジェクトを透過的に暗号化/復号化するために必要なものがすべて含まれています) を参照し、ローカル マシンに存在する .gitattribute ファイル (暗号化されていない状態でリポジトリに含まれています) が必要です。

.gitattributeコンテンツ:

* filter=openssl diff=openssl
[merge]
    renormalize = true

.git/config最後に、ファイルに次のコンテンツを追加する必要があります。

[filter "openssl"]
    smudge = ~/.gitencrypt/smudge_filter_openssl
    clean = ~/.gitencrypt/clean_filter_openssl
[diff "openssl"]
    textconv = ~/.gitencrypt/diff_filter_openssl

これで、機密情報を含むリポジトリをリモート リポジトリにプッシュすると、ファイルは透過的に暗号化されます。 .gitencrypt ディレクトリ (パスフレーズを含む) があるローカル マシンからプルすると、ファイルは透過的に復号化されます。

ノート

このチュートリアルでは、機密設定ファイルのみを暗号化する方法については説明していないことに注意してください。これにより、リモート VC ホストにプッシュされるリポジトリ全体が透過的に暗号化され、リポジトリ全体が復号化されるため、ローカルで完全に復号化されます。必要な動作を実現するには、1 つまたは複数のプロジェクトの機密ファイルを 1 つの sensitive_settings_repo に配置することができます。この透過的な暗号化手法が Git サブモジュールでどのように機能するかを調べることができます。http://git-scm.com/book/en/Git-Tools-サブモジュール機密ファイルを同じリポジトリに置く必要がある場合。

固定パスフレーズを使用すると、攻撃者が多数の暗号化されたリポジトリ/ファイルにアクセスできる場合、理論的にはブルートフォース攻撃の脆弱性につながる可能性があります。私の意見では、その可能性は非常に低いです。このチュートリアルの下部にある注記に記載されているように、固定パスフレーズを使用しないと、異なるマシン上のリポジトリのローカル バージョンでは常に「git status」で変更があったことが示されます。

おすすめ記事