LDAPとGitLabのインテグレーション

GitLabはLDAP - Lightweight Directory Access Protocolとインテグレーションし、ユーザー認証をサポートします。

このインテグレーションは、以下を含むほとんどのLDAP準拠のディレクトリサーバで動作します:

  • Microsoft Active Directory。
  • Apple Open Directory.
  • オープンLDAP。
  • 389 サーバ
note
GitLabはMicrosoft Active Directory Trustをサポートしていません。

LDAPを通して追加されたユーザー:

  • 通常はライセンスシートを使用します。
  • Gitのパスワード認証が無効になっている場合でも、GitLabのユーザー名、またはメールアドレスとLDAPパスワードを使ってGitを認証することができます。

LDAPの識別名(DN) 、GitLabの内部ユーザーと関連付けられます:

  • 既存のユーザーが初めて GitLab に LDAP でサインインするとき。
  • LDAPメールアドレスは、既存のGitLabユーザーのプライマリメールアドレスです。LDAP email属性がGitLabユーザーデータベースに見つからない場合、新しいユーザーが作成されます。

既存のGitLabユーザーが自分自身のためにLDAPサインインを有効にしたい場合は、次のようにします:

  1. GitLab のメールアドレスと LDAP のメールアドレスが一致していることを確認します。
  2. LDAP認証情報を使ってGitLabにサインインします。

セキュリティ

GitLab はユーザーが LDAP でまだアクティビティかどうかを確認します。

ユーザーがLDAPでアクティブでないとみなされるのは、以下のような場合です:

  • ディレクトリから完全に削除された場合。
  • 設定されたbase DN またはuser_filter 検索の外部に存在する場合。
  • ユーザーアカウント制御属性を通じて、Active Directory で無効または非アクティブとしてマークされています。これは、userAccountControl:1.2.840.113556.1.4.803 属性にビット 2 が設定されていることを意味します。

GitLabはLDAPユーザーのステータスをチェックします:

  • 任意の認証プロバイダーを使ってサインインする場合。GitLab 14.4以前では、ステータスはLDAPを直接使ってサインインする時のみチェックされました。
  • トークンやSSHキーを使ったアクティブなウェブセッションやGitリクエストに対しては、1時間に1回。
  • LDAP のユーザー名とパスワードを使った Git over HTTP リクエストの場合。
  • ユーザー同期中に一日一回。

ユーザーがLDAPでアクティブでなくなった場合:

  • サインアウト。
  • ldap_blocked
  • LDAPで再アクティブ化されるまで、どの認証プロバイダを使用してもサインインできません。

セキュリティリスク

LDAPインテグレーションは、LDAPユーザーが使用できない場合にのみ使用する必要があります:

  • LDAPサーバー上でmail,email oruserPrincipalName 属性を変更することができません。これらのユーザーは、GitLabサーバー上のあらゆるアカウントを乗っ取る可能性があります。
  • メールアドレスの共有。同じメールアドレスを持つLDAPユーザーは、同じGitLabアカウントを共有することができます。

LDAPの設定

LDAPユーザーは、サインインに使用するかどうかにかかわらず、メールアドレスを持っている必要があります。

LDAPを設定した後、設定をテストするには、LDAP check Rakeタスクを使用します。

基本設定

hosts 設定はGitLab 14.7で導入されました。

以下の設定が可能です:

