私は、少数のPHP、RailsおよびPerl(CGI)アプリケーションが使用されている「レガシー」インフラストラクチャのアップグレードに取り組んでいます。歴史的に、これらのアプリケーションは、データベース資格情報が散りばめられて書かれてきましたプログラム変数としてのすべてのソースコード。
これを変更する方法を検討しています。 1つの提案は、すべてのDBクレデンシャルをApacheに移動することを提案しています/etc/Apache2/envvars
ファイル。別の提案は、ハシコープの vault の使用を提案しています(この獣がどのように機能するかを完全に理解してはいけません)。
envvars
メソッドの方がいいようですが、これは、侵害されたアプリケーションが他のアプリケーションのDBクレデンシャルにフルアクセスできることを意味すると思います。ボブの侵害された「todoリスト」がApache環境変数を介してHRアプリケーションの資格情報を不必要に侵害しないようなアプリケーションに対して、より良いアプローチが何らかの種類のパーティション分割を含むかどうか疑問に思っています。
ボールトは..奇妙です。私の知る限りでは、データベースに一時的なDB資格情報が作成されます。私はそれがどのように機能するのか完全に理解していないので、それが適切かどうかはわかりません。
Webサーバー上のDB資格情報を保護するためのベストプラクティスは何ですか?ソースコードのままにしておくよりは良いことですが、ここで大きな変更を行う場合は、誤解があるため、再度行う必要はありません。リンク here および here については、ほとんど議論せずに調べました。
プロダクションシークレットを保護するために使用できる多くのツール/システムがあります。それらの多くは、ある種のKMS(キー管理システム)やHSM(ハードウェアセキュリティモジュール)を利用して、アプリケーションが本番環境のシークレットにアクセスするために使用できるマスターキーを格納します。 素晴らしいオープンソースソリューション のいくつかをご覧ください。
たとえば、Lyftの Confidant は、暗号化されたペイロードをDynamoDBに格納する秘密管理システムです。マスターキーはAWS KMSによって管理およびアクセス制御されます。 HashiCorp Vaultも確かなオプションです(ただし、機能セットが包括的すぎる可能性があります)。これは、同様の機能セットに加えて、自動mysql DB資格情報ローテーションなどの高レベルの機能を提供します。ユースケースと本番環境のセットアップに基づいて、選択して選択できるはずです。
Vaultは、完全なリースと日付/時刻の制約が組み込まれているため、資格情報を管理するだけでなく、資格情報を安全に保つための優れたソリューションです。
このインスタンスでは、dB資格情報を格納することを検討しているだけです。envarはかなり標準的なものであり、envarファイルをソース管理にコミットしないでください。
また、これらのすべてのデータベースにはバインドされたインターフェースがあるため、ローカルホストまたはファイアウォールによって保護/フィルタリングされている固定IP範囲のいずれかに正しくバインドすることを確認することも重要です。この方法では、dB PWが公開されていても、リモートアクセスできません。