25
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GitLabとLDAP(OpenLDAP)連携設定

Last updated at Posted at 2018-12-12

※2019/10/09 Omnibus packageについて追記

LDAP内包Active Directory連携の記事はいくつかありましたが、OpenLDAP連携は見当たらなかったので設定でハマったところも含めて纏めました。
本稿ではGitLab Community EditionとOpenLDAPの連携設定を記載しています。※Enterprise Edition追加機能については取り扱いません。
#前提
GitLabのインストールが完了している事。※環境情報を含め別稿参照

GitLabバージョン
# gitlab-rake gitlab:env:info

GitLab information
Version:        11.5.3
Revision:       aa11737

#設定変更
GitLabの設定ファイルを編集します。
gitlab.rbを開くと以下のようなLDAP設定群があります。

/etc/gitlab/gitlab.rb 設定変更前
### LDAP Settings
###! Docs: https://docs.gitlab.com/omnibus/settings/ldap.html
###! **Be careful not to break the indentation in the ldap_servers block. It is
###!   in yaml format and the spaces must be retained. Using tabs will not work.**

#  gitlab_rails['ldap_enabled'] = false

###! **remember to close this block with 'EOS' below**
#  gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
#   main: # 'main' is the GitLab 'provider ID' of this LDAP server
#     label: 'LDAP'
#     host: '_your_ldap_server'
#     port: 389
#     uid: 'sAMAccountName'
#     encryption: 'plain' # "start_tls" or "simple_tls" or "plain"
#     bind_dn: '_the_full_dn_of_the_user_you_will_bind_with'
#     password: '_the_password_of_the_bind_user'
#     active_directory: true
#     allow_username_or_email_login: false
#     lowercase_usernames: false
#     block_auto_created_users: false
#     base: ''
#     user_filter: ''
#     ## EE only
#     group_base: ''
#     admin_group: ''
#     sync_ssh_keys: false
#
#   secondary: # 'secondary' is the GitLab 'provider ID' of second LDAP server
#     label: 'LDAP'
#     host: '_your_ldap_server'
#     port: 389
#     uid: 'sAMAccountName'
#     bind_dn: '_the_full_dn_of_the_user_you_will_bind_with'
#     password: '_the_password_of_the_bind_user'
#     encryption: 'plain' # "start_tls" or "simple_tls" or "plain"
#     verify_certificates: true
#     active_directory: true
#     allow_username_or_email_login: false
#     lowercase_usernames: false
#     block_auto_created_users: false
#     base: ''
#     user_filter: ''
#     ## EE only
#     group_base: ''
#     admin_group: ''
#     sync_ssh_keys: false
#   EOS

これを以下のように設定します。
## EE only以下の設定やセカンダリLDAPサーバはCommunity Editionでは使用できないのでコメントアウトしたまま設定は変更しません。
**忘れないで**とコメントあるように本ブロック最終行のEOSを忘れずにアンコメントします。

/etc/gitlab/gitlab.rb 設定変更後
### LDAP Settings
###! Docs: https://docs.gitlab.com/omnibus/settings/ldap.html
###! **Be careful not to break the indentation in the ldap_servers block. It is
###!   in yaml format and the spaces must be retained. Using tabs will not work.**

gitlab_rails['ldap_enabled'] = true

###! **remember to close this block with 'EOS' below**
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
main: # 'main' is the GitLab 'provider ID' of this LDAP server
    label: 'LDAP Account'
    host: '192.168.1.200'
    port: 389
    uid: 'uid'
    bind_dn: 'cn=gitlab-BaseDN,ou=People,dc=example,dc=co,dc=jp'
    password: 'p@ssw0rd'
    encryption: 'plain'
    verify_certificates: false
    active_directory: false
    allow_username_or_email_login: true
    lowercase_usernames: true
    block_auto_created_users: false
    base: 'dc=example,dc=co,dc=jp'
    user_filter: ''
#     ## EE only
#     group_base: ''
#     admin_group: ''
#     sync_ssh_keys: false
#
#   secondary: # 'secondary' is the GitLab 'provider ID' of second LDAP server
#     label: 'LDAP'
#     host: '_your_ldap_server'
#     port: 389
#     uid: 'sAMAccountName'
#     bind_dn: '_the_full_dn_of_the_user_you_will_bind_with'
#     password: '_the_password_of_the_bind_user'
#     encryption: 'plain' # "start_tls" or "simple_tls" or "plain"
#     verify_certificates: true
#     active_directory: true
#     allow_username_or_email_login: false
#     lowercase_usernames: false
#     block_auto_created_users: false
#     base: ''
#     user_filter: ''
#     ## EE only
#     group_base: ''
#     admin_group: ''
#     sync_ssh_keys: false
EOS

本設定に用いたLDAP設定及びアカウント情報は下記画像の通りです。
7.jpg

##設定項目解説

