前回の続きっぽいのです。今回は他サービスやOSSからの連携の前の基礎知識について書きます。

LDAP連携


OSSなどではLDAPを用いた認証が可能であったりします。おおよそ以下の機能があったりします。

  • ユーザ作成
  • LDAP認証
  • アクセスコントロール

ざっと上から順番に説明すると、ユーザ作成は対象のOSSにユーザが存在しなかった場合はLDAPの情報を基にユーザを作成してくれます。LDAP認証はOSSへのログイン時にLDAPに問い合わせに行きます。アクセスコントロールは、実際にそういうOSSを使ったことがないので本当にできるかどうかしらないのですが、LDAPのOUなどによって特定のディレクトリへのアクセスをコントロールできたりするやつです。

では、順番に解説する前に説明しておかなければいけないことがあります。ので、今回はそれについて書きます。

bind dn


まずバインドDNについて。ユーザがLDAP認証を行うときに認証情報をLDAPサーバに問い合わせに行くことになるのですが、その時に使用するユーザです。

認証情報を問い合わせるときに問い合わせそのものにも権限が必要になるので、そのためのユーザが必要になります。その際に利用するユーザをバインドDNで指定します。

例えば、下記はGitLabのLDAPの設定ですがbind_dnがそれに該当します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
main:
label: 'LDAP'
host: 'example.com'
port: 389
uid: 'sAMAccountName'
method: 'plain'
bind_dn: 'CN=user01,OU=example,DC=example,DC=com'
password: 'user01のパスワード'
active_directory: true
allow_username_or_email_login: true
block_auto_created_users: false
base: 'DC=example,DC=com'
user_filter: ''
attributes:
username: ['uid', 'userid', 'sAMAccountName']
email: ['mail', 'email', 'userPrincipalName']
name: 'displayName'
first_name: 'givenName'
last_name: 'sn'
EOS

この場合は認証情報の問い合わせに

1
CN=user01,OU=example,DC=example,DC=com

というユーザを使用することになります。また、当然そのユーザのパスワードも設定する必要があります。ちなみにGitLabは設定ファイルですが、だいたいのOSSにはGUIが存在します。

base dn


次にベースDNとはLDAP認証を利用した際にユーザを検索するルートとなるエントリです。ここにはLDAP認証利用対象者のユーザが存在するエントリを指定することになります。前述のGitLabではbaseがそれに該当します。

例えば下図でou=section01ou=section02に存在するユーザをLDAP認証の対象としたい場合はou=department01を指定すればよいので…

1
ou=department01,dc=example,dc=com

となります。

graph TD; dc=com---dc=example; dc=example---ou=department01; dc=example---ou=department02; dc=example---ou=department03; ou=department01---ou=section01; ou=department01---ou=section02; ou=section01---cn=user01; ou=section01---cn=windowsPC01;

全ユーザを指定する場合はdc=example,dc=comでよいです。

anonymous bind


LDAPサービスを利用するには通常はバインドDNでの認証情報問い合わせが必要になりますが、anonymous bind(匿名バインド)を用いると、認証無しでLDAPサービスを利用できます。が、セキュリティ的にアレなので通常は行いません。匿名バインドはLDAPサービス側で許可・不許可を設定します。

つづき


もう少し長く書くつもりだったのですが、力尽きたので次回書きます。