はじめに
あなたの Docker レジストリをセキュアにすることは、コンテナイメージの整合性を維持し、Docker ベースのアプリケーションの安全性を確保するために重要です。このチュートリアルでは、Docker レジストリ用の自己署名 SSL 証明書を生成するプロセスを案内します。これにより、Docker クライアントとレジストリの間に信頼できる接続を確立できます。
自己署名 SSL 証明書の理解
SSL(Secure Sockets Layer)証明書は、クライアントとサーバーの間にセキュアな接続を確立するために使用されます。これにより、両者間で送信されるデータが暗号化され、不正アクセスから保護されます。自己署名 SSL 証明書は、信頼された証明機関(CA)によって署名されるのではなく、同じエンティティによって作成および署名される SSL 証明書の一種です。
自己署名 SSL 証明書は、CA 署名証明書を取得するコストと複雑さが不要な開発やテスト環境でよく使用されます。信頼された CA が利用できない場合や、組織が証明書管理プロセスをよりコントロールしたい場合にも使用できます。
ただし、自己署名 SSL 証明書は、デフォルトでは Web ブラウザやその他のクライアントによって信頼されません。クライアントが自己署名証明書に遭遇すると、通常、証明書が信頼されていないことを示す警告メッセージが表示されます。これは、セキュアな接続に依存する Web アプリケーションやその他のサービスに問題を引き起こす可能性があります。
本番環境で自己署名 SSL 証明書を使用するには、アプリケーションまたはサービスにアクセスするすべてのクライアントによって証明書が信頼されることを確認する必要があります。これは、自己署名証明書をクライアントに配布し、証明書を信頼するように構成することで行うことができます。
Docker レジストリのコンテキストでは、自己署名 SSL 証明書を使用することは実用的なソリューションになります。特に、組織内でプライベートレジストリを実行している場合には、自己署名証明書を生成して Docker に設定することで、信頼された CA 署名証明書を必要とせずに、Docker クライアントとレジストリの間の通信をセキュアにすることができます。
Docker レジストリ用の自己署名 SSL 証明書の生成
前提条件
自己署名 SSL 証明書を生成する前に、以下の前提条件を満たしていることを確認してください。
- Linux ベースのシステム(この例では Ubuntu 22.04 を使用)
- OpenSSL がインストールされている(多くの Linux ディストリビューションでは通常事前にインストールされている)
自己署名 SSL 証明書を生成する手順
Ubuntu 22.04 システムでターミナルを開きます。
SSL 証明書用の秘密鍵を生成します。
openssl genrsa -out registry.key 2048
- 秘密鍵を使用して自己署名 SSL 証明書を生成します。
openssl req -new -x509 -key registry.key -out registry.crt -days 365
このコマンドは、証明書の共通名(CN)など、証明書に関するさまざまな詳細を入力するように促します。この共通名は、Docker レジストリのホスト名または IP アドレスと一致する必要があります。
- 生成された証明書を検証します。
openssl x509 -in registry.crt -text -noout
これにより、生成された自己署名 SSL 証明書の詳細が表示されます。
- (任意)Docker レジストリにカスタムドメイン名を使用したい場合は、Docker クライアントが実行されるシステムの
/etc/hostsファイルを更新して、ドメイン名を Docker レジストリの IP アドレスにマッピングします。
graph LR
A[Generate Private Key] --> B[Generate Self-Signed SSL Certificate]
B --> C[Verify Certificate]
C --> D[Update /etc/hosts (Optional)]
これらの手順に従うことで、Docker レジストリをセキュアにするために使用できる自己署名 SSL 証明書を生成しました。次のステップは、Docker にこの自己署名証明書を使用するように構成することです。
自己署名証明書を使用するように Docker を構成する
自己署名証明書を Docker ホストにコピーする
- 前の手順で生成した
registry.crtファイルを Docker ホストにコピーします。ファイル転送ツールやscpコマンドを使ってファイルをコピーできます。
scp registry.crt user@docker-host:/etc/docker/certs.d/myregistry.example.com/ca.crt
user@docker-hostを適切なユーザーと Docker ホストのホスト名または IP アドレスに置き換え、myregistry.example.comを Docker レジストリのホスト名または IP アドレスに置き換えてください。
自己署名証明書を使用するように Docker を構成する
- Docker ホストで、自己署名証明書用のディレクトリを作成します。
sudo mkdir -p /etc/docker/certs.d/myregistry.example.com
registry.crtファイルを新しく作成したディレクトリにコピーします。
sudo cp registry.crt /etc/docker/certs.d/myregistry.example.com/ca.crt
- Docker デーモンを再起動して変更を適用します。
sudo systemctl restart docker
構成を検証する
- Docker クライアントを使って Docker レジストリからイメージをプルしてみます。
docker pull myregistry.example.com/my-image:latest
構成が正しければ、Docker クライアントは SSL/TLS 関連のエラーなしでレジストリに接続できるはずです。
graph LR
A[Copy Certificate to Docker Host] --> B[Create Certificate Directory]
B --> C[Copy Certificate to Directory]
C --> D[Restart Docker Daemon]
D --> E[Verify Configuration]
これらの手順に従うことで、Docker レジストリ用に自己署名 SSL 証明書を使用するように Docker を構成しました。これにより、信頼された証明機関によって署名されていない証明書であっても、Docker クライアントとレジストリの間の通信がセキュアになります。
まとめ
このチュートリアルで紹介した手順に従えば、Docker レジストリ用の自己署名 SSL 証明書を生成し、Docker に証明書を使用するように構成し、Docker クライアントとレジストリの間のセキュアな通信を確保できます。これにより、Docker ベースのインフラストラクチャのセキュリティを強化し、全体的な Docker 展開プロセスを円滑に進めることができます。



