1. ホーム
  2. security

[解決済み】Dockerとパスワードの保護

2022-04-20 23:33:19

質問

最近、Dockerを使っていくつかのサービスを作って遊んでいるのですが、ずっと気になっているのが、Dockerfileにパスワードを入れることです。私は開発者なので、パスワードをソースに保存することは、顔面を殴られたような感じがします。これは気にする必要があるのでしょうか?Dockerfileでパスワードをどのように扱うかについて、何か良い規約があるのでしょうか?

どのように解決するのですか?

確かに懸念されることです。Dockerfilesは一般的にリポジトリにチェックインし、他の人と共有します。代替案としては、任意のクレデンシャル(ユーザー名、パスワード、トークン、機密性の高いもの)を提供することです。 実行時に環境変数として . これは -e 引数 (CLIでの個々のバーの場合) あるいは --env-file 引数(ファイル内の複数の変数の場合)を docker run . 読む これ docker-composeで環境を使用する方法について説明します。

使用方法 --env-file に秘密が表示されるのを防ぐことができるので、間違いなく安全なオプションです。 ps を使用した場合、ログに set -x .

しかし、env varsも特に安全というわけではありません。それらは docker inspect を実行することができるすべてのユーザーが利用可能です。 docker コマンドを使用します。(もちろん docker は、ホスト上でも はルートを持つ ということです(笑)。

私が好むパターンは、ラッパースクリプトを ENTRYPOINT または CMD . ラッパースクリプトは、まずランタイムに外部の場所からコンテナに秘密をインポートし、その後、秘密を提供しながらアプリケーションを実行することができます。この正確な仕組みは、ランタイム環境に応じて異なります。AWSの場合、IAMロールの組み合わせ、すなわち 鍵管理サービス とS3バケットに暗号化された秘密を保存するために。次のようなものです。 HashiCorp Vault または クレドスタッシュ も選択肢の一つです。

AFAIKでは、機密データをビルドプロセスの一部として使用するための最適なパターンは存在しません。実際、私は SO質問 このトピックについて を使うことができます。 ドッカースカッシュ を使用して、画像からレイヤーを削除します。しかし、Dockerにはこの目的のためのネイティブな機能はありません。

このサイトでは コンテナ内の設定に関するコメント が便利です。