設定必須種類説明
label {チェックサークル}はい文字列LDAPサーバーの親しみやすい名前。サインインページに表示されます。例:'Paris' または'Acme, Ltd.'
host {チェックサークル}はい文字列LDAPサーバーのIPアドレスまたはドメイン名。hosts が定義されている場合は無視されます。例'ldap.mydomain.com'
port {チェックサークル}はい整数LDAP サーバに接続するポート。hosts が定義されている場合は無視されます。例:389 または636 (SSL の場合)
uid {チェックサークル}はい文字列ユーザーがサインインする際に使用するユーザー名に対応する LDAP 属性。uidにマップされる値ではなく、属性である必要があります。 GitLab ユーザー名には影響しません (属性のセクションを参照)。例:'sAMAccountName' または'uid' または'userPrincipalName'
base {チェックサークル}はい文字列ユーザーを検索するベース。例:'ou=people,dc=gitlab,dc=example' または'DC=mydomain,DC=com'
encryption {チェックサークル}はい文字列暗号化方式 (method のキーは廃止され、encryption が使われます)。3つの値のいずれかを指定します:'start_tls' 'simple_tls''plain'simple_tls は LDAP ライブラリの「Simple TLS」に対応します。 は StartTLS に対応し、通常の TLS と混同しないようにします。 を指定した場合、通常はポート636になり、 (StartTLS)はポート389になります。 もポート389でオペレーションされます。start_tls simple_tlsstart_tls plain
hosts {点線円}いいえ文字列と整数の配列接続をオープンするホストとポートのペアの配列。設定するサーバは、それぞれ同一のデータセットを持つ必要があります。これは複数の LDAP サーバを設定するためのものではなく、 フェイルオーバーを設定するためのものです。ホストは設定された順に試されます。例[['ldap1.mydomain.com', 636], ['ldap2.mydomain.com', 636]]
bind_dn {点線円}いいえ文字列バインドするユーザーの完全な DN。例:'america\momo' あるいは'CN=Gitlab,OU=Users,DC=domain,DC=com'
password {点線円}いいえ文字列バインドユーザーのパスワード。
verify_certificates {点線円}いいえブール値デフォルトはtrue です。暗号化方法がstart_tls またはsimple_tls の場合に SSL 証明書の検証を有効にします。falseに設定すると、LDAP サーバーの SSL 証明書の検証は行われません。
timeout {点線円}いいえ整数デフォルトは10 です。 LDAP クエリのタイムアウトを秒単位で設定します。これは、LDAP サーバーが応答しなくなった場合に要求がブロックされるのを回避するのに役立ちます。値が0 の場合、タイムアウトはありません。
active_directory {点線円}いいえブール値この設定は、LDAPサーバーがActive Directory LDAPサーバーであるかどうかを指定します。ADでないサーバの場合、AD固有のクエリはスキップされます。LDAPサーバーがADでない場合は、これをfalseに設定します。
allow_username_or_email_login {点線円}いいえブール値デフォルトはfalse です。有効にすると、GitLab はサインイン時にユーザーが送信した LDAP ユーザー名の最初の@ 以降を無視します。もしActiveDirectoryでuid: 'userPrincipalName' 。userPrincipalNameが@を含むため、この設定を無効にする必要があります。
block_auto_created_users {点線円}いいえブール値デフォルトはfalse です。 GitLab インストールの請求可能ユーザー数を厳密に管理するには、この設定を有効にして、管理者がクリアするまで新規ユーザーをブロックしておきます。
user_filter {点線円}いいえ文字列LDAPユーザーをフィルタリングします。RFC 4515 のフォーマットに従います。GitLab はomniauth-ldap のカスタムフィルター構文をサポートしていません。user_filter フィールド構文の例:

-'(employeeType=developer)'
- 。'(&(objectclass=user)(|(samaccountname=momo)(samaccountname=toto)))'
lowercase_usernames {点線円}いいえブール値有効にすると、GitLabは名前を小文字に変換します。
retry_empty_result_with_codes {点線円}いいえ配列結果/コンテンツが空の場合にオペレーションを再試行する LDAP クエリ応答コードの配列。Google Secure LDAP の場合は、この値を[80] に設定します。

以下は、基本設定による LDAP の設定例です。

Linux package (Omnibus)
  1. /etc/gitlab/gitlab.rb を編集します:

    gitlab_rails['ldap_enabled'] = true
    gitlab_rails['ldap_servers'] = {
      'main' => {
        'label' => 'LDAP',
        'host' =>  'ldap.mydomain.com',
        'port' => 636,
        'uid' => 'sAMAccountName',
        'bind_dn' => 'CN=Gitlab,OU=Users,DC=domain,DC=com',
        'password' => '<bind_user_password>',
        'encryption' => 'simple_tls',
        'verify_certificates' => true,
        'timeout' => 10,
        'active_directory' => false,
        'user_filter' => '(employeeType=developer)',
        'base' => 'dc=example,dc=com',
        'lowercase_usernames' => 'false',
        'retry_empty_result_with_codes' => [80],
        'allow_username_or_email_login' => false,
        'block_auto_created_users' => false
      }
    }
    
  2. ファイルを保存して GitLab を再設定してください:

    sudo gitlab-ctl reconfigure
    
Helm chart (Kubernetes)
  1. Helm の値をエクスポートします:

    helm get values gitlab > gitlab_values.yaml
    
  2. gitlab_values.yaml を編集します:

    global:
      appConfig:
        ldap:
          servers:
            main:
              label: 'LDAP'
              host: 'ldap.mydomain.com'
              port: 636
              uid: 'sAMAccountName'
              base: 'dc=example,dc=com'
              bind_dn: 'CN=Gitlab,OU=Users,DC=domain,DC=com'
              password: '<bind_user_password>'
              encryption: 'simple_tls'
              verify_certificates: true
              timeout: 10
              active_directory: false
              user_filter: '(employeeType=developer)'
              base: 'dc=example,dc=com'
              lowercase_usernames: false
              retry_empty_result_with_codes: [80]
              allow_username_or_email_login: false
              block_auto_created_users: false
    
  3. ファイルを保存して、新しい値を適用します:

    helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
    

