【maven】nexusのLDAP認証
ω・`)
最近、読んだ本のまとめばっかりだった希ガス。
まだ途中のものばかりで公開していないけどw
LDAP認証の設定方法について。
以前はnexusのアカウント管理を、
nexus側でしていたんだけど、利用者も増え、いちいちアカウントを作成するのが
めんどうになってきたのでLDAPで管理するようにしました。
ただ、LDAPのユーザ全員が操作できるわけでなく、利用者をディベロッパーに制限した。
LDAP認証の設定自体はすんなりいくと特段難しい事はないんだけど
エラーメッセージが不親切なのでつまずくとうっとおしかったなぁ・・・(´*ω*`)。
LDAPの設定
ここでLDAPの設定をする。
これをしないと話にならぬ。
管理ユーザでログインして、Security項目のLDAP Configurationをクリックすると
LDAPの設定ページが表示される
設定内容は、
1. LDAPサーバへのコネクションの設定
2. ユーザのマッピングの設定
3. グループのマッピングの設定(この設定は、必須ではない)
って大きくこんな感じ。
1. LDAPサーバへのコネクションの設定
hostnameにはIP直接入れた。ホスト名でもよい
portはldapのデフォポート:389
別のポートで設定されている場合は、それを指定すればよい
「Search Base」は、ユーザやグループのマッピングの設定をするときの
ルートディレクトリを設定している。
【Check Authentication】ボタンで設定が間違えていないかチェックできちゃう
2. ユーザのマッピングの設定
LDAPのユーザ情報を取得しまふ。
Base DNにou={organization unit}と書いているけれど{}の部分は任意のouの値を入れる
ここでBase DNは、さっき指定したSearch Baseより下層部のディレクトリである必要がある
ObjectClassやUser Id属性、RealName属性は、ldap情報から利用したい属性を使う。
ObjectClassは属性の集合体を表す。利用したいldapの集合体を指定してやれば、
その集合体に属するldapのユーザ情報とマッピングが可能になる。
userIdはuidだろうがcnだろうが何を指定しても実はかまわない。
ただし、これがnexusにログインする際のidになるので適切なものを指定する必要がある。
※uidが妥当かなー。
RealName属性は、そのままで「実名」。
nexusでユーザ情報一覧を表示したときに、表示される単なる個人名。
これも個人が特定できるものであれば、適切なものを指定すればいい。
どの値を指定するかは、自分の利用しているldapの情報をldapsearchコマンドなどで確認すると良い。
こんな感じでコマンドたたくとuid=pnskのldap情報が取得できマフ。
※ldapのクライアントをインストールしている場合
$ ldapsearch -x -h xxx.xxx.xxx.xxx "uid=pnsk"
xxx.xxx.xxx.xxxはLDAPサーバのIPを指定してくらさい
3. グループのマッピングの設定
これは、任意のグループにのみ、nexusの権限とマッピングしたいので設定した。
groupId属性は、任意のグループのIdを示すもの(例:gidとか)。
groupMember属性は、任意のグループのユーザを示す。
Group Member Formatは、今回はcnがdeveloperだけに権限を付与したいため固定値とした。
権限(role)のマッピング
roleの作成
ldapのグループと、nexusの権限のマッピングを作成する
上述したグループのマッピング設定のdeveloperとマッピング。
Security項目のRolesを選択する
[Add]>[External Role Mapping]をクリックする
マッピングを作成するポップアップが出るので
RealmにLDAPを指定し、RoleでマッピングしたいLDAPのグループを選択する。
今回は、developerになる(※上記で設定したやつ)
以下で新規作成。
今回はLDAPアカウントのdevelopersに属するユーザにnexusの下記の2つの権限を与えた。
- 「Deployment and Artifact Upload Role」
- 「Repo: All Repositories (except delete operation)」
どっちもカスタマイズした権限だよ(。´・ε・`。)
これで設定完了。
LDAPに登録しているユーザであれば、
nexusにログインできて、artifactのアップロードとかができるようになったよ(・ε・)