web-dev-qa-db-ja.com

機密キーファイルを保存/取得するための最良の方法は?

AWS EC2で実行されているウェブサーバーがあります。アプリが使用する環境に設定された約30のAPIキー/パスワード/その他(機密データ)があります。デプロイするたびに、新しいサーバーインスタンスを起動し、リポジトリをプルダウンしてアプリケーションをビルドします。アプリケーションの環境に配置するために、サーバーにキーを取得する方法が必要です。週に複数回展開しているため、これを手動で行うことはできません。また、キーをリポジトリに配置したくありません。すべてのキーでファイルを暗号化したとしても、反対側でファイルを復号化するためのキーが必要になります。私は解決策を用意していますが、キーを追加/変更する必要があるときはいつでも簡単ではありません。

これらのキーを環境に取り込むための良い方法を誰かが考えられますか?ありがとう!

5
trikosuave

私はこれに遅れていることを知っていますが、今この問題に直面している他の人に利益をもたらすかもしれません。

次の操作を実行できます。-データベースにマスターキーを配置する-コードリポジトリで実際のキーをチェックインするが、マスターキーで暗号化する。このチェックインされたキーは、パスワードで保護されたファイルにある可能性があります。

数か月前、AWSはKMS(キー管理サービス)と呼ばれる新しいサービスを考え出しました。安全で準拠した方法で実際のキーとそのマスターキーを管理します。

1
Fayez

同じ問題に直面して、私は最終的に、アプリケーションから要求されたときに、APIを介して暗号鍵を提供することを決定しました。

これにはいくつかの利点と欠点があります。

  • あなたはある種の封じ込め/制限に依存しています。私の場合、私たちがいたアーキテクチャに最適なのはIPファイリングです。
  • 重み付けが必要なIPスプーフィングのリスクがあります
  • aPIにより、一元化された構成を提供することもできました(リクエストに応じてキーと一緒に送信されます)
0
WoJ

すべてを理解できれば、2つのシナリオ(またはそれ以上)があると思います。

シナリオ1

新しい(暗号化された)キーをチェックし続けるスクリプトを作成できます。新しいものを見つけると(ハッシュによって検出されますか?)、それらをダウンロードし、ビルド用にすべてをセットアップします。 Pythonで作成した場合、30行未満になる可能性があります。

Obs 1:新しいキーを含むファイルは暗号化する必要があります。 AESのような対称的なものを使用することができ、秘密はエージェントで保持できます。

Obs 2:チェックに最適な方法は、Webサーバーがハッシュを生成し、エージェントのリクエスト時にハッシュを出力することです。

Obs 3:エージェントはキーをディスクに直接復号化しないでください。少し余分なトラブルが発生する可能性がありますが、メモリへのキーを復号化して、必要なファイルに変更を加えるだけの方が良いでしょう。

シナリオ2

エージェントは、Webの場所ではなくローカルディスクをチェックして、新しいキーを探します。使用可能な場合はいつでも、このロボットはそれを適切な場所に配置し、「チェック中」の場所をクリーンアップして、次のキー更新の準備をします。

SCP/SFTP/OTHER_ENCRYPTED_OPTIONを介してこのキーを更新でき、必要に応じてこのアップロード手順を自動化できます。

この方法では、新しいキーのアップロードを除いて、何も暗号化する必要はありません。

0
DarkLighting

キーを専用システムに残すネットワーク経由の暗号化サービスを提供できます。このような暗号化サービスにアクセスするための鍵は、特定のIPからのみ使用できるため、開発者と共有できます。有名なインターネットプロバイダーがSSL証明書に対してこれを行いました(名前を忘れました)。

0
Enos D'Andrea