詳しくは、Helmチャートを使ってインストールしたGitLabインスタンスにLDAPを設定する方法をご覧ください。

Docker
  1. docker-compose.yml を編集します:

    version: "3.6"
    services:
      gitlab:
        image: 'gitlab/gitlab-ee:latest'
        restart: always
        hostname: 'gitlab.example.com'
        environment:
          GITLAB_OMNIBUS_CONFIG: |
            gitlab_rails['ldap_enabled'] = true
            gitlab_rails['ldap_servers'] = {
              'main' => {
                'label' => 'LDAP',
                'host' =>  'ldap.mydomain.com',
                'port' => 636,
                'uid' => 'sAMAccountName',
                'base' => 'dc=example,dc=com'
                'bind_dn' => 'CN=Gitlab,OU=Users,DC=domain,DC=com',
                'password' => '<bind_user_password>',
                'encryption' => 'simple_tls',
                'verify_certificates' => true,
                'timeout' => 10,
                'active_directory' => false,
                'user_filter' => '(employeeType=developer)',
                'base' => 'dc=example,dc=com',
                'lowercase_usernames' => 'false',
                'retry_empty_result_with_codes' => [80],
                'allow_username_or_email_login' => false,
                'block_auto_created_users' => false
              }
            }
    
  2. ファイルを保存して GitLab を再起動します:

    docker compose up -d
    
Self-compiled (source)
  1. /home/git/gitlab/config/gitlab.yml を編集します:

    production: &base
      ldap:
        enabled: true
        servers:
          main:
            label: 'LDAP'
            host: 'ldap.mydomain.com'
            port: 636
            uid: 'sAMAccountName'
            base: 'dc=example,dc=com'
            bind_dn: 'CN=Gitlab,OU=Users,DC=domain,DC=com'
            password: '<bind_user_password>'
            encryption: 'simple_tls'
            verify_certificates: true
            timeout: 10
            active_directory: false
            user_filter: '(employeeType=developer)'
            base: 'dc=example,dc=com'
            lowercase_usernames: false
            retry_empty_result_with_codes: [80]
            allow_username_or_email_login: false
            block_auto_created_users: false
    
  2. ファイルを保存して GitLab を再起動します:

    # For systems running systemd
    sudo systemctl restart gitlab.target
       
    # For systems running SysV init
    sudo service gitlab restart
    

様々な LDAP オプションについての詳細は、gitlab.yml.exampleldap 設定を参照してください。

SSL設定

SSL構成設定は、tls_options 名前と値のペアで構成できます。以下のSSL設定項目があります:

設定説明必須使用例
ca_file内部 CA が必要な場合など、PEM 形式の CA 証明書を含むファイルへのパスを指定します。 {点線円}いいえ'/etc/ca.pem'
ssl_versionOpenSSLのデフォルトが適切でない場合に、使用するOpenSSLのSSLバージョンを指定します。 {点線円}いいえ'TLSv1_1'
ciphersLDAPサーバーとの通信で使用する特定のSSL暗号。 {点線円}いいえ'ALL:!EXPORT:!LOW:!aNULL:!eNULL:!SSLv2'
certクライアント証明書 {点線円}いいえ'-----BEGIN CERTIFICATE----- <REDACTED> -----END CERTIFICATE -----'
keyクライアントの秘密鍵。 {点線円}いいえ'-----BEGIN PRIVATE KEY----- <REDACTED> -----END PRIVATE KEY -----'

以下の例は、tls_optionsca_filessl_version を設定する方法を示しています:

Linux package (Omnibus)
  1. /etc/gitlab/gitlab.rb を編集します:

    gitlab_rails['ldap_enabled'] = true
    gitlab_rails['ldap_servers'] = {
      'main' => {
        'label' => 'LDAP',
        'host' =>  'ldap.mydomain.com',
        'port' => 636,
        'uid' => 'sAMAccountName',
        'encryption' => 'simple_tls',
        'base' => 'dc=example,dc=com'
        'tls_options' => {
          'ca_file' => '/path/to/ca_file.pem',
          'ssl_version' => 'TLSv1_2'
        }
      }
    }
    
  2. ファイルを保存して GitLab を再設定してください:

    sudo gitlab-ctl reconfigure
    
Helm chart (Kubernetes)
  1. Helm の値をエクスポートします:

    helm get values gitlab > gitlab_values.yaml
    
  2. gitlab_values.yaml を編集します:

    global:
      appConfig:
        ldap:
          servers:
            main:
              label: 'LDAP'
              host: 'ldap.mydomain.com'
              port: 636
              uid: 'sAMAccountName'
              base: 'dc=example,dc=com'
              encryption: 'simple_tls'
              tls_options:
                ca_file: '/path/to/ca_file.pem'
                ssl_version: 'TLSv1_2'
    
  3. ファイルを保存して、新しい値を適用します:

    helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
    

