7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CI/CD関連ツールの認可をLDAPと連携して実現してみる(連携できないツールあり・・・)

Last updated at Posted at 2017-12-22

CI/CD関連ツールのユーザー情報をLDAPで一元管理してみる」でCI/CD関連ツールの認証をLDAPと連携して行う方法をメモったので、今回はLDAPで管理しているグループと連携して認可を行う方法もメモっておく。

各ツールの対応状況

image.png

NOTE:

GitLab Enterprise EditionはLDAP連携できる(模様)。

LDAPサーバの状態

LDAPサーバ(OpenLDAP)の状態は以下の通り。

ユーザ名 パスワード 氏名 所属するグループ
kazuki password Kazuki Shimizu project-managers, project-developers
user password Taro Yamada project-developers

image.png

openldap/schema.ldif
version: 1

dn: ou=groups,dc=example,dc=com
objectclass: top
objectclass: organizationalUnit
ou: groups

dn: cn=project-managers,ou=groups,dc=example,dc=com
cn: project-managers
objectclass: groupOfUniqueNames
objectclass: top
uniquemember: uid=kazuki,ou=people,dc=example,dc=com

dn: cn=project-developers,ou=groups,dc=example,dc=com
cn: project-developers
objectclass: groupOfUniqueNames
objectclass: top
uniquemember: uid=user,ou=people,dc=example,dc=com
uniquemember: uid=kazuki,ou=people,dc=example,dc=com

dn: ou=people,dc=example,dc=com
objectclass: top
objectclass: organizationalUnit
ou: people

dn: uid=kazuki,ou=people,dc=example,dc=com
cn: Kazuki Shimizu
mail: kazuki@example.com
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
sn: Shimizu
givenName: Kazuki
uid: kazuki
userpassword: {CRYPT}7pnoyta7lRz7M


dn: uid=user,ou=people,dc=example,dc=com
cn: Taro Yamada
mail: user@example.com
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
sn: Yamada
givenName: Taro
uid: user
userpassword: {CRYPT}SjPCVdR9pFLD6

Jenkins

Jenkinsのシステム管理権限を持つユーザでログインし、LDAPで管理しているグループ(project-managersとproject-developers)に対して権限定義を追加する。

image.png

LDAPからユーザが所属するグループ情報を取得するための設定例は以下の通り。

image.png

設定を保存した後に、kazukiでログインすると・・・レフトメニューバーに「Manage Jenkins」(システム管理権限を持つユーザでログインした際に表示されるメニュー)が表示される。

image.png

userでログインすると・・・レフトメニューバーに「Manage Jenkins」は表示されない。

image.png

SonarQube

SonarQubeのシステム管理権限を持つユーザでログインし、LDAPで管理しているグループ(project-managersとproject-developers)に対して権限定義を追加する。

image.png

image.png

LDAPからユーザが所属するグループ情報を取得するための設定例は以下の通り。

sonarqube/sonar.properties
# Group Configuration
ldap.group.baseDn=ou=groups,dc=example,dc=com
ldap.group.request=(&(objectClass=groupOfUniqueNames)(uniquemember={dn}))

設定を保存した後に、kazukiでログインすると・・・トップメニューバーに「Administration」(システム管理権限を持つユーザでログインした際に表示されるメニュー)が表示される。

image.png

userでログインすると・・・トップメニューバーに「Administration」は表示されない。

image.png

Nexus

NEXUSのシステム管理権限を持つユーザでログインし、LDAPで管理しているグループ(project-managersとproject-developers)に対して権限定義を追加する。

image.png

project-managersの権限設定例:

image.png

project-developersの権限設定例:

image.png

LDAPからユーザが所属するグループ情報を取得するための設定例は以下の通り。

image.png

設定を保存した後に、kazukiでログインすると・・・トップメニューバーに「設定アイコン」(システム管理権限を持つユーザでログインした際に表示されるメニューアイコン)が表示される。

image.png

