Docker APIをローカルコンテナからセキュアにアクセスする方法とTLSの設定

Dockerは、アプリケーションをコンテナとして実行し、管理するための強力なツールですが、APIを利用してコンテナの操作や管理を行うこともできます。この記事では、Docker APIにローカルコンテナからアクセスする方法と、そのアクセスをTLSでセキュアにする手順について詳しく解説します。


1. Docker APIの設定

1.1 Dockerデーモンの設定

Docker APIをローカルからアクセスできるようにするには、Dockerデーモンの設定を変更する必要があります。デフォルトでは、DockerデーモンはUNIXソケット(/var/run/docker.sock)でリッスンしており、ローカルコンテナからのアクセスは可能ですが、TCP経由でのアクセスを有効にすることで、より柔軟なアクセスが可能になります。

1.1.1 設定ファイルの編集

  1. Dockerデーモンの設定ファイル(通常は /etc/docker/daemon.json)を編集します。もし設定ファイルが存在しない場合は、新しく作成してください。
   sudo nano /etc/docker/daemon.json
  1. 設定ファイルに以下の内容を追加します。ここでは、DockerデーモンがTCPポート2375でリッスンするように設定しています(ポート番号は必要に応じて変更できます)。
   {
     "hosts": ["tcp://127.0.0.1:2375", "unix:///var/run/docker.sock"]
   }
  • "tcp://0.0.0.0:2375" は、全てのIPアドレスでTCPポート2375でリッスンする設定です。ローカルホストのみでアクセスを制限する場合は、"tcp://127.0.0.1:2375" を使用します。
  • "unix:///var/run/docker.sock" は、UNIXソケットでのリッスン設定です。これにより、ローカルからの標準的なソケットアクセスも可能になります。
  1. 設定を保存してファイルを閉じます。
  2. Dockerデーモンを再起動して設定を反映させます。
   sudo systemctl restart docker

1.2 ローカルホストでの設定

ローカルコンテナからのアクセスをセキュアにするためには、TLS(Transport Layer Security)を使用して接続を暗号化することが推奨されます。

2. TLSでのセキュアな設定

2.1 SSL/TLS証明書の生成

TLS接続を確立するためには、証明書とキーが必要です。これらを生成するには、OpenSSLを使用します。

2.1.1 CA証明書とサーバー証明書の生成

  1. CA(Certificate Authority)証明書と秘密鍵を生成します。
   openssl genrsa -aes256 -out ca-key.pem 4096
   openssl req -new -x509 -days 365 -key ca-key.pem -out ca.pem
  1. サーバー証明書と秘密鍵を生成します。
   openssl genrsa -out server-key.pem 4096
   openssl req -new -key server-key.pem -out server.csr
   openssl x509 -req -days 365 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem
  • ca-key.pem はCAの秘密鍵
  • ca.pem はCA証明書
  • server-key.pem はサーバーの秘密鍵
  • server-cert.pem はサーバー証明書

2.1.2 クライアント証明書の生成(必要に応じて)

  1. クライアント証明書と秘密鍵を生成します。
   openssl genrsa -out client-key.pem 4096
   openssl req -new -key client-key.pem -out client.csr
   openssl x509 -req -days 365 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out client-cert.pem

2.2 DockerデーモンのTLS設定

  1. Dockerデーモンの設定ファイルを再度編集します。
   sudo nano /etc/docker/daemon.json
  1. 以下のようにTLS設定を追加します。
   {
     "hosts": ["tcp://127.0.0.1:2376", "unix:///var/run/docker.sock"],
     "tls": true,
     "tlsverify": true,
     "tlscacert": "/path/to/ca.pem",
     "tlscert": "/path/to/server-cert.pem",
     "tlskey": "/path/to/server-key.pem"
   }
  • "tls": true はTLSを有効にする設定です。
  • "tlsverify": true はTLS証明書による検証を有効にする設定です。
  • "tlscacert", "tlscert", "tlskey" はそれぞれCA証明書、サーバー証明書、サーバー秘密鍵のパスを指定します。
  1. 設定を保存してファイルを閉じます。
  2. Dockerデーモンを再起動して設定を反映させます。
   sudo systemctl restart docker

2.3 クライアント側の設定

クライアントからTLS経由でDocker APIにアクセスするには、適切な証明書を指定して接続します。

docker --tlsverify \
       --tlscacert=/path/to/ca.pem \
       --tlscert=/path/to/client-cert.pem \
       --tlskey=/path/to/client-key.pem \
       -H=tcp://127.0.0.1:2376 \
       info
  • --tlsverify はTLS証明書の検証を有効にします。
  • --tlscacert, --tlscert, --tlskey はそれぞれCA証明書、クライアント証明書、クライアント秘密鍵のパスを指定します。
  • -H はDockerデーモンのホストとポートを指定します。
スポンサーリンク

3. まとめ

Docker APIへのアクセスをセキュアにするために、ローカルホストでのTCPポート設定とTLSによる暗号化が有効です。これにより、APIのセキュリティが強化され、ローカルコンテナからのアクセスも安全に行うことができます。TLS設定によって、通信が暗号化されることで、データの盗聴や改ざんのリスクを低減できます。

Dockerのセキュリティを強化し、より安全にコンテナを管理するために、これらの設定をぜひ実施してみてください。


この解説記事がDocker APIのセキュアな設定に役立つことを願っています。質問やさらなるサポートが必要であれば、お気軽にX(Twitter)からお知らせください。

コメントを残す