キー 説明
gitlab_rails['ldap_enabled'] LDAPユーザ認証機能の有効化
label サインインページの認証選択タブのラベル表示※後述1
host LDAPサーバのホスト
port LDAPサーバのポート
uid LDAPアカウントの項目でGitLabユーザー名としたい属性を指定1
bind_dn 接続先LDAPに存在する適当なアカウント2の完全なDNを指定
password bind_dnで設定したLDAPアカウントのパスワード
encryption 暗号化方法
verify_certificates SSL暗号化を使用している場合のSSL証明書による検証の有効化
active_directory LDAPサーバーがActive Directory LDAPサーバーであるかどうか
allow_username_or_email_login 有効化している場合はサインイン時のユーザ名入力項目で@以降の入力を無視する3,4
lowercase_usernames LDAPユーザー名の小文字を有効にする
block_auto_created_users 新規に作成されるユーザをブロック状態にする※後述2
base GitLabがLDAPサーバからユーザを検索し始めるルート階層
user_filter 特定のLDAPユーザのみフィルタしたい場合にLDAPクエリを指定

###後述1:label
解説の通りです。例えば以下のような設定にすれば画像のようになります。

/etc/gitlab/gitlab.rb
    label: 'えるだっぷ'

8.JPG

###後述2:block_auto_created_users
GitLabユーザーに登録の無いユーザーがLDAPを用いて認証(サインイン)するとLDAP情報を参照し、自動でGitLabユーザーが作成されます。
ユーザー作成と同時にGitLabへサインインができるようになりますが、本項目をtrueにしておくと新規作成されたユーザーはデフォルトでブロック状態となり、画像のようにサインインできなくなります。(作成済みのユーザーは通常通りサインイン可能です。)
9.png
サインインできるようにするにはGitLab管理者ユーザーでサインインして、管理領域 > ユーザーの Blocked タブに新規作成されたユーザーが居るはずなので右の設定ボックスからUnblockをクリックします。
10.JPG

#設定適用
以下コマンドで変更内容を適用します。完了まで1~2分程度かかります。

# gitlab-ctl reconfigure
Starting Chef Client, version 13.6.4
resolving cookbooks for run list: ["gitlab"]
Synchronizing Cookbooks:
  - package (0.1.0)

~~(中略)~~

Running handlers:
Running handlers complete
Chef Client finished, 7/586 resources updated in 43 seconds
gitlab Reconfigured!

#確認
LDAP連携設定ができているか確認します。
正しく連携設定ができていれば、以下コマンドで設定した接続先LDAPサーバにて見つかったアカウント情報を取得できます。
このコマンドで情報が取得できなかった場合は設定内容を見直してください。

# gitlab-rake gitlab:ldap:check RAILS_ENV=production
Checking LDAP ...

Server: ldapmain
LDAP authentication... Success
LDAP users with access to your GitLab server (only showing the first 100 results)
        DN: cn=hoge,ou=people,dc=example,dc=co,dc=jp  uid: hoge
        DN: cn=huga,ou=people,dc=example,dc=co,dc=jp  uid: huga
        DN: cn=piyo,ou=people,dc=example,dc=co,dc=jp  uid: piyo

~~(中略)~~

Checking LDAP ... Finished

コマンド結果問題なければブラウザからサインインページへアクセスしてください。
左端に設定したlabelでLDAPアカウント認証用のタブが追加されている筈です。
11.JPG

#LDAP以外のユーザー新規登録を制限したい場合
LDAP連携ができたのでLDAP以外の方法でユーザーの新規登録ができないようにしたい場合があると思います。
その場合はGitLab管理者ユーザーでサインインして、管理領域 > 設定 > サインアップの制限 スクロール内の「Sign-up enabled」項目のチェックを外した後にスクロール内の「Save changes」をクリックして変更を保存してください。
13.jpg
サインインページ認証項目右端のRegisterタブが消えている筈です。

#補足
設定ファイルは3つありますが、
gitlab.rbにてアンコメントした設定項目は再読み込み(設定適用)時に
gitlab.ymlの同じ設定項目の値を上書きするので基本的にgitlab.rbを編集します。
※Omnibus package版ではないGitLabを利用している場合は、gitlab.rbが無いようですのでgitlab.ymlを修正してください。

/var/opt/gitlab/gitlab-rails/etc/gitlab.yml
/opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
/etc/gitlab/gitlab.rb

#参考

LDAP | GitLab Docs
How to configure LDAP with GitLab CE | GitLab Docs
Setting up LDAP sign-in | GitLab Docs
GitLabでLDAP連携するための設定
GitLabでLDAP(ActiveDirectory)認証の設定をする
GitLabにLDAPでログインする
authentication - GitLab & OpenLDAP: Invalid credentials - Server Fault

  1. デフォルト設定のまま変更していない方が多いのですが、OpenLDAPでは'uid'等に変更しないとLDAP連携に成功しませんでした。
    公式ドキュメントには記載が無いですが、LDAPアカウントから取り込む際にGitLabのユーザ名となる属性名を指定するのかな?と考えています。

  2. LDAP管理者アカウントでなくても良い。

  3. 例えばjane.doe@example.comと入力した内容は ⇒ jane.doeとして認証される。

  4. uid項目の値が一意になるならtrueにしても大丈夫な筈です。

25
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?