OpenLDAP と仲間たち Advent Calendar 2015 20日目。
GitHub Enterpriseを導入する会社が増えていますね。
しかしアプリケーション毎にユーザーアカウントを個別に管理するのは大変なことです。
GitHub EnterpriseはLDAPのアカウントと連携する機能がありますので、既存の認証システムと簡単に連携できます。
今回はOpenLDAPとGithub Enterpriseの認証連携手順を紹介します。
ユーザーエントリ
ユーザーエントリのObjectClassは何を使ったらよいでしょうか。 Github EnterpriseではUserID、表示名、メールアドレスなどの情報を利用しますが、任意の属性とマッピング出来るので基本的に何でもOKです。
しかし、ssh鍵を利用するためのldapPublicKey objectClassがuidを必要とするので、inetOrgPersonやposixAccountが無難でしょう。
SSH鍵の登録する方法についてはこちらに書きましたので、まずこれを読んでスキーマの設定をしてください。
ここでは、以下のようなエントリを投入します。
dn: uid=user1,ou=Users,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: ldapPublicKey
uid: user1
cn: user1
sn: user1
mail: user1@example.com
userPassword: secret
sshPublicKey: ssh-rsa AAAAB3NzaC1yc2E...
Github EnterpriseのLDAP設定
続いてGithub Enterpriseの設定です。
GHEのセットアップ画面にはAuthenticationというページがあり、以下の設定項目があります。
LDAPに接続するための情報を入力します。
ひとつだけ分かり難いのは、Administrators groupの項目で、ここにadminと入力すると、(cn=admin)
というフィルターで検索を行い、cn=admin,ou=Groups,dc=example,dc=com
というようなグループエントリを参照します。
このグループのオブジェクトクラスはposixGroupやgroupOfNamesに対応しています。
この様な動作になるので、直下のDomain baseにou=Users,dc=example,dc=com
を指定すると管理者権限の連携を行うことができません。
Domain baseにはグループエントリを含むdc=example,dc=com
を指定してください。
属性マッピングの設定
続いて属性マッピングの設定です。 ここでは素直にLDAP属性のuid,cn,mail,sshPublicKeyとマッピングしています。
公開鍵の格納フォーマットはOpenSSHの形式と同じですので、サーバーにログインするためのSSH鍵とGitレポジトリにアクセスするためのSSH鍵を共用出来ます。
LDAP Syncronization
設定を適用し、GHEにログインするとLDAPに格納されているアカウント情報が反映されます。 既定では、LDAPのアカウント情報がGHEに反映されるのは初回ログインのタイミングのみであることに注意してください。 Syncronizationの設定を行うことで定期的にLDAPのアカウント情報とGHEの内部アカウントデータを同期することが出来ます。