正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

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

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab Self-Managed

GitLabは、ユーザー認証をサポートするためにLDAP(Lightweight Directory Access Protocol)と連携しています。

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

  • Microsoft Active Directory。
  • Apple Open Directory。
  • OpenLDAP。
  • 389 Server。

GitLabは、Microsoft Active Directoryの信頼関係をサポートしていません。

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

LDAP識別名(DN)は、次の場合に既存のGitLabユーザーに関連付けられます:

  • 既存のユーザーが初めてLDAPを通じてGitLabにサインインした場合。
  • LDAPのメールアドレスが、既存のGitLabユーザーのプライマリーメールアドレスである場合。LDAPのメール属性が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が設定されていることを意味します。

ユーザーがLDAPでアクティブか非アクティブかを確認するには、次のPowerShellコマンドとActive Directoryモジュールを使用して、Active Directoryを確認します:

Get-ADUser -Identity <username> -Properties userAccountControl | Select-Object Name, userAccountControl

GitLabは、次のタイミングでLDAPユーザーの状態をチェックします:

  • 任意の認証プロバイダーを使用してサインインするとき。
  • アクティブなWebセッション、あるいはトークンまたはSSHキーを使用したGitリクエストに対して、1時間に1回。
  • LDAPのユーザー名とパスワードを使用してGit over HTTPリクエストを実行するとき。
  • ユーザー同期の際に1日1回。

ユーザーは、LDAPでアクティブでなくなった場合に次のようになります:

  • サインアウトされる。
  • ldap_blocked状態に設定される。
  • LDAPで再アクティブ化されるまで、どの認証プロバイダーを使用してもサインインできなくなる。

セキュリティリスク

LDAPインテグレーションは、LDAPユーザーが以下を実行できない場合にのみ使用してください:

  • LDAPサーバー上で、自身のmailemail、またはuserPrincipalName属性を変更すること。ユーザーがこれらの属性を変更できる場合、GitLabサーバー上の任意のアカウントを乗っ取る可能性があります。
  • 同じメールアドレスを共有すること。同じメールアドレスを持つLDAPユーザーは、同じGitLabアカウントを共有できます。

LDAPを設定する

前提要件:

  • メールアドレスを使用してサインインするかどうかにかかわらず、LDAPを使用するにはメールアドレスが必要です。

LDAPを設定するには、設定ファイルを編集します:

編集するファイルは、GitLabのセットアップによって異なります:

  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
  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'
              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を設定する方法を参照してください。

  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',
                '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
  1. /home/git/gitlab/config/gitlab.ymlを編集します:

    production: &base
      ldap:
        enabled: true
        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を再起動します:

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

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

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

基本設定

次の基本設定を使用できます:

