コンテナ開発者として、アプリケーションやサービスの認証情報を保存しなければならない場合があります。特に、Dockerをリポジトリへのログインを必要とするような使い方をしている場合、これは当てはまります。Dockerをそのまま使用すると、ログイン情報はプレーンテキストで保存されます。これは明らかにセキュリティ上の問題であり、避けるべきです。
何ができるでしょうか?
幸いなことに、パスワードを安全に保護する方法があります。決して簡単なプロセスではありませんが、それほど難しいものでもありません。
Dockerで安全な認証情報ストレージを有効にする手順を解説します。Ubuntu Server 18.04でデモを行いますが、Dockerコンテナエンジンをサポートしていればプラットフォームは問いません。
参照: Windows 10 セキュリティ: ビジネス リーダー向けガイド(TechRepublic Premium)
必要なもの
これを動作させるために必要なものは以下のものだけです:
- 実行中のDockerインスタンス
- sudo権限を持つユーザー
インストール、エントロピー、キー
セキュリティ保護のプロセスに進む前に、エントロピー生成に役立つツールをインストールする必要があります。ヘッドレスサーバープラットフォームを使用しているため、このツールをインストールする必要があります。このチュートリアルをデスクトップディストリビューションで実行する場合は、ウィンドウを移動したりデスクトップ上で入力したりすることで、GPGキーに必要なエントロピーを生成できるため、このツールをインストールする必要はありません。
GUI がない場合、次のコマンドで rng-tools をインストールする必要があります。
sudo apt-get install rng-tools -y
インストールが完了したら、次のコマンドで必要なエントロピーを生成します。
sudo rngd -r /dev/urandom
次に、次のコマンドでパス ツールをインストールします。
sudo apt-get install pass -y
次のコマンドで新しい GPG キーを生成できます。
gpg --full-generate-key
キーについては次の質問に答えてください。
- キーの種類(デフォルトを選択)
- キーサイズ(デフォルトを選択)
- キーの有効性(デフォルトを選択)
yと入力して値を保存します。
次に、名前、メールアドレス、オプションのコメントを入力し、Oと入力してキーを保存します。最後に、キーの新しいパスフレーズを入力する必要があります。
認証情報ストレージの設定方法
では、安全な認証情報ストレージを設定しましょう。手順は以下のとおりです。
- mkdir ~/binコマンドで新しいディレクトリを作成します。
- cd ~/binコマンドを使用して、新しく作成されたディレクトリに移動します。
- echo 'export PATH=$PATH:~/bin' >> ~/.bashrcコマンドを使用して、ディレクトリをパスに追加します。
- wget https://github.com/docker/docker-credential-helpers/releases/download/v0.6.3/docker-credential-pass-v0.6.3-amd64.tar.gzコマンドで docker-credential-pass をダウンロードします。
- ダウンロードしたファイルをtar xvzf docker-credential-pass-v0.6.3-amd64.tar.gzコマンドで解凍します。
- chmod a+x docker-credential-passコマンドを使用して、新しいファイルに適切な権限を付与します。
- sudo cp docker-credential-pass /usr/local/binコマンドで実行可能ファイルをコピーします。
docker-credential-helpers のインストールが完了したら、サーバーからログアウトして再度ログインし、次のコマンドで新しいディレクトリを作成します。
mkdir ~/.docker
次に、パスツールを初期化する必要があります。これを行うには、次のコマンドでGPG IDを見つけます。
gpg --list-secret-keys
使用するキーに関連付けられた ID を見つけて、次のコマンドでパスを初期化します。
pass init STRING
ここで、STRING は、資格情報ストレージに関連付ける GPG キー ID です。
ここで、次のコマンドを使用して、資格情報ストレージのパスワードを作成します。
pass insert docker-credential-helpers/docker-pass-initialized-check
パスワードが生成されたら、次のコマンドで新しい設定ファイルを作成します。
sudo nano ~/.docker/config.json
新しいファイルに次の内容を追加します。
{
"experimental": "enabled"
}
ファイルを保存して閉じます。
Dockerにログインする方法
最後に、次のコマンドで Docker にログインできるようになります。
docker login
ログイン後、Docker の認証情報は暗号化されたストレージに保存され、~/.docker/config.jsonファイルにプレーンテキストとして表示されることはありません。Docker デプロイメントのセキュリティがさらに強化されます。

画像: ジャック・ウォーレン