先日自宅にGitLabを導入し、AnsibleやPythonのコードなどの管理を実施している。
GitLabはGitLab自身にてユーザやグループを管理する機能を持っており、自宅で利用する分には、その機能で十分対応できる。しかし、多数のユーザでGitLabを共同利用するようなケースでは、ユーザ登録、削除、更新などの管理が煩雑になってしまう問題がある。
このような場合は、別にユーザ認証を行うActive Directory(以下、AD)やLDAPのサーバと認証連携を行うと管理が楽になる。今回はGitLabとActive Directoryを認証連携するための手順を記載する。
環境
以下、導入OSとGitLabのバージョンを記載する。
- OS : AlmaLinux 8.5
- GitLab : 15.1.2
ADとの連携は、LDAP(ポート番号389)または、LDAPS(ポート番号636)のプロトコルを用いる。もしLDAPSを用いる場合は、ADにLDAPS用の証明書をインストールしLDAPSを有効化することが必要となる。ADのLDAPS有効化手順は、以下記事を参照いただきたい。
GitLabでADと認証連携する手順
1. 設定ファイルをバックアップ
GitLabの設定ファイルは/etc/gitlab/gitlab.rb
となる。設定変更前にバックアップを取っておこう。
※YYYYMMDDは日付などをいれること。
# cp /etc/gitlab/gitlab.rb{,_YYYYMMDD}
2. 設定個所を確認
設定変更箇所はLDAP Settings
以降の個所となる。vi
などで設定ファイルを開き、/LDAP
で検索を行い該当箇所に移動しよう。
# vi /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
# gitlab_rails['ldap_enabled'] = false
# gitlab_rails['prevent_ldap_sign_in'] = 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'
~(中略)~
# EOS
3. AD連携の設定を追加
ADとの認証連携に必要な設定項目について、以下表にまとめた。
設定項目 | 設定値 |
---|---|
label | ログイン画面に表示させる認証方式のタブのラベルとなる。特に好みがなければデフォルトの「LDAP」のままでも問題ないだろう。 |
gitlab_rails[‘ldap_enabled’] | true に設定する。 |
host | ADのIPアドレスを設定する。 |
port | LDAPの場合は389、LDAPSの場合は636を設定する。 |
uid | ADと認証連携する場合はsAMAccountName を設定する。 |
bind_dn | AD上のバインドユーザを設定する。 |
password | バインドユーザのパスワードを設定する。 |
verify_certificates | LDAPの場合はfalse 、LDAPSの場合はtrue に設定する。 |
active_directory | ADと認証連携する場合はtrue を設定する。 |
base | ベースDNを設定する。 |
ca_file | LDAPSの場合は、ADのSSLサーバ証明書の公開鍵のファイルを/etc/gitlab/trusted-certs ディレクトリに配置したうえで、その証明書ファイルのフルパスを設定する。 |
実際の設定例を以下に記載する。
LDAPの場合
gitlab_rails['ldap_enabled']
をtrue
に変更しつつ、
### 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
gitlab_rails['prevent_ldap_sign_in'] = false
###! **remember to close this block with 'EOS' below**
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
main:
label: 'LDAP'
host: '192.168.1.1'
port: 389
uid: 'sAMAccountName'
bind_dn: 'CN=binduser,OU=My OU,DC=test,DC=local'
password: 'BINDUSER_PASSWORD'
encryption: 'plain'
verify_certificates: false
smartcard_auth: false
active_directory: true
allow_username_or_email_login: true
lowercase_usernames: false
block_auto_created_users: false
base: 'OU=My OU,DC=test,DC=local'
user_filter: ''
EOS
LDAPSの場合
LDAPの差異がある個所に★印でコメントを記載している。なお、前述したとおり事前にADのSSLサーバ証明書の公開鍵のファイルを/etc/gitlab/trusted-certs
ディレクトリに配置しておくこと。
### 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
gitlab_rails['prevent_ldap_sign_in'] = 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: 'ad01.test.local' ★ADのFQDNに変更
port: 636 ★636に変更
uid: 'sAMAccountName'
bind_dn: 'CN=binduser,OU=My OU,DC=test,DC=local'
password: 'BINDUSER_PASSWORD'
encryption: 'simple_tls' ★simple_tlsに変更
verify_certificates: true ★trueに変更
smartcard_auth: false
active_directory: true
allow_username_or_email_login: true
lowercase_usernames: false
block_auto_created_users: false
base: 'OU=My OU,DC=test,DC=local'
user_filter: ''
ca_file: '/etc/gitlab/trusted-certs/public_ad.crt' ★追加
EOS
4. 設定を反映
設定を反映するため、gitlab-ctl reconfigure
を実行する。環境にもよるが、1分程度で処理は終了する。
# gitlab-ctl reconfigure
[2022-07-16T16:47:27+09:00] INFO: Started Chef Infra Zero at chefzero://localhost:1 with repository at /opt/gitlab/embedded (One version per cookbook)
Chef Infra Client, version 17.10.0
Patents: https://www.chef.io/patents
Infra Phase starting
[2022-07-16T16:47:27+09:00] INFO: *** Chef Infra Client 17.10.0 ***
[2022-07-16T16:47:27+09:00] INFO: Platform: x86_64-linux
~(中略)~
Running handlers:
[2022-07-16T16:47:58+09:00] INFO: Running report handlers
Running handlers complete
[2022-07-16T16:47:59+09:00] INFO: Report handlers complete
Infra Phase complete, 8/857 resources updated in 31 seconds
gitlab Reconfigured!
5. ログイン確認
設定反映後、GitLabのログイン画面にアクセスしてみよう。問題なく設定できていれば、「LDAP」と「Standard」のタブが表示されているはずだ。
「LDAP」タブを選んだ状態でユーザ名(ドメイン名の指定は不要)とパスワードを入力しログインしてみよう。問題なくログインできれば、正常にAD認証連携ができている。
6. 権限付与
一度ADのユーザでGitLabにログインすると、ログインしたユーザが選択できるようになるので、管理者権限を持つGitLabユーザでログインしなおして、該当ユーザに対して必要な権限を付与しよう。
以上で、GitLabとActive Directoryを認証連携するための手順は完了となる。
0 件のコメント:
コメントを投稿