- セキュリティ
- LDAPの設定
- LDAP DN と電子メールの更新
- 匿名LDAP認証の無効化
- LDAPから削除されたユーザー
- ユーザーメールアドレスの更新
- GoogleセキュアLDAP
- ユーザーとグループの同期
- LDAPからSAMLへの移行
- トラブルシューティング
LDAPとGitLabのインテグレーション
GitLabはLDAP - Lightweight Directory Access Protocolとインテグレーションし、ユーザー認証をサポートします。
このインテグレーションは、以下を含むほとんどのLDAP準拠のディレクトリサーバで動作します:
- Microsoft Active Directory。
- Apple Open Directory.
- オープンLDAP。
- 389 サーバ
LDAPを通して追加されたユーザー:
LDAPの識別名(DN) 、GitLabの内部ユーザーと関連付けられます:
- 既存のユーザーが初めて GitLab に LDAP でサインインするとき。
- LDAPメールアドレスは、既存のGitLabユーザーのプライマリメールアドレスです。LDAP email属性がGitLabユーザーデータベースに見つからない場合、新しいユーザーが作成されます。
既存のGitLabユーザーが自分自身のためにLDAPサインインを有効にしたい場合は、次のようにします:
- GitLab のメールアドレスと LDAP のメールアドレスが一致していることを確認します。
- 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_tls start_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 の設定例です。
-
/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.yaml
-
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
-
ファイルを保存して、新しい値を適用します:
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', '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 } }
-
ファイルを保存して 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' 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
-
ファイルを保存して GitLab を再起動します:
# For systems running systemd sudo systemctl restart gitlab.target # For systems running SysV init sudo service gitlab restart
様々な LDAP オプションについての詳細は、gitlab.yml.example
のldap
設定を参照してください。
SSL設定
SSL構成設定は、tls_options
名前と値のペアで構成できます。以下のSSL設定項目があります:
設定 | 説明 | 必須 | 使用例 |
---|---|---|---|
ca_file | 内部 CA が必要な場合など、PEM 形式の CA 証明書を含むファイルへのパスを指定します。 | {点線円}いいえ | '/etc/ca.pem' |
ssl_version | OpenSSLのデフォルトが適切でない場合に、使用するOpenSSLのSSLバージョンを指定します。 | {点線円}いいえ | '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.yaml
-
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'
-
ファイルを保存して、新しい値を適用します:
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
](#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_name とlast_name から取得されます。 | {点線円}いいえ | 属性'cn' や'displayName' は一般的にフルネームを持ちます。あるいは、'somethingNonExistent' のような不在属性を指定することで、first_name とlast_name の使用を強制することもできます。 |
first_name | ユーザー名用の LDAP 属性。name に設定されている属性が存在しない場合に使用されます。 | {点線円}いいえ | 'givenName' |
last_name | ユーザー姓のLDAP属性。name に設定されている属性が存在しない場合に使用されます。 | {点線円}いいえ | 'sn' |
LDAP同期設定
以下のLDAP同期設定が可能です:
設定 | 説明 | 必須 | 使用例 |
---|---|---|---|
group_base | グループの検索に使用されるベース。 |
{点線円}いいえ(external_groups が設定されている場合は必須)。 | '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 |
複数のLDAPサーバーを使用
複数のLDAPサーバーにユーザーがいる場合、それらを使うようにGitLabを設定することができます。LDAPサーバーを追加するには
-
main
LDAP 設定を複製してください。 - 各複製設定を、追加サーバーの詳細で編集します。
- 追加のサーバーごとに、
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.yaml
-
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'
-
ファイルを保存して、新しい値を適用します:
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 セカンダリAD.
- GitLab Tertiary AD.
LDAPユーザー・フィルタの設定
LDAPサーバー上のLDAPユーザーのサブセットにすべてのGitLabアクセスを制限するには、まず設定された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.yaml
-
gitlab_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.yaml
-
gitlab_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 ウェブサインインを無効にします。
SAML などの代替手段を使用する場合は、Web UI で LDAP 認証情報を使用しないようにすると便利です。これにより、グループ同期に LDAP を使用できるようになり、同時に SAML ID プロバイダがカスタム 2FA などの追加チェックを処理できるようになります。
LDAP ウェブサインインを無効にすると、ユーザーにはサインインページに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.yaml
-
gitlab_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
暗号化された認証情報を使用
LDAP インテグレーション認証情報を設定ファイルにプレーンテキストで保存する代わりに、オプションで LDAP 認証情報に暗号化ファイルを使用できます。
前提条件:
- 暗号化された認証情報を使用するには、まず暗号化設定を有効にする必要があります。
LDAPの暗号化設定は暗号化されたYAMLファイルに存在します。このファイルの暗号化されていない内容は、LDAP 設定内のservers
ブロックのシークレット設定のサブセットでなければなりません。
暗号化ファイルの設定項目は以下のとおりです:
bind_dn
password
-
/etc/gitlab/gitlab.rb
の LDAP 設定が初期状態では次のようになっていた場合:gitlab_rails['ldap_servers'] = { 'main' => { 'bind_dn' => 'admin', 'password' => '123' } }
-
暗号化されたシークレットを編集します:
sudo gitlab-rake gitlab:ldap:secret:edit EDITOR=vim
-
LDAPシークレットの暗号化されていない内容を入力します:
main: bind_dn: admin password: '123'
-
/etc/gitlab/gitlab.rb
を編集し、bind_dn
とpassword
の設定を削除します。 -
ファイルを保存して GitLab を再設定してください:
sudo gitlab-ctl reconfigure
LDAPパスワードを保存するためにKubernetesシークレットを使用します。詳しくは、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=vim
-
LDAPシークレットの暗号化されていない内容を入力します:
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=production
-
LDAPシークレットの暗号化されていない内容を入力します:
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でユーザーを見つけられない場合、Eメールでユーザーを見つけようとします。もしGitLab:
- Eメールによってユーザーを見つけた場合、GitLabはユーザーのGitLabアカウントに保存されているDNを更新します。どちらの値もLDAPに保存されている情報と一致するようになりました。
- メールアドレスでユーザーを見つけられない(DNとメールアドレスの両方が変更された)場合は、User DN and email has changedを参照してください。
匿名LDAP認証の無効化
GitLabはTLSクライアント認証をサポートしていません。LDAPサーバーで以下のステップを完了してください。
- 匿名認証を無効にします。
- 以下の認証タイプのいずれかを有効にします:
- 単純認証。
- Simple Authentication and Security Layer(SASL) 認証。
LDAPサーバーのTLSクライアント認証設定を必須にすることはできず、TLSプロトコルでクライアントを認証することはできません。
LDAPから削除されたユーザー
LDAPサーバーから削除されたユーザー:
- GitLabへのサインインが即座にブロックされます。
- ライセンスを消費しなくなります。
ただし、これらのユーザーは、次に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への移行
-
SAML を設定します。
auto_link_ldap_user
を追加します:-
gitlab.rb
Linux パッケージインストール用。 -
values.yml
Helmチャートのインストール用.詳細については、すべてのプロバイダーの初期設定を参照してください。
-
-
オプション。サインインページからLDAP認証を無効にします。
-
オプション。ユーザーのリンクに関するイシューを修正するには、まずそれらのユーザーのLDAP IDを削除します。
-
ユーザーがアカウントにサインインできることを確認します。ユーザーがサインインできない場合は、そのユーザーの LDAP が残っているかどうかを確認し、必要に応じて削除します。このイシューが解決しない場合は、ログをチェックして問題を特定します。
- 設定ファイルで、変更します:
-
omniauth_auto_link_user
をsaml
に変更するだけです。 -
omniauth_auto_link_ldap_user
を偽にします。 -
ldap_enabled
をfalse
に変更します。また、LDAP プロバイダの設定をコメントアウトすることもできます。
-
トラブルシューティング
LDAPのトラブルシューティングについては、管理者ガイドを参照してください。