2016-04-06 19 views
3

最近、環境変数を使用して資格証明をコンテナ内で実行するSpringベースのアプリケーションに注入する適切な方法を見つけようとしています。資格情報にDocker環境変数を使用する

正確なプロセスは、CMDをドッカーブートストラップシェルスクリプトは、エントリポイントとして実行

  • スクリプト
  • 実行スクリプトファイルの終わりにアプリケーション内部クレデンシャルの
  • エクスポート束
  • この方法では

、ドッキングウィンドウの容器にdocker inspectdocker exec [container_id] envやbashのどれとenv意志を実行しますこれらの環境変数を参照してください。ブートストラップスクリプトで注入したものは不透明です。

質問:このソリューションでは他に何か検討する必要がありますか?任意の明白な不具合?

私たちはドッカーの世界には新しかったので、シェルスクリプトによって注入された環境変数を作成することについて、この動作は表示されません。私たちは良い文書を見つけられませんでしたが、ちょうどそれがこのように働いていることを発見しました

PS。今後ドッカーはこの行動を変えるでしょうか?

ありがとうございます!

+0

どこにスクリプトを保存しますか?ホスト上のファイルですか?それとも、それをイメージに組み込みますか?スクリプトのソースファイルが見えることが懸念されますか? – Thilo

+1

スクリプトは画像に保存されます。さらにHashCorp ConsulとVaultを使用しました。このスクリプトはローカルVaultコマンドを呼び出して他のConsulコンテナから資格情報を取得します。資格情報はスクリプト内の画像にあります。 –

答えて

4

全体的には非常に良いアプローチのようです。

しかし、プロセスenvを検査する権限を持つ誰かから環境変数を隠すことはできないと思います。アプリケーションプロセスのプロセスID(コンテナ内またはホスト内)を調べると、その環境を/procに見つけることができるはずです。 docker envとして表示されませんが、それはまだどこかにあります。 また、そのような人物はおそらく直接ボールトに直接接続できます。

意味、はい、これは確かに、子プロセスの環境をコンテナ環境に表示することはありませんが、誰でも(あなたのホストマシンとコントロールドッカーに既にアクセスできる)から隠すことはありません。

この設定では、おめでとうございます。画像に信任状を組み込むよりもずっと優れています。

+0

ホストまたは内部のコンテナに「ハック」する権限のないアクセスを行います。アイデアはホストレベルで、特定のドッカーコマンドを使用しないように制限します(おそらくカスタムコードが必要です)。 docker exec [id] bash –

+0

@JamesJiang @Thilo Dockerプロセスの環境をホスト(またはコンテナ)から取得するのはかなり簡単です。 'ps aux'を使ってプロセスIDを探し、' cat/proc/id/environ'を使って全てのenv変数を取得してください。また、ユーザーが 'docker'コマンドを実行できる場合、おそらく' sudo'権限も持っています。 –

+0

@warmoveflowは、これらの変数の/ prod/id/environを検査することで、資格情報にアクセスする有効な方法です。しかし、ビルド時にドッカーの画像から資格情報が漏れてしまうことを心配する必要はありません。コンテナ自体からホストへの関心が今や活用されています。ホストがパブリックネットワークに公開されていなくても、ファイアウォールやプライベートネットワーク、ユーザー特権で十分に保護されている場合、これは実行可能な解決策になるはずですか? –

0

興味深い発見。環境変数は、あなたのアプリケーションが動作しているシェルセッションにとってローカルなものだからだと思います。 https://help.ubuntu.com/community/EnvironmentVariables

プロセスの局所性を参照してください。環境変数の

値は、彼らが設定されたかのために実行中のプロセスに固有 ある意味、ローカルです。この は、2つの端末ウィンドウ(2つの 別々のbashプロセスが稼動していることを意味します)を開いて、いずれかのウィンドウで変数 変数の値を変更すると、その変更はシェルの には表示されません。他のウィンドウまたは現在デスクトップの にある他のプログラムを使用することができます。

リスクについては、ここでは良い議論がありますhttps://github.com/docker/docker/pull/9176#issuecomment-99542089。たとえば、同じセッションで環境を出力またはログに記録するデバッグアプリケーションがあるとします。子プロセスにも環境変数が表示されます。

関連する問題