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を通じて追加されたユーザー:
- 通常、ライセンスされたシートを使用します。
- Gitのパスワード認証が無効になっている場合でも、GitLabのユーザー名、またはメールアドレスとLDAPパスワードを使用してGitで認証できます。
LDAP識別名(DN)は、次の場合に既存のGitLabユーザーに関連付けられます:
- 既存のユーザーが初めてLDAPを通じてGitLabにサインインした場合。
- LDAPのメールアドレスが、既存のGitLabユーザーのプライマリーメールアドレスである場合。LDAPのメール属性がGitLabユーザーデータベースに見つからない場合は、新しいユーザーが作成されます。
既存のGitLabユーザーがLDAPサインインを有効にする場合は、次の手順に従います:
- GitLabのメールアドレスがLDAPのメールアドレスと一致することを確認します。
- LDAP認証情報を使用してGitLabにサインインします。
セキュリティ
GitLabは、ユーザーがLDAPでまだアクティブであるかを確認します。
ユーザーは、次の場合にLDAPで非アクティブと見なされます:
- ディレクトリから完全に削除された。
- 設定された
baseDNまたは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, userAccountControlGitLabは、次のタイミングでLDAPユーザーの状態をチェックします:
- 任意の認証プロバイダーを使用してサインインするとき。
- アクティブなWebセッション、あるいはトークンまたはSSHキーを使用したGitリクエストに対して、1時間に1回。
- LDAPのユーザー名とパスワードを使用してGit over HTTPリクエストを実行するとき。
- ユーザー同期の際に1日1回。
ユーザーは、LDAPでアクティブでなくなった場合に次のようになります:
- サインアウトされる。
ldap_blocked状態に設定される。- LDAPで再アクティブ化されるまで、どの認証プロバイダーを使用してもサインインできなくなる。
セキュリティリスク
LDAPインテグレーションは、LDAPユーザーが以下を実行できない場合にのみ使用してください:
- LDAPサーバー上で、自身の
mail、email、またはuserPrincipalName属性を変更すること。ユーザーがこれらの属性を変更できる場合、GitLabサーバー上の任意のアカウントを乗っ取る可能性があります。 - 同じメールアドレスを共有すること。同じメールアドレスを持つLDAPユーザーは、同じGitLabアカウントを共有できます。
LDAPを設定する
前提要件:
- メールアドレスを使用してサインインするかどうかにかかわらず、LDAPを使用するにはメールアドレスが必要です。
LDAPを設定するには、設定ファイルを編集します:
設定ファイルには、次の基本的な設定を含める必要があります:
labelhostportuidbaseencryption
設定ファイルには、次のオプションの設定を含めることができます:
LDAPを設定して、以下を行うこともできます:
編集するファイルは、GitLabのセットアップによって異なります:
/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 } }ファイルを保存して、GitLabを再設定します:
sudo gitlab-ctl reconfigure
Helmの値をエクスポートします:
helm get values gitlab > gitlab_values.yamlgitlab_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ファイルを保存して、新しい値を適用します:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
詳細については、Helmチャートを使用してインストールされたGitLabインスタンス向けにLDAPを設定する方法を参照してください。
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 } }ファイルを保存して、GitLabを再起動します:
docker compose up -d
/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ファイルを保存して、GitLabを再起動します:
# For systems running systemd sudo systemctl restart gitlab.target # For systems running SysV init sudo service gitlab restart
さまざまなLDAPオプションの詳細については、gitlab.yml.exampleのldapの設定を参照してください。
LDAPを設定した後、設定をテストするには、LDAPチェック用のRakeタスクを使用します。
基本設定
次の基本設定を使用できます:
| 設定 | 必須 | 型 | 説明 |
|---|---|---|---|
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が使用されるようになりました)。指定できる値は、'start_tls'、'simple_tls'、'plain'のいずれかです。simple_tlsはLDAPライブラリの「Simple TLS」に対応します。start_tlsはStartTLSに対応しますが、標準のTLSと混同しないよう注意してください。simple_tlsを指定した場合、通常はポート636を使用し、start_tls(StartTLS)はポート389を使用します。plainもポート389で動作します。 |
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であるかどうかを指定します。AD以外のサーバーの場合、AD固有のクエリはスキップされます。LDAPサーバーがADでない場合は、これをfalseに設定します。 |
allow_username_or_email_login | いいえ | ブール値 | falseがデフォルトです。有効にすると、GitLabは、サインイン時にユーザーから送信されたLDAPユーザー名の最初の@以降をすべて無視します。Active Directoryで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]に設定します。 |
SSL設定
tls_optionsの名前と値のペアで、SSLを設定できます。次の設定はすべてオプションです:
| 設定 | 説明 | 例 |
|---|---|---|
ca_file | たとえば、内部CAが必要な場合などに、PEM形式のCA証明書を含むファイルのパスを指定します。 | '/etc/ca.pem' |
ssl_version | OpenSSLのデフォルト設定が適切でない場合に使用する、OpenSSLバージョンを指定します。 | 'TLSv1_1' |
ciphers | LDAPサーバーとの通信で使用する特定のSSL暗号。 | 'ALL:!EXPORT:!LOW:!aNULL:!eNULL:!SSLv2' |
cert | クライアント証明書。 | '-----BEGIN CERTIFICATE----- <REDACTED> -----END CERTIFICATE -----' |
key | クライアントの秘密キー。 | '-----BEGIN PRIVATE KEY----- <REDACTED> -----END PRIVATE KEY -----' |
次の例は、tls_optionsでca_fileおよびssl_versionを設定する方法を示しています:
/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' } } }ファイルを保存して、GitLabを再設定します:
sudo gitlab-ctl reconfigure
Helmの値をエクスポートします:
helm get values gitlab > gitlab_values.yamlgitlab_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'ファイルを保存して、新しい値を適用します:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
詳細については、Helmチャートを使用してインストールされたGitLabインスタンス向けにLDAPを設定する方法を参照してください。
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' } } }ファイルを保存して、GitLabを再起動します:
docker compose up -d
/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'ファイルを保存して、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ハッシュで指定する必要があります。
| 設定 | 説明 | 例 |
|---|---|---|
username | GitLabアカウントのプロビジョニングに使用する@username。値にメールアドレスが含まれている場合、メールアドレスの@より前の部分がGitLabのユーザー名になります。デフォルトでは、uidとして指定されたLDAP属性になります。 | ['uid', 'userid', 'sAMAccountName'] |
email | ユーザーのメールアドレスのLDAP属性。デフォルトは['mail', 'email', 'userPrincipalName']です。 | ['mail', 'email', 'userPrincipalName'] |
name | ユーザー表示名のLDAP属性。nameが空白の場合、フルネームはfirst_nameとlast_nameから取得されます。'cn'がデフォルトです。 | 'cn'や'displayName'属性は一般的にフルネームが格納されます。代わりに、'somethingNonExistent'などの存在しない属性を指定することで、first_nameとlast_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_group | GitLab管理者を含むグループの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サーバーを追加するには、次の手順に従います:
mainLDAP設定を複製します。- 複製された各設定を編集し、追加のサーバーの詳細を入力します。
- 追加する各サーバーには、
main、secondary、tertiaryのように、異なるプロバイダーIDを指定します。小文字の英数字を使用します。GitLabはこのプロバイダーIDを使用して、各ユーザーを特定のLDAPサーバーに関連付けます。 - エントリごとに、一意の
label値を使用します。これらの値は、サインインページのタブ名として使用されます。
- 追加する各サーバーには、
次の例は、最小限の設定で3つのLDAPサーバーを設定する方法を示しています:
/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', } }ファイルを保存して、GitLabを再設定します:
sudo gitlab-ctl reconfigure
Helmの値をエクスポートします:
helm get values gitlab > gitlab_values.yamlgitlab_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'ファイルを保存して、新しい値を適用します:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
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', } }ファイルを保存して、GitLabを再起動します:
docker compose up -d
/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'ファイルを保存して、GitLabを再起動します:
# For systems running systemd sudo systemctl restart gitlab.target # For systems running SysV init sudo service gitlab restart
さまざまなLDAPオプションの詳細については、gitlab.yml.exampleのldapの設定を参照してください。
この例では、サインインページに次のタブが表示されます:
- GitLab AD
- GitLab Secondary AD
- GitLab Tertiary AD
LDAPユーザーフィルターを設定する
GitLabへのすべてのアクセスを、LDAPサーバー上のLDAPユーザーの一部に制限するには、まず設定済みのbaseを絞り込みます。必要に応じて、LDAPユーザーフィルターを設定してユーザーをさらに絞り込むことができます。フィルターは、RFC 4515に準拠する必要があります。
/etc/gitlab/gitlab.rbを編集します:gitlab_rails['ldap_servers'] = { 'main' => { 'user_filter' => '(employeeType=developer)' } }ファイルを保存して、GitLabを再設定します:
sudo gitlab-ctl reconfigure
Helmの値をエクスポートします:
helm get values gitlab > gitlab_values.yamlgitlab_values.yamlを編集します:global: appConfig: ldap: servers: main: user_filter: '(employeeType=developer)'ファイルを保存して、新しい値を適用します:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
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)' } }ファイルを保存して、GitLabを再起動します:
docker compose up -d
/home/git/gitlab/config/gitlab.ymlを編集します:production: &base ldap: servers: main: user_filter: '(employeeType=developer)'ファイルを保存して、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です。
/etc/gitlab/gitlab.rbを編集します:gitlab_rails['ldap_servers'] = { 'main' => { 'lowercase_usernames' => true } }ファイルを保存して、GitLabを再設定します:
sudo gitlab-ctl reconfigure
Helmの値をエクスポートします:
helm get values gitlab > gitlab_values.yamlgitlab_values.yamlを編集します:global: appConfig: ldap: servers: main: lowercase_usernames: trueファイルを保存して、新しい値を適用します:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
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 } }ファイルを保存して、GitLabを再起動します:
docker compose up -d
config/gitlab.yamlを編集します:production: ldap: servers: main: lowercase_usernames: trueファイルを保存して、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認証情報を使用することは可能です。
/etc/gitlab/gitlab.rbを編集します:gitlab_rails['prevent_ldap_sign_in'] = trueファイルを保存して、GitLabを再設定します:
sudo gitlab-ctl reconfigure
Helmの値をエクスポートします:
helm get values gitlab > gitlab_values.yamlgitlab_values.yamlを編集します:global: appConfig: ldap: preventSignin: trueファイルを保存して、新しい値を適用します:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
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ファイルを保存して、GitLabを再起動します:
docker compose up -d
config/gitlab.yamlを編集します:production: ldap: prevent_ldap_sign_in: trueファイルを保存して、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_dnpassword
最初に
/etc/gitlab/gitlab.rbのLDAP設定が次のようになっている場合:gitlab_rails['ldap_servers'] = { 'main' => { 'bind_dn' => 'admin', 'password' => '123' } }暗号化されたシークレットを編集します:
sudo gitlab-rake gitlab:ldap:secret:edit EDITOR=vimLDAPシークレットの暗号化されていない内容を入力します:
main: bind_dn: admin password: '123'/etc/gitlab/gitlab.rbを編集し、bind_dnとpasswordの設定を削除します。ファイルを保存して、GitLabを再設定します:
sudo gitlab-ctl reconfigure
Kubernetesシークレットを使用してLDAPパスワードを保存します。詳細については、HelmにおけるLDAPシークレットを参照してください。
最初に
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' } }コンテナ内に入り、暗号化されたシークレットを編集します:
sudo docker exec -t <container_name> bash gitlab-rake gitlab:ldap:secret:edit EDITOR=vimLDAPシークレットの暗号化されていない内容を入力します:
main: bind_dn: admin password: '123'docker-compose.ymlを編集し、bind_dnとpasswordの設定を削除します。ファイルを保存して、GitLabを再起動します:
docker compose up -d
最初に
/home/git/gitlab/config/gitlab.ymlのLDAP設定が次のようになっている場合:production: ldap: servers: main: bind_dn: admin password: '123'暗号化されたシークレットを編集します:
bundle exec rake gitlab:ldap:secret:edit EDITOR=vim RAILS_ENVIRONMENT=productionLDAPシークレットの暗号化されていない内容を入力します:
main: bind_dn: admin password: '123'/home/git/gitlab/config/gitlab.ymlを編集し、bind_dnとpasswordの設定を削除します。ファイルを保存して、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サーバーで次の手順を実行します。
- 匿名認証を無効にします。
- 次のいずれかの認証タイプを有効にします:
- 単純認証。
- SASL(Simple Authenticationand Security Layer)認証。
LDAPサーバーにおいて、TLSクライアント認証の設定を必須にすることはできません。また、クライアントはTLSプロトコルで認証できません。
LDAPから削除されたユーザー
LDAPサーバーから削除されたユーザーは、以下の通りとなります:
- GitLabへのサインインが即座にブロックされます。
- ライセンスを消費しなくなります。
ただし、これらのユーザーは、次回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に移行する
以下のファイルにSAML設定を追加します:
オプション。サインインページからLDAP認証を無効にします。
オプション。ユーザーのリンクに関する問題を修正するには、まず、該当するユーザーのLDAP IDを削除できます。
ユーザーがアカウントにサインインできることを確認します。ユーザーがサインインできない場合は、そのユーザーのLDAPがまだ残っていないかを確認し、必要に応じて削除します。この問題が依然として解決しない場合は、ログを調べて問題を特定してください。
設定ファイルで、次のように変更します:
omniauth_auto_link_userをsamlのみに変更する。omniauth_auto_link_ldap_userをfalseに変更する。ldap_enabledをfalseに変更する。LDAPプロバイダーの設定をコメントアウトすることも可能です。
トラブルシューティング
LDAPのトラブルシューティングに関する管理者ガイドを参照してください。