詳しくは、Helmチャートを使ってインストールしたGitLabインスタンスにLDAPを設定する方法をご覧ください。

Docker
  1. docker-compose.yml を編集します:

    version: "3.6"
    services:
      gitlab:
        image: 'gitlab/gitlab-ee:latest'
        restart: always
        hostname: 'gitlab.example.com'
        environment:
          GITLAB_OMNIBUS_CONFIG: |
            gitlab_rails['ldap_enabled'] = true
            gitlab_rails['ldap_servers'] = {
              'main' => {
                'label' => 'LDAP',
                'host' =>  'ldap.mydomain.com',
                'port' => 636,
                'uid' => 'sAMAccountName',
                'encryption' => 'simple_tls',
                'base' => 'dc=example,dc=com',
                'tls_options' => {
                  'ca_file' => '/path/to/ca_file.pem',
                  'ssl_version' => 'TLSv1_2'
                }
              }
            }
    
  2. ファイルを保存して GitLab を再起動します:

    docker compose up -d
    
Self-compiled (source)
  1. /home/git/gitlab/config/gitlab.yml を編集します:

    production: &base
      ldap:
        enabled: true
        servers:
          main:
            label: 'LDAP'
            host: 'ldap.mydomain.com'
            port: 636
            uid: 'sAMAccountName'
            encryption: 'simple_tls'
            base: 'dc=example,dc=com'
            tls_options:
              ca_file: '/path/to/ca_file.pem'
              ssl_version: 'TLSv1_2'
    
  2. ファイルを保存して GitLab を再起動します:

    # For systems running systemd
    sudo systemctl restart gitlab.target
       
    # For systems running SysV init
    sudo service gitlab restart
    

属性の設定

GitLab はこれらの LDAP 属性を使用して LDAP ユーザーのアカウントを作成します。指定する属性は以下のいずれかです:

  • 文字列としての属性名。例えば、'mail'
  • 順番に試す属性名の配列。例えば、['mail', 'email']

