RundeckをActiveDirectoryと連携させるには、管理画面からではだめで設定ファイルを直接いじってやる必要がある。 また、基本的にはログイン権限のロールとしてADグループを指定するので、事前にAD側でグループを作成・ユーザを参加させておく必要がある(今回の例では、とりあえずドメインはadtest.localと仮定し、ログイン可能なグループを「rundeck_group」としてAD側で作成済とする)。

注意したい点としては、ActiveDirectory連携をただ設定すると既存のローカルユーザが使用できなくなる点だ。 これについては、MultiAuthの設定をしてやることで解決するだろう…と言いたいところだが、「rundeck-2.6.9-1.21.GA.noarch」で検証したところMultiAuthの設定をしてもローカルユーザの認証が通らなかった(どうも設定ではなく、モジュール読み込んでないような気がする…)。

なので、今回はActiveDirectory連携のみを設定する。 実際に設定する際はadmin権限を持つADグループを定義してやるといいだろう。

まず、ActiveDirectoryとの接続用に以下のファイルを作成する。 作成後はrundeckユーザにchownするのを忘れずに。

/etc/rundeck/jaas-activedirectory.conf
activedirectory { com.dtolabs.rundeck.jetty.jaas.JettyCachingLdapLoginModule required debug="true" contextFactory="com.sun.jndi.ldap.LdapCtxFactory" providerUrl="ldap://ADサーバホスト名orIPアドレス:389" bindDn="CN=ユーザ名,DC=adtest,DC=local" bindPassword="パスワード" authenticationMethod="simple" forceBindingLogin="true" userBaseDn="dc=adtest,dc=local" userRdnAttribute="sAMAccountName" userIdAttribute="sAMAccountName" userPasswordAttribute="unicodePwd" userObjectClass="user" roleBaseDn="dc=adtest,dc=local" roleNameAttribute="cn" roleMemberAttribute="member" roleObjectClass="group" cacheDurationMillis="300000" reportStatistics="true" supplementalRoles="user"; };

次に、Rundeckの起動オプションについて変更し先ほど作成したファイルを読み込むため、「/etc/rundeck/profile」を編集する。

/etc/rundeck/profile
... export RDECK_JVM="-Djava.security.auth.login.config=/etc/rundeck/jaas-activedirectory.conf \ -Dloginmodule.name=activedirectory" \ ...

ADユーザのグループに応じて権限を与えるため、新規でaclpolicyファイルを作成する。 ※なお、以下の内容だと全プロジェクトへの権限を与えている状態なので、適宜書き換えること。

cat <<EOF >> /etc/rundeck/rundeckusers.aclpolicy
description: Admin project level access control. Applies to resources within a specific project.
context:
  project: '.*' # all projects
for:
  resource:
    - equals:
        kind: job
      allow: [create] # allow create jobs
    - equals:
        kind: node
      allow: [read,create,update,refresh] # allow refresh node sources
    - equals:
        kind: event
      allow: [read,create] # allow read/create events
  adhoc:
    - allow: [read,run,runAs,kill,killAs] # allow running/killing adhoc jobs
  job: 
    - allow: [create,read,update,delete,run,runAs,kill,killAs] # allow create/read/write/delete/run/kill of all jobs
  node:
    - allow: [read,run] # allow read/run for nodes
by:
  group: [rundeckusers]

---

description: Admin Application level access control, applies to creating/deleting projects, admin of user profiles, viewing projects and reading system information.
context:
  application: 'rundeck'
for:
  resource:
    - equals:
        kind: project
      allow: [create] # allow create of projects
    - equals:
        kind: system
      allow: [read] # allow read of system info
    - equals:
        kind: user
      allow: [admin] # allow modify user profiles
  project:
    - match:
        name: '.*'
      allow: [read,import,export,configure,delete] # allow full access of all projects or use 'admin'
  storage:
    - allow: [read,create,update,delete] # allow access for /ssh-key/* storage content

by:
  group: [rundeckusers]
EOF
chown rundeck. /etc/rundeck/rundeckusers.aclpolicy

今のままだとWebコンソールからログインできない(Webコンソールへのログインについては管理ファイルが違う)ので、「/var/lib/rundeck/exp/webapp/WEB-INF/web.xml」ファイルに以下の設定を記述する。

<security-role>
                <role-name>user</role-name>
        </security-role>
        <security-role>
                <role-name>rundeck_group</role-name>
        </security-role>

最後に、Rundeckの再起動を行う。

systemctl restart rundeckd

これで、AD連携が行えるようになったはずだ。 なお、以下のようなログが出力される場合はBindDNのあたりでうまくいってない(BindDNで指定したユーザでの認証がうまくいってない)ので、「/etc/rundeck/jaas-activedirectory.conf」の設定を見直すといいだろう。 ※例えば、OUの指定が必要だったりとか

2016-12-01 11:03:04.345:WARN:cdrjj.JettyCachingLdapLoginModule:
javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903CF, comment: AcceptSecurityContext error, data 52e, v2580?]