第49回 Dockerプライベートレジストリにユーザー認証を付ける(準備編):古賀政純の「攻めのITのためのDocker塾」(2/3 ページ)
インターネットを経由しないDockerプライベートレジストリに、ユーザー認証を用意することで、社内LANなどにDockerイメージ配信システムを構築できます。今回はこのユーザー認証付きのプライベートレジストリを用意する具体的な方法を解説します。
社内DPR用サーバーにDockerエンジンをインストール
では、実際に社内に設置した物理サーバ上でユーザー認証付きのDPRを構築します。ユーザー認証付きの社内DPRは、dockerコンテナで稼働しますので、本連載の第46回を参考に、事前にDockerエンジンをインストールしておいてください。
OpenSSLにより証明書を作成し、ホストOS上に配置
Cesanta Softwareが提供するAuthorization Service用のDockerイメージ「cesanta/docker_auth」では、OpenSSLによる証明書を利用します。Linuxでは、opensslコマンドを使って、秘密鍵や証明書を作成できます。opnesslコマンドは、openssl RPMパッケージに含まれていますので、事前にDPRとなるホストOS上にインストールしておきます。以下、DPRとなるホストOSのコマンドプロンプトを「dpr #」で表すとします。
dpr # yum install -y openssl
opensslコマンドを使って秘密鍵の「server.key」と証明書の「server.pem」をDPRとなるホストOS上で生成します。生成先のディレクトリは、/hostdir/auth_server/sslディレクトリとします。ファイルの保管先ディレクトリのパスは、後に作成するYMLファイル内において相対パスで指定する必要がありますので、opensslコマンドで指定する秘密鍵と証明書のディレクトリパスに注意します。
dpr # mkdir -p /hostdir/auth_server/ssl dpr # openssl req \ -x509 \ -nodes \ -days 365 \ -newkey rsa:2048 \ -keyout /hostdir/auth_server/ssl/server.key \ -out /hostdir/auth_server/ssl/server.pem
いくつか質問項目が表示されますが、今回は、何も入力せずにすべてEnterキーを押します。
暗号化されたパスワードを生成
DPRにアクセスするユーザーのパスワードを生成します。ここでは、httpd-toolsパッケージに含まれるhtpasswdコマンドを使って、暗号化されたパスワードを生成します。生成したパスワードは、YMLファイルにコピーペーストできるように、標準出力に出力したままにしておくか、ファイルに出力しておいてください。まずは、ユーザーadminのパスワードを生成します。
dpr # yum install -y httpd-tools dpr # htpasswd -nbB admin password123 | cut -d: -f2 $2y$05$8SH1hCkLkdYzC/nrzv4Cn.E4sIWZT6F5ZqvLsIRUT7Pvtx09oqkLK
adminユーザー同様に、一般ユーザーkoga、tanakaもパスワードを生成しておきます。
dpr # htpasswd -nbB koga password456 | cut -d: -f2 $2y$05$QCCF.gxD3zF9UzRF/fLJu.my20CsgKG2IjX5JC4go/mKABLrBAr0a dpr # htpasswd -nbB tanaka password789 | cut -d: -f2 $2y$05$NZRTL2eFwrFIaptKtmhcxeUmw/p8VxkElWuUfujW6viFbMQJwg332
YMLファイルを作成
作成した秘密鍵、証明書、暗号化されたユーザーのパスワードをYMLファイルである「auth_config.yml」に記述します。以下のURLにテンプレートとなるファイルが用意されています。
auth_config.ymlのテンプレートの入手先URL
https://github.com/cesanta/docker_auth/blob/master/examples/simple.yml
入手したファイル「simple.yml」をDPR上の /hostdir/auth_server/config ディレクトリに auth_config.yml という名前で作成します。今回は、ユーザーadmin、ユーザーkoga、ユーザーtanakaに対する記述を追加します。先程、htpasswdコマンドで生成した暗号化パスワードを auth_config.yml ファイル内に記述します。さらに、YMLファイル内に、ユーザーごとのDPRを使ったDockerイメージの登録や入手の可否を記述します。今回の場合、ユーザーadminは、DPRへのDockerイメージの登録(docker push)と入手(docker pull)が可能ですが、ユーザーkogaは、docker pullのみが可能です。ユーザーtanakaは、DPRを使ったdocker pushもdocker pullもできません。
dpr # vi /hostdir/auth_server/config/auth_config.yml server: addr: ":5001" ←ポート番号 certificate: "/ssl/server.pem" ←生成した証明書の相対パスを指定 key: "/ssl/server.key" ←生成した秘密鍵の相対パスを指定 token: issuer: "Auth Service" expiration: 900 users: "admin": ←Dockerプライベートレジストリにアクセスするユーザー「admin」 password: "$2y$05$8SH1hCkLkdYzC/nrzv4Cn.E4sIWZT6F5ZqvLsIRUT7Pvtx09oqkLK" ←adminのパスワード "koga": ←Dockerプライベートレジストリにアクセスするユーザー「koga」 password: "$2y$05$QCCF.gxD3zF9UzRF/fLJu.my20CsgKG2IjX5JC4go/mKABLrBAr0a" ←kogaのパスワード "tanaka": ←Dockerプライベートレジストリにアクセスするユーザー「tanaka」 password: "$2y$05$NZRTL2eFwrFIaptKtmhcxeUmw/p8VxkElWuUfujW6viFbMQJwg332" ←tanakaのパスワード acl: - match: {account: "admin"} actions: ["*"] ←ユーザーadminは、DPRを使ったdocker pullとdocker pushが可能 - match: {account: "koga"} actions: ["pull"] ←ユーザーkogaは、DPRを使ったdocker pullは可能だがdocker pushはできない - match: {account: "tanaka"} actions: [""] ←ユーザーtanakaは、DPRを使ったdocker pullもdocker pushもできない
関連記事
- 第48回 Dockerプライベートレジストリにユーザー認証を付けるには(概要編)
前回までは、インターネットを経由せずに使えるDockerプライベートレジストリを紹介しました。今回は、ユーザー認証機能付きのDockerプライベートレジストリ(DPR)について紹介します。 - 第45回 「プライベートレジストリ」を知る――HPEが使っているDockerイメージ管理
ホステッドレジストリは、インターネット経由でクラウドサービスのように利用できますが、インターネットを経由せずに、プライベートLAN内で、Dockerイメージをユーザーに配布したいといったニーズもあります。そんなときに活用したいのが、プライベートLAN内でDockerイメージを配布する「社内プライベートレジストリ」です。 - 第46回 Dockerのプライベートレジストリを活用する(準備編)
インターネットを経由せずに、プライベートLAN内で、Dockerイメージをユーザーに配布したいといったニーズに対応するには、「プライベートレジストリ」を活用するのがおすすめです。実際にプライベートレジストリを立ち上げる方法をご紹介します。 - 第47回 Dockerのプライベートレジストリを活用する(運用編)
Dockerプライベートレジストリが構築できたら、実際にプライベートレジストリを使って、Dockerイメージの登録、入手などを行ってみましょう。プライベートレジストリは、閉じたネットワーク環境でのDockerハブのようなDockerイメージ管理が可能になります。 - 第42回 Dockerイメージを「Quay.io」で管理する(準備編)
ホステッドレジストリは、一般に「Docker Hub」が有名ですが、今回はNASAやeBayも利用しているホステッドレジストリの「Quay.io」を使って、実際にDockerイメージを管理してみます。 - 第43回 Dockerイメージを「Quay.io」で管理する(セキュリティ編)
ホステッドレジストリには、アップロードしたDockerイメージのセキュリティ脆弱性をチェックする機能もあります。「Quay.io」を実際に操作しながら、セキュリティチェックの方法を確認します。 - 第44回 Dockerfileを「Quay.io」で管理する
ホステッドレジストリを活用すると、Dockerイメージをアップして管理するだけでなく、Dockerfileをアップロードし、ホステッドレジストリでDockerイメージをビルドすることも可能です。今回はその方方を具体的に見ていきます。
Copyright © ITmedia, Inc. All Rights Reserved.