ユーザーの LDAP サインインは、uid](#basic-configuration-settings)として指定された LDAP 属性[です。

attributes ハッシュに以下の属性を定義する必要があります。

設定説明必須使用例
usernameユーザー自身のプロジェクトのパス (例:gitlab.example.com/username/project) や、イシュー、マージリクエスト、コメント (例:@username) で言及する際に使用します。username に指定された属性にメールアドレスが含まれている場合、GitLab ユーザー名は@ の前にあるメールアドレスの一部になります。 {点線円}いいえ['uid', 'userid', 'sAMAccountName']
emailユーザー電子メールのLDAP属性。 {点線円}いいえ['mail', 'email', 'userPrincipalName']
nameユーザー表示名の LDAP 属性。name が空白の場合、フルネームはfirst_namelast_name から取得されます。 {点線円}いいえ属性'cn''displayName' は一般的にフルネームを持ちます。あるいは、'somethingNonExistent'のような不在属性を指定することで、first_namelast_name の使用を強制することもできます。
first_nameユーザー名用の LDAP 属性。name に設定されている属性が存在しない場合に使用されます。 {点線円}いいえ'givenName'
last_nameユーザー姓のLDAP属性。name に設定されている属性が存在しない場合に使用されます。 {点線円}いいえ'sn'

LDAP同期設定

以下のLDAP同期設定が可能です:

設定説明必須使用例
group_baseグループの検索に使用されるベース。 {点線円}いいえ(external_groups が設定されている場合は必須)。'ou=groups,dc=gitlab,dc=example'
admin_groupGitLab管理者を含むグループのCN。cn=administrators や完全な DN ではありません。 {点線円}いいえ'administrators'
external_groups外部とみなされるべきユーザーを含むグループのCNの配列。cn=interns や完全な DN ではありません。 {点線円}いいえ['interns', 'contractors']
sync_ssh_keysユーザーの公開SSHキーを含むLDAP属性。 {点線円}いいえ 'sshPublicKey' 設定されていない場合は false

複数のLDAPサーバーを使用

複数のLDAPサーバーにユーザーがいる場合、それらを使うようにGitLabを設定することができます。LDAPサーバーを追加するには

  1. main LDAP 設定を複製してください。
  2. 各複製設定を、追加サーバーの詳細で編集します。
    • 追加のサーバーごとに、mainsecondarytertiaryのように異なるプロバイダーIDを選択してください。小文字の英数字を使用してください。GitLab はプロバイダー ID を使って、各ユーザーを特定の LDAP サーバーに関連付けます。
    • 各エントリーには、一意なlabel の値を使用してください。これらの値は、サインイン・ページのタブ名に使用されます。

次の例は、最小限の設定で3つのLDAPサーバを構成する方法を示しています:

Linux package (Omnibus)
  1. /etc/gitlab/gitlab.rb を編集します:

    gitlab_rails['ldap_enabled'] = true
    gitlab_rails['ldap_servers'] = {
      'main' => {
        'label' => 'GitLab AD',
        'host' =>  'ad.mydomain.com',
        'port' => 636,
        'uid' => 'sAMAccountName',
        'encryption' => 'simple_tls',
        'base' => 'dc=example,dc=com',
      },
       
      'secondary' => {
        'label' => 'GitLab Secondary AD',
        'host' =>  'ad-secondary.mydomain.com',
        'port' => 636,
        'uid' => 'sAMAccountName',
        'encryption' => 'simple_tls',
        'base' => 'dc=example,dc=com',
      },
       
      'tertiary' => {
        'label' => 'GitLab Tertiary AD',
        'host' =>  'ad-tertiary.mydomain.com',
        'port' => 636,
        'uid' => 'sAMAccountName',
        'encryption' => 'simple_tls',
        'base' => 'dc=example,dc=com',
      }
    }
    
  2. ファイルを保存して GitLab を再設定してください:

    sudo gitlab-ctl reconfigure
    
Helm chart (Kubernetes)
  1. Helm の値をエクスポートします:

    helm get values gitlab > gitlab_values.yaml
    
  2. gitlab_values.yaml を編集します:

    global:
      appConfig:
        ldap:
          servers:
            main:
              label: 'GitLab AD'
              host: 'ad.mydomain.com'
              port: 636
              uid: 'sAMAccountName'
              base: 'dc=example,dc=com'
              encryption: 'simple_tls'
            secondary:
              label: 'GitLab Secondary AD'
              host: 'ad-secondary.mydomain.com'
              port: 636
              uid: 'sAMAccountName'
              base: 'dc=example,dc=com'
              encryption: 'simple_tls'
            tertiary:
              label: 'GitLab Tertiary AD'
              host: 'ad-tertiary.mydomain.com'
              port: 636
              uid: 'sAMAccountName'
              base: 'dc=example,dc=com'
              encryption: 'simple_tls'
    
  3. ファイルを保存して、新しい値を適用します:

    helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
    
Docker
  1. docker-compose.yml を編集します:

    version: "3.6"
    services:
      gitlab:
        image: 'gitlab/gitlab-ee:latest'
        restart: always
        hostname: 'gitlab.example.com'
        environment:
          GITLAB_OMNIBUS_CONFIG: |
            gitlab_rails['ldap_enabled'] = true
            gitlab_rails['ldap_servers'] = {
              'main' => {
                'label' => 'GitLab AD',
                'host' =>  'ad.mydomain.com',
                'port' => 636,
                'uid' => 'sAMAccountName',
                'encryption' => 'simple_tls',
                'base' => 'dc=example,dc=com',
              },
       
              'secondary' => {
                'label' => 'GitLab Secondary AD',
                'host' =>  'ad-secondary.mydomain.com',
                'port' => 636,
                'uid' => 'sAMAccountName',
                'encryption' => 'simple_tls',
                'base' => 'dc=example,dc=com',
              },
       
              'tertiary' => {
                'label' => 'GitLab Tertiary AD',
                'host' =>  'ad-tertiary.mydomain.com',
                'port' => 636,
                'uid' => 'sAMAccountName',
                'encryption' => 'simple_tls',
                'base' => 'dc=example,dc=com',
              }
            }
    
  2. ファイルを保存して GitLab を再起動します:

    docker compose up -d
    
Self-compiled (source)
  1. /home/git/gitlab/config/gitlab.yml を編集します:

    production: &base
      ldap:
        enabled: true
        servers:
          main:
            label: 'GitLab AD'
            host: 'ad.mydomain.com'
            port: 636
            uid: 'sAMAccountName'
            base: 'dc=example,dc=com'
            encryption: 'simple_tls'
          secondary:
            label: 'GitLab Secondary AD'
            host: 'ad-secondary.mydomain.com'
            port: 636
            uid: 'sAMAccountName'
            base: 'dc=example,dc=com'
            encryption: 'simple_tls'
          tertiary:
            label: 'GitLab Tertiary AD'
            host: 'ad-tertiary.mydomain.com'
            port: 636
            uid: 'sAMAccountName'
            base: 'dc=example,dc=com'
            encryption: 'simple_tls'
    
  2. ファイルを保存して GitLab を再起動します:

    # For systems running systemd
    sudo systemctl restart gitlab.target
       
    # For systems running SysV init
    sudo service gitlab restart
    

様々な LDAP オプションについての詳細は、gitlab.yml.exampleldap 設定を参照してください。

この例では、以下のタブを持つサインイン・ページが表示されます:

  • GitLab AD
  • GitLab セカンダリAD.
  • GitLab Tertiary AD.

LDAPユーザー・フィルタの設定

LDAPサーバー上のLDAPユーザーのサブセットにすべてのGitLabアクセスを制限するには、まず設定されたbase 。しかし、必要に応じてユーザーをさらに絞り込むために、LDAPユーザーフィルターを設定することができます。フィルターはRFC 4515に準拠する必要があります。

Linux package (Omnibus)
  1. /etc/gitlab/gitlab.rb を編集します:

    gitlab_rails['ldap_servers'] = {
      'main' => {
        'user_filter' => '(employeeType=developer)'
      }
    }
    
  2. ファイルを保存して GitLab を再設定してください:

    sudo gitlab-ctl reconfigure
    
Helm chart (Kubernetes)
  1. Helm の値をエクスポートします:

    helm get values gitlab > gitlab_values.yaml
    
  2. gitlab_values.yaml を編集します:

    global:
      appConfig:
        ldap:
          servers:
            main:
              user_filter: '(employeeType=developer)'
    
  3. ファイルを保存して、新しい値を適用します:

    helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
    
Docker
  1. docker-compose.yml を編集します:

    version: "3.6"
    services:
      gitlab:
        image: 'gitlab/gitlab-ee:latest'
        restart: always
        hostname: 'gitlab.example.com'
        environment:
          GITLAB_OMNIBUS_CONFIG: |
            gitlab_rails['ldap_servers'] = {
              'main' => {
                'user_filter' => '(employeeType=developer)'
              }
            }
    
  2. ファイルを保存して GitLab を再起動します:

    docker compose up -d
    
Self-compiled (source)
  1. /home/git/gitlab/config/gitlab.yml を編集します:

    production: &base
      ldap:
        servers:
          main:
            user_filter: '(employeeType=developer)'
    
  2. ファイルを保存して GitLab を再起動します:

    # For systems running systemd
    sudo systemctl restart gitlab.target
       
    # For systems running SysV init
    sudo service gitlab restart
    

Active Directoryグループのネストしたメンバーへのアクセスを制限するには、以下の構文を使います:

(memberOf:1.2.840.113556.1.4.1941:=CN=My Group,DC=Example,DC=com)

LDAP_MATCHING_RULE_IN_CHAIN フィルタの詳細については、「検索フィルタの構文」を参照してください。

ユーザーフィルターのネストされたメンバーのサポートは、グループ同期のネストされたグループのサポートと混同しないでください。

GitLabはOmniAuth LDAPが使用するカスタムフィルター構文をサポートしていません。

特殊文字をuser_filter

user_filter DNは特殊文字を含むことができます。例えば

  • コンマ:

     OU=GitLab, Inc,DC=gitlab,DC=com
    
  • 開き括弧と閉じ括弧:

     OU=GitLab (Inc),DC=gitlab,DC=com
    

これらの文字は、RFC 4515で文書化されているようにエスケープされなければなりません。

  • カンマは\2C でエスケープしてください。例えば

     OU=GitLab\2C Inc,DC=gitlab,DC=com
    
  • 開き括弧は\28 で、閉じ括弧は\29でエスケープします。例えば

     OU=GitLab \28Inc\29,DC=gitlab,DC=com
    

LDAPユーザー名を小文字にします。

LDAP サーバの設定によっては、大文字のユーザ名を返すものもあります。このため、リンクやネームスペースを大文字の名前で作成するなど、いくつかの混乱したイシューが発生する可能性があります。

GitLabは、設定オプションlowercase_usernames を有効にすることで、LDAPサーバーが提供するユーザー名を自動的に小文字にすることができます。デフォルトでは、この設定オプションはfalse

Linux package (Omnibus)
  1. /etc/gitlab/gitlab.rb を編集します:

    gitlab_rails['ldap_servers'] = {
      'main' => {
        'lowercase_usernames' => true
      }
    }
    
  2. ファイルを保存して GitLab を再設定してください:

    sudo gitlab-ctl reconfigure
    
Helm chart (Kubernetes)
  1. Helm の値をエクスポートします:

    helm get values gitlab > gitlab_values.yaml
    
  2. gitlab_values.yaml を編集します:

    global:
      appConfig:
        ldap:
          servers:
            main:
             lowercase_usernames: true
    
  3. ファイルを保存して、新しい値を適用します:

    helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
    
Docker
  1. docker-compose.yml を編集します:

    version: "3.6"
    services:
      gitlab:
        image: 'gitlab/gitlab-ee:latest'
        restart: always
        hostname: 'gitlab.example.com'
        environment:
          GITLAB_OMNIBUS_CONFIG: |
            gitlab_rails['ldap_servers'] = {
              'main' => {
                'lowercase_usernames' => true
              }
            }
    
  2. ファイルを保存して GitLab を再起動します:

    docker compose up -d
    
Self-compiled (source)
  1. config/gitlab.yaml を編集します:

    production:
      ldap:
        servers:
          main:
            lowercase_usernames: true
    
  2. ファイルを保存して GitLab を再起動します:

    # For systems running systemd
    sudo systemctl restart gitlab.target
       
    # For systems running SysV init
    sudo service gitlab restart
    

LDAP ウェブサインインを無効にします。

SAML などの代替手段を使用する場合は、Web UI で LDAP 認証情報を使用しないようにすると便利です。これにより、グループ同期に LDAP を使用できるようになり、同時に SAML ID プロバイダがカスタム 2FA などの追加チェックを処理できるようになります。

LDAP ウェブサインインを無効にすると、ユーザーにはサインインページにLDAPタブが表示されなくなります。これは、Git へのアクセスに LDAP 認証情報を使用することを無効にするものではありません。

Linux package (Omnibus)
  1. /etc/gitlab/gitlab.rb を編集します:

    gitlab_rails['prevent_ldap_sign_in'] = true
    
  2. ファイルを保存して GitLab を再設定してください:

    sudo gitlab-ctl reconfigure
    
Helm chart (Kubernetes)
  1. Helm の値をエクスポートします:

    helm get values gitlab > gitlab_values.yaml
    
  2. gitlab_values.yaml を編集します:

    global:
      appConfig:
        ldap:
          preventSignin: true
    
  3. ファイルを保存して、新しい値を適用します:

    helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
    
Docker
  1. docker-compose.yml を編集します:

    version: "3.6"
    services:
      gitlab:
        image: 'gitlab/gitlab-ee:latest'
        restart: always
        hostname: 'gitlab.example.com'
        environment:
          GITLAB_OMNIBUS_CONFIG: |
            gitlab_rails['prevent_ldap_sign_in'] = true
    
  2. ファイルを保存して GitLab を再起動します:

    docker compose up -d
    
Self-compiled (source)
  1. config/gitlab.yaml を編集します:

    production:
      ldap:
        prevent_ldap_sign_in: true
    
  2. ファイルを保存して GitLab を再起動します:

    # For systems running systemd
    sudo systemctl restart gitlab.target
       
    # For systems running SysV init
    sudo service gitlab restart
    

暗号化された認証情報を使用

LDAP インテグレーション認証情報を設定ファイルにプレーンテキストで保存する代わりに、オプションで LDAP 認証情報に暗号化ファイルを使用できます。

前提条件:

  • 暗号化された認証情報を使用するには、まず暗号化設定を有効にする必要があります。

LDAPの暗号化設定は暗号化されたYAMLファイルに存在します。このファイルの暗号化されていない内容は、LDAP 設定内のservers ブロックのシークレット設定のサブセットでなければなりません。

暗号化ファイルの設定項目は以下のとおりです:

  • bind_dn
  • password
Linux package (Omnibus)
  1. /etc/gitlab/gitlab.rb の LDAP 設定が初期状態では次のようになっていた場合:

      gitlab_rails['ldap_servers'] = {
        'main' => {
          'bind_dn' => 'admin',
          'password' => '123'
        }
      }
    
  2. 暗号化されたシークレットを編集します:

    sudo gitlab-rake gitlab:ldap:secret:edit EDITOR=vim
    
  3. LDAPシークレットの暗号化されていない内容を入力します:

    main:
      bind_dn: admin
      password: '123'
    
  4. /etc/gitlab/gitlab.rb を編集し、bind_dnpassword の設定を削除します。
  5. ファイルを保存して GitLab を再設定してください:

    sudo gitlab-ctl reconfigure
    
Helm chart (Kubernetes)

LDAPパスワードを保存するためにKubernetesシークレットを使用します。詳しくは、Helm LDAPシークレットをお読みください。

Docker
  1. docker-compose.yml の LDAP 設定が初期状態では次のようになっていた場合:

    version: "3.6"
    services:
      gitlab:
        image: 'gitlab/gitlab-ee:latest'
        restart: always
        hostname: 'gitlab.example.com'
        environment:
          GITLAB_OMNIBUS_CONFIG: |
            gitlab_rails['ldap_servers'] = {
              'main' => {
                'bind_dn' => 'admin',
                'password' => '123'
              }
            }
    
  2. コンテナ内に入り、暗号化されたシークレットを編集します:

    sudo docker exec -t <container_name> bash
    gitlab-rake gitlab:ldap:secret:edit EDITOR=vim
    
  3. LDAPシークレットの暗号化されていない内容を入力します:

    main:
      bind_dn: admin
      password: '123'
    
  4. docker-compose.yml を編集し、bind_dnpassword の設定を削除します。
  5. ファイルを保存して GitLab を再起動します:

    docker compose up -d
    
Self-compiled (source)
  1. /home/git/gitlab/config/gitlab.yml の LDAP 設定が初期状態では次のようになっていた場合:

    production:
      ldap:
        servers:
          main:
            bind_dn: admin
            password: '123'
    
  2. 暗号化されたシークレットを編集します:

    bundle exec rake gitlab:ldap:secret:edit EDITOR=vim RAILS_ENVIRONMENT=production
    
  3. LDAPシークレットの暗号化されていない内容を入力します:

    main:
     bind_dn: admin
     password: '123'
    
  4. /home/git/gitlab/config/gitlab.yml を編集し、bind_dnpassword の設定を削除します。
  5. ファイルを保存して GitLab を再起動します:

    # For systems running systemd
    sudo systemctl restart gitlab.target
       
    # For systems running SysV init
    sudo service gitlab restart
    

LDAP DN と電子メールの更新

LDAPサーバーがGitLabでユーザーを作成すると、そのユーザーのLDAP DNが識別子としてGitLabアカウントにリンクされます。

ユーザーがLDAPを使ってサインインしようとすると、GitLabはそのユーザーのアカウントに保存されているDNを使ってユーザーを見つけようとします。

  • GitLabがDNとユーザーのメールアドレスによってユーザーを見つけた場合:
    • GitLabアカウントのメールアドレスと一致した場合、GitLabはそれ以上のアクションを行いません。
    • 変更された場合、GitLabはユーザーのメールアドレスの記録をLDAPのものと一致するように更新します。
  • GitLabはDNでユーザーを見つけられない場合、Eメールでユーザーを見つけようとします。もしGitLab:
    • Eメールによってユーザーを見つけた場合、GitLabはユーザーのGitLabアカウントに保存されているDNを更新します。どちらの値もLDAPに保存されている情報と一致するようになりました。
    • メールアドレスでユーザーを見つけられない(DNとメールアドレスの両方が変更された)場合は、User DN and email has changedを参照してください。

匿名LDAP認証の無効化

GitLabはTLSクライアント認証をサポートしていません。LDAPサーバーで以下のステップを完了してください。

  1. 匿名認証を無効にします。
  2. 以下の認証タイプのいずれかを有効にします:
    • 単純認証。
    • Simple Authentication and Security Layer(SASL) 認証。

LDAPサーバーのTLSクライアント認証設定を必須にすることはできず、TLSプロトコルでクライアントを認証することはできません。

LDAPから削除されたユーザー

LDAPサーバーから削除されたユーザー:

ただし、これらのユーザーは、次にLDAPチェックキャッシュが実行されるまで、SSHでGitを使い続けることができます。

アカウントをすぐに削除するには、ユーザーを手動でブロックします。

ユーザーメールアドレスの更新

LDAPサーバー上の電子メールアドレスは、LDAPがサインインに使用される場合、ユーザーの真実のソースと見なされます。

ユーザーのメールアドレスの更新は、ユーザーを管理するLDAPサーバー上で行う必要があります。GitLabのメールアドレスは以下のどちらかで更新されます:

更新されたユーザーの以前のメールアドレスは、そのユーザーのコミット履歴を保持するためのセカンダリアドレスになります。

ユーザー更新の期待される動作についての詳細はLDAP トラブルシューティング をご覧ください。

GoogleセキュアLDAP

GitLab 11.9で導入されました。

Google Cloud IdentityはSecure LDAPサービスを提供しており、GitLabで認証とグループ同期を設定することができます。詳しい設定方法はGoogle Secure LDAPをご覧ください。

ユーザーとグループの同期

LDAPとGitLab間のユーザーとグループの同期についての詳細は、LDAPの同期をご覧ください。

LDAPからSAMLへの移行

  1. SAML を設定します。auto_link_ldap_user を追加します:
  2. オプション。サインインページからLDAP認証を無効にします。

  3. オプション。ユーザーのリンクに関するイシューを修正するには、まずそれらのユーザーのLDAP IDを削除します。

  4. ユーザーがアカウントにサインインできることを確認します。ユーザーがサインインできない場合は、そのユーザーの LDAP が残っているかどうかを確認し、必要に応じて削除します。このイシューが解決しない場合は、ログをチェックして問題を特定します。

  5. 設定ファイルで、変更します:
    • omniauth_auto_link_usersaml に変更するだけです。
    • omniauth_auto_link_ldap_user を偽にします。
    • ldap_enabledfalse に変更します。また、LDAP プロバイダの設定をコメントアウトすることもできます。

トラブルシューティング

LDAPのトラブルシューティングについては、管理者ガイドを参照してください。