web-dev-qa-db-ja.com

SSL証明書をDockerアプリに安全に提供する方法

SSL証明書(HTTPS用)をDockerアプリケーションに提供する最も安全な方法は何ですか?

私が検討したアプローチ:

  1. 環境

    Dockerアプリで 12factor アプローチを使用することは一般的ですが(明らかに必須ではありません)、環境変数は 安全と見なされます ですが、証明書チェーンは少し長くなる可能性があります環境変数の扱いが面倒です(これは完全な取引ブレーカーではありません)。

  2. プライベート画像

    カスタムのプライベートDockerイメージを作成することもできますが、プライベートDockerリポジトリを使用していない場合(そして、現在はDocker Hubを使用していない場合)、つまり、秘密の。自動ビルドを使用する場合、それはさらに別のパーティ(GitHubなど)も信頼することを意味します。

  3. マウントされたボリューム

    これは、処理する必要のある長い環境変数を渡すよりも扱いにくいようです。しかし、これまでのところ、ローカルボリュームはまったく必要がなかったので、これを使用する必要があるとしたら、少し残念です。しかし、多分それはセキュリティのために支払う代償でしょうか?

セキュリティの観点から、最良のオプションは何ですか?それとも、私が考慮していないこれらのアプローチの長所と短所はありますか?

参考までに、私の現在のDockerイメージは、GitHubからの自動ビルドで作成されたDocker Hubでホストされており、コンテナーはTutumで実行されています。私のDocker HubとGitHubリポジトリは現在非公開ですが、プロジェクトがもう少し成熟した後で公開することを望んでいます。私はこの特定のセットアップよりも広く適用するのに十分一般的な答えを期待していますが。

23
Flimzy

環境変数アプローチの1つの課題は、リンクされたコンテナーと共有されることです(詳細 ここ )。これにより、一部のセットアップでそのアプローチの使用が制限される場合があります。

多くの関係者に鍵を共有しているため、あなたが言うプライベートイメージは問題であり、これはgithubまたはdockerリポジトリへのアクセスが必要な他の関連サービスを使用する能力にも影響する可能性があります(例 Jenkins)

これにより、マウントされたボリュームソリューションが残ります。これは、セキュリティの観点からは最良のアプローチのようです。必要な配布をdocker Hostに制限します。これは、ほとんどの場合、サードパーティと一緒に配置したり、リンクされた他のコンテナーに公開したりするよりも公開されません。

8
Rory McCune

誰かがこのトピックに出くわした場合、より最近の解決策はDockerシークレットを使用することかもしれないことに注意してください: https://docs.docker.com/engine/swarm/secrets/

これにより、Docker Swarmサービスは、パスワード、SSL証明書などの情報を安全にコンテナに送信できます。

6
ttaveira