設定必須説明
labelcheck-circle はい文字列LDAPサーバーに付けるわかりやすい名前。サインインページに表示されます。例: 'Paris''Acme, Ltd.'
hostcheck-circle はい文字列LDAPサーバーのIPアドレスまたはドメイン名。hostsが定義されている場合は無視されます。例: 'ldap.mydomain.com'
portcheck-circle はい整数LDAPサーバーで接続するポート。hostsが定義されている場合は無視されます。例: 389または636(SSLの場合)
uidcheck-circle はい文字列ユーザーがサインインする際に使用するユーザー名にマップするLDAP属性。uidにマップされる値ではなく、属性そのものである必要があります。GitLabのユーザー名には影響しません(属性セクションを参照)。例: 'sAMAccountName''uid''userPrincipalName'
basecheck-circle はい文字列ユーザーを検索できるベース。例: 'ou=people,dc=gitlab,dc=example''DC=mydomain,DC=com'
encryptioncheck-circle はい文字列暗号化方式(methodキーは非推奨となり、代わりにencryptionが使用されるようになりました)。指定できる値は、'start_tls''simple_tls''plain'のいずれかです。simple_tlsはLDAPライブラリの「Simple TLS」に対応します。start_tlsはStartTLSに対応しますが、標準のTLSと混同しないよう注意してください。simple_tlsを指定した場合、通常はポート636を使用し、start_tls(StartTLS)はポート389を使用します。plainもポート389で動作します。
hostsdotted-circle いいえ文字列と整数の配列接続を確立するためのホストとポートのペアの配列。設定される各サーバーは、同一のデータセットを持つ必要があります。これは、複数の異なるLDAPサーバーを設定するためのものではなく、フェイルオーバーを設定するためのものです。ホストは、設定された順に試行されます。例: [['ldap1.mydomain.com', 636], ['ldap2.mydomain.com', 636]]
bind_dndotted-circle いいえ文字列バインドするユーザーの完全なDN。例: 'america\momo''CN=Gitlab,OU=Users,DC=domain,DC=com'
passworddotted-circle いいえ文字列バインドするユーザーのパスワード。
verify_certificatesdotted-circle いいえブール値trueがデフォルトです。暗号化方式がstart_tlsまたはsimple_tlsの場合、SSL証明書の検証を有効にします。falseに設定すると、LDAPサーバーのSSL証明書は検証されません。
timeoutdotted-circle いいえ整数10がデフォルトです。LDAPクエリのタイムアウトを秒単位で設定します。これにより、LDAPサーバーが応答しなくなった場合にリクエストがブロックされるのを防げます。値を0に設定すると、タイムアウトは無効になります。
active_directorydotted-circle いいえブール値この設定は、LDAPサーバーがActive Directoryであるかどうかを指定します。AD以外のサーバーの場合、AD固有のクエリはスキップされます。LDAPサーバーがADでない場合は、これをfalseに設定します。
allow_username_or_email_logindotted-circle いいえブール値falseがデフォルトです。有効にすると、GitLabは、サインイン時にユーザーから送信されたLDAPユーザー名の最初の@以降をすべて無視します。Active Directoryでuid: 'userPrincipalName'を使用している場合は、この設定を無効にする必要があります。その理由は、userPrincipalName@が含まれているためです。
block_auto_created_usersdotted-circle いいえブール値falseがデフォルトです。GitLabインストール環境で請求対象ユーザー数を厳密に管理するには、この設定を有効にします。有効にすると、新しいユーザーは管理者によって承認されるまでブロックされたままになります。
user_filterdotted-circle いいえ文字列LDAPユーザーをフィルタリングします。RFC 4515の形式に従います。GitLabはomniauth-ldapのカスタムフィルター構文をサポートしていません。user_filterフィールドの構文の例:

- '(employeeType=developer)'
- '(&(objectclass=user)(|(samaccountname=momo)(samaccountname=toto)))'
lowercase_usernamesdotted-circle いいえブール値有効にすると、GitLabは名前を小文字に変換します。
retry_empty_result_with_codesdotted-circle いいえ配列結果/コンテンツが空であった場合に操作の再試行を試みるLDAPクエリ応答コードの配列。Google Secure LDAPの場合、この値を[80]に設定します。

SSL設定

tls_optionsの名前と値のペアで、SSLを設定できます。次の設定はすべてオプションです:

設定説明
ca_fileたとえば、内部CAが必要な場合などに、PEM形式のCA証明書を含むファイルのパスを指定します。'/etc/ca.pem'
ssl_versionOpenSSLのデフォルト設定が適切でない場合に使用する、OpenSSLバージョンを指定します。'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_fileおよびssl_versionを設定する方法を示しています:

  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
  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を設定する方法を参照してください。

  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
  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として指定されたLDAP属性が使用されます。

次のLDAP属性はすべてオプションです。これらの属性を定義する場合は、attributesハッシュで指定する必要があります。

設定説明
usernameGitLabアカウントのプロビジョニングに使用する@username。値にメールアドレスが含まれている場合、メールアドレスの@より前の部分がGitLabのユーザー名になります。デフォルトでは、uidとして指定されたLDAP属性になります。['uid', 'userid', 'sAMAccountName']
emailユーザーのメールアドレスのLDAP属性。デフォルトは['mail', 'email', 'userPrincipalName']です。['mail', 'email', 'userPrincipalName']
nameユーザー表示名のLDAP属性。nameが空白の場合、フルネームはfirst_namelast_nameから取得されます。'cn'がデフォルトです。'cn''displayName'属性は一般的にフルネームが格納されます。代わりに、'somethingNonExistent'などの存在しない属性を指定することで、first_namelast_nameを強制的に使用させることができます。
first_nameユーザーの名のLDAP属性。nameに設定された属性が存在しない場合に使用されます。'givenName'がデフォルトです。'givenName'
last_nameユーザーの姓のLDAP属性。nameに設定された属性が存在しない場合に使用されます。'sn'がデフォルトです。'sn'

LDAP同期の設定

  • プラン: Premium、Ultimate
  • 提供形態: GitLab Self-Managed

以下のLDAP同期の設定はオプションです。ただし、external_groupsが設定されている場合はgroup_baseが必須となります:

設定説明
group_baseグループの検索に使用されるベース。有効なグループはすべて、このベースをDNの一部として持ちます。'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

