2022年10月29日土曜日

GitLabをActive Directoryと認証連携する手順

先日自宅に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 件のコメント:

コメントを投稿

人気の投稿