DockerコンテナでPostgreSQLデータベースを実行する場合、公式のPostgreSQL Docker Imageの documentation は、管理者パスワードを次のような環境変数に設定する必要があることを指定します。
docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
スクリプトにプレーンテキストのパスワードをハードコーディングしたくない人のために、考慮すべきより安全なオプションはありますか?
構成設定を環境変数として挿入することは、 12ファクターapp Webサイトで推奨されているアプリケーション構成へのアプローチです。
または、カスタム構成ファイルから構成を読み取る独自のコンテナーを作成することもできます。
docker run -d mydockerapp --config mydevconfig.yaml
しかし、実際には、環境変数の使用は、すべてのプラットフォームに遍在しているため、柔軟性の点でエッジがあります。環境変数をより口当たりの良いものにするために、ファイル内でそれらを指定することができます。これにより、少なくとも、同じマシン上の悪意のあるユーザーがプロセスリストから資格情報を収集できなくなります。
$ cat env.db
POSTGRES_DB=myappdb
POSTGRES_USER=admin
POSTGRES_PASSWORD=pleasechangeme
$ docker run --name postgres --env-file=env.db -d postgres
最後に、dockerによるより良いシークレットサポートを求める未解決の機能リクエストがいくつかあることを発見しました。
私の経験では、利便性にはセキュリティを打ち負かす習慣があるため、許容できるソリューションが十分なマインドシェアを獲得するには時間がかかると思います。個人的には、Kubernetesプロジェクトが暗号化されたデータボリュームで行っていることをエミュレートするソリューションが登場すると予想しています。