Railsサーバーとは異なるサーバーでSidekiqが設定されている場合、LDAP同期を機能させるには、すべてのSidekiqサーバーにもLDAP設定を追加する必要があります。

複数のLDAPサーバーを使用する

  • プラン: Premium、Ultimate
  • 提供形態: GitLab Self-Managed

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

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

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

  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
  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
  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
  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 Secondary AD
  • GitLab Tertiary AD

LDAPユーザーフィルターを設定する

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

  1. /etc/gitlab/gitlab.rbを編集します:

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

    sudo gitlab-ctl reconfigure
  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
  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
  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です。

  1. /etc/gitlab/gitlab.rbを編集します:

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

    sudo gitlab-ctl reconfigure
  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
  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
  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 Webサインインを無効にする

SAMLなどの代替手段を優先したい場合、Web UIでのLDAP認証を無効にすると便利です。これにより、グループ同期にはLDAPを利用しつつ、SAMLのIdP側でカスタム2FAなど追加の認証チェックを行うことができます。

LDAP Webサインインを無効にすると、サインインページにLDAPタブは表示されなくなります。ただし、GitアクセスにLDAP認証情報を使用することは可能です。

  1. /etc/gitlab/gitlab.rbを編集します:

    gitlab_rails['prevent_ldap_sign_in'] = true
  2. ファイルを保存して、GitLabを再設定します:

    sudo gitlab-ctl reconfigure
  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
  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
  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

GitLabでスマートカード認証を利用できるようにする

LDAPサーバーおよびGitLabにおけるスマートカードの使用の詳細については、スマートカード認証を参照してください。

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

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

前提要件:

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

LDAPの暗号化設定は、暗号化されたYAMLファイルとして存在します。このファイルに含める暗号化されていない内容は、LDAP設定のserversブロックに含まれるシークレット設定の一部である必要があります。

暗号化されたファイルでサポートされている設定項目は次のとおりです:

  • bind_dn
  • password
  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

Kubernetesシークレットを使用してLDAPパスワードを保存します。詳細については、HelmにおけるLDAPシークレットを参照してください。

  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
  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でユーザーを特定できない場合、メールアドレスでユーザーを検索しようとします。検索結果に応じて、次のように対応します:
    • メールアドレスでユーザーを特定できた場合、GitLabはユーザーのGitLabアカウントに保存されているDNを更新します。これにより、両方の値がLDAPに保存されている情報と一致するようになります。
    • メールアドレスでユーザーを特定できない場合(DNメールアドレスが変更された場合)、ユーザーのDNとメールアドレスが変更されたを参照してください。

匿名LDAP認証を無効にする

GitLabはTLSクライアント認証をサポートしていません。LDAPサーバーで次の手順を実行します。

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

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

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

LDAPサーバーから削除されたユーザーは、以下の通りとなります:

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

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

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

LDAPを使用してサインインする場合、LDAPサーバー上のメールアドレスはユーザーの信頼できる情報源と見なされます。

ユーザーのメールアドレスの更新は、そのユーザーを管理しているLDAPサーバーで行う必要があります。GitLab側のメールアドレスは、次のいずれかのタイミングで更新されます:

  • ユーザーが次回サインインしたとき。
  • 次回のユーザー同期を実行したとき。

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

ユーザー更新時に予期される動作の詳細については、LDAPのトラブルシューティングセクションを参照してください。

Google Secure LDAP

Google Cloud Identityは、GitLabでの認証やグループ同期に利用できるSecure LDAPサービスを提供しています。詳細な設定手順については、Google Secure LDAPを参照してください。

ユーザーとグループを同期する

LDAPとGitLab間でユーザーとグループを同期する方法の詳細については、LDAP同期を参照してください。

LDAPからSAMLに移行する

  1. 以下のファイルにSAML設定を追加します:

  2. オプション。サインインページからLDAP認証を無効にします

  3. オプション。ユーザーのリンクに関する問題を修正するには、まず、該当するユーザーのLDAP IDを削除できます。

  4. ユーザーがアカウントにサインインできることを確認します。ユーザーがサインインできない場合は、そのユーザーのLDAPがまだ残っていないかを確認し、必要に応じて削除します。この問題が依然として解決しない場合は、ログを調べて問題を特定してください。

  5. 設定ファイルで、次のように変更します:

    • omniauth_auto_link_usersamlのみに変更する。
    • omniauth_auto_link_ldap_userをfalseに変更する。
    • ldap_enabledfalseに変更する。LDAPプロバイダーの設定をコメントアウトすることも可能です。

トラブルシューティング

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