では、実際に社内に設置した物理サーバ上でユーザー認証付きのDPRを構築します。ユーザー認証付きの社内DPRは、dockerコンテナで稼働しますので、本連載の第46回を参考に、事前にDockerエンジンをインストールしておいてください。
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ファイルである「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もできない
Copyright © ITmedia, Inc. All Rights Reserved.