連載
» 2017年10月06日 08時00分 公開

古賀政純の「攻めのITのためのDocker塾」:第49回 Dockerプライベートレジストリにユーザー認証を付ける(準備編) (2/3)

[古賀政純(日本ヒューレット・パッカード),ITmedia]

社内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もできない

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