userでログインすると・・・トップメニューバーに「設定アイコン」は表示されない。

image.png

GitLab

グループの作成

グループを作る。ここでいうグループは、GitHubでいうところの組織(Organization)に相当する。

image.png

ユーザ情報の同期

グループにユーザを追加するためには、GitLab側にLDAPで管理しているユーザのユーザ情報を同期する必要がある。
同期する方法は、私が知る限りでは以下の2つの方法がサポートされている。

NOTE:

Enterprise Editionでは、定期的にLDAPサーバと同期してユーザ情報を取り込む機能がある(らしい)。

ログインして同期

LDAPユーザとしてログインする。

image.png

ログイン後にprofileを開く。

image.png

システム管理者権限があるユーザでログインしてユーザ一覧を確認すると、ユーザ情報が取り込まれたことが確認できる。

image.png

同じユーザ情報の登録

システム管理者権限を持つユーザでログインしてユーザ情報を登録する。

image.png

グループにメンバー追加

同期したユーザをグループメンバーとして追加する。

image.png

以下は、kazukiをMaster、userをDeveloperロールでメンバー追加した場合の画面例。

image.png

NOTE:

メンバー追加時に指定できるロールは以下の5つ。

  • Guest
  • Reporter
  • Developer
  • Master
  • Owner

グループ追加後にログインしてみる

kazukiでログインして所属グループを確認する。

image.png

Masterロールにはグループにプロジェクトを作成する権限がある!

image.png

userでログインして所属グループを確認する。

image.png

Developerロールにはグループにプロジェクトを作成する権限がない!

image.png

どちらの方法でもグループに参加することができるが、ログインしてユーザ情報を同期する方が手間が(ちょっとだけ)少ない気がする。(CE版でもLDAPからユーザ情報を同期する方法がサポートされることを願う・・・)

Redmine

グループの作成

システム管理権限を持つユーザでログインしてグループを作成する。

image.png

ユーザ情報の同期

Loginにユーザ名を入力すると・・・LDAPで管理しているユーザに一致するユーザが候補プルダンに表示されるので、同期したいユーザを選択する。

image.png

image.png

グループにメンバー追加

image.png

image.png

プロジェクトにグループを割り当てる

プロジェクトにグループを割り当てることで、プロジェクトを利用できるユーザを追加する。

image.png

image.png

NOTE:

上記はグループを作る前提になっているが、実は・・・グループの作成は必須ではなく、ユーザを直接プロジェクトメンバーとして追加することもできる。
グループ単位で複数のプロジェクトメンバーになることが多い場合は、グループにユーザを割り当てて、グループをプロジェクトメンバーとして追加する方がメンテナンスコストが低くなるのかな!?

プロジェクトメンバー追加後にログインしてみる

kazukiでログインして所属プロジェクトを確認する。

image.png

Managerロールにはプロジェクトの設定がいろいろできる!

image.png

userでログインして所属プロジェクトを確認する。

image.png

Developerロールにはプロジェクトの設定が少ししかできない!

image.png

Mattermost

チームの作成

Mattermostにはグループという考え方はなく、グループの代わりにチームという概念がある。チームにメンバーを追加することで、チームメンバー内でコミュニケーションを取ることができる。
ここではシステム管理権限を持つユーザでチームを作るが、システム管理者以外のユーザでもチームを作ることはできる。

image.png

image.png

image.png

ユーザ登録&チームメンバー追加

すでにログイン済みのユーザ(Mattermostにユーザ情報が存在するユーザ)は、チーム管理者が自由にメンバー追加を行うことができますが、ユーザ情報がないユーザについては、チームメンバーへの招待が必要になる。

image.png

GitLab経由でログインする。

image.png

image.png

image.png

image.png

ロールの設定

チーム管理者でログインしてメンバー一覧を確認する。

image.png

招待して追加したチームメンバーのロールは「Memeber」となる。これはチーム管理者が変更できる。

image.png

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?