docker環境で openLDAP認証を使用してRedmine、gitlabにログインする。
docker上にRedmineのインストールを行ったが、gitlabやJenkinsなどの導入を考慮すると、ユーザ管理の認証に工夫が必要になる。
いろいろググると、openLDAP、Active DirectoryやOAuthで認証する方法があるらしいので、まずは、openLDAPでの認証を試してみる。
環境
- docker desktop for mac 2.1.0.5
- OpenLDAP osixia/openldap:1.3.0、osixia/phpldapadmin:0.9.0
- DB postgres:12.1-alpine
- Redmine redmine:4.0.5-alpine
いつものように、dockerのイメージはlatestではない最新のタグを使用する。
openldapでサーチを行うと、osixia/openldapが先頭に出てきたので、使用するopenLDAPはosixia/openldapとした。本当はOFFICIALなopenLDAPがあれば良かったのだが。
1. docker設定
osixia/docker-openldapを参考にインストール、起動を行う。
今までdockerコマンドを直接叩いていたが、docker-compose を使ってみる。
使用するポートは、80がredmine用、8080がPHPLDAPadminの設定用に割り当てる。また、LDAPの認証確認のため永続化のためのvolumeは割り当てない。
docker-compose.yml の記述方法バージョンがあり、version 2にするとlinksの設定が上手く各コンテナの /etc/hosts に反映されなかったので、バージョン未指定にしていたが、コンテナ内でpingを打つと応答が返ってきたので、dockerのDNSサーバがアドレス解決しているようだ。
version: '2'
services:
openldap:
image: osixia/openldap:1.1.9
container_name: test1-ldap
environment:
LDAP_ORGANISATION: "example"
LDAP_DOMAIN: "example.com"
LDAP_ADMIN_PASSWORD: "ldappw"
admin:
image: osixia/phpldapadmin:0.7.0
container_name: test1-ldapadmin
environment:
PHPLDAPADMIN_LDAP_HOSTS: "ldap"
PHPLDAPADMIN_HTTPS: "false"
ports:
- "8080:80"
links:
- "openldap:ldap"
redmine:
image: redmine:3.4.2
container_name: test1-redmine
environment:
REDMINE_DB_PASSWORD: rdpassword
ports:
- "80:3000"
links:
- "postgres:postgres"
- "openldap:ldap"
postgres:
image: postgres:9.6.3
container_name: test1-postgres
environment:
POSTGRES_PASSWORD: rdpassword
POSTGRES_USER: redmine
3. 起動
$ docker-compose up -d
Creating network "dockeropenldap_default" with the default driver
Creating test1-postgres
Creating test1-ldap
Creating test1-ldapadmin
Creating test1-redmine
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c8a2dc1abb60 redmine:3.4.2 "/docker-entrypoint.s" 15 seconds ago Up 13 seconds 0.0.0.0:80->3000/tcp test1-redmine
f0e6bd74985b osixia/phpldapadmin:0.7.0 "/container/tool/run" 15 seconds ago Up 13 seconds 443/tcp, 0.0.0.0:8080->80/tcp test1-ldapadmin
9d2a041e880e osixia/openldap:1.1.9 "/container/tool/run" 17 seconds ago Up 14 seconds 389/tcp, 636/tcp test1-ldap
b2aeed884b3a postgres:9.6.3 "docker-entrypoint.sh" 17 seconds ago Up 15 seconds 5432/tcp test1-postgres
4. OpenLDAPの設定
ホストPCからゲストにアクセスする。 http://192.168.45.131:8080
4.1 ログイン
loginを押下し、ログインを行う。
Login DN: cn=admin,dc=example,dc=com
Password: ldappw
ログインするとホーム画面を表示
4.2 Organisational Unitの作成
認証するユーザを登録するUnit(ou)を作成する。
「dc=example,dc=com」を開き、「Create new entry here」を選択
「Generic: Organisational Unit」を選択、Unit名に「ProjectX」を入力
「ProjectX」を入力後、「Create Object」、「commit」を選択しouを作成
4.3 ユーザの登録
「ou=ProjectX,dc=example,dc=com」配下にユーザを登録する。
「ou=ProjectX」を開き、「Create a child entry」を選択
「Kolab: User Entry」を選択
以下の入力フィールドに値を入れる。Common NameをRedmineのログインIDとするため、Common Nameは半角英数字としている。
- First name (例:山田)
- Last name (例:太郎)
- Common Name (例:taro.yamada)
- Email (例:taro.yamada@example.com)
- Password (パスワードの暗号化は、何でも良いが、趣味で ssha)
「Create Object」(ページの下の端)、「commit」を選択しユーザを作成する。
複数人ユーザを登録する場合は、これを繰り返す。
5. Redmineの設定
ホストPCからゲストにアクセスする。http://192.168.45.131
5.1 ログイン
ユーザadmin、パスワードadminでログインする。パスワード変更画面になるので、adminのパスワードを変更する。
5.2 新しい認証方式の追加
「管理」⇒「LDAP認証」⇒「新しい認証方式」で設定方式の追加を行う。
- 名称:openLDAP
- ホスト:ldap
- ポート:389
- アカウント:cn=admin,dc=example,dc=com
- パスワード:ldappw
- ベースDN:ou=ProjectX,dc=example,dc=com
あわせてユーザーを作成:チェック
- ログインIDの属性:cn
- 名の属性:givenName
- 姓の属性:sn
- メールアドレスの属性:mail
5.3 ログアウトし、LDAPで登録したユーザ(taro.yamada)でログイン
「あわせてユーザーを作成」をチェックしているので、Redmineに登録していないユーザは自動的に登録される。
6. Redmineの終了
コンテナを終了後、コンテナを削除し、獲得したvolumeを削除する。
$ docker-compose down -v
課題?
Redmineの個人設定の画面から、名、性、メールアドレスが変更できるが、変更した内容がopenLADPへは反映されない。また、パスワードを変更する場合は、openLDAPにログインして行う必要がある。