web-dev-qa-db-ja.com

rundeckがActiveDirectoryに対して認証できません

ActiveDirectoryに対して認証されるようにrundeckをセットアップしようとしています

このエラーが発生し続けます

enter image description here

Wikiには、403. Reason: !roleエラーに関する情報が含まれています https://github.com/rundeck/rundeck/wiki/FAQ#i-get-an-error-logging-in-http-error-403- -reason-role

Rundeck 2.6.2-1(.debからインストール)
Ubuntu 14.04

jaas-ldap.conf

ldap {
    com.dtolabs.rundeck.jetty.jaas.JettyCachingLdapLoginModule required
    debug="true"
    contextFactory="com.Sun.jndi.ldap.LdapCtxFactory"
    providerUrl="ldap://DC01.example.com:389"
    bindDn="cn=rundeck,OU=MyOU,DC=example,DC=com"
    bindPassword="correct-horse-battery-staple"
    authenticationMethod="simple"
    forceBindingLogin="true"
    userBaseDn="DC=example,DC=com"
    userRdnAttribute="sAMAccountName"
    userIdAttribute="sAMAccountName"
    userPasswordAttribute="unicodePwd"
    userObjectClass="user"
    roleBaseDn="DC=example,DC=com"
    roleNameAttribute="sAMAccountName"
    roleUsernameMemberAttribute="cn"
    roleMemberAttribute="member"
    roleObjectClass="group"
    cacheDurationMillis="300000"
    supplementalRoles="user"
    reportStatistics="true"
    timeoutRead="10000"
    timeoutConnect="20000"
    nestedGroups="true";
};

/var/lib/rundeck/exp/webapp/WEB-INF/web.xml

    ...
    <security-role>
            <role-name>Enterprise Admins</role-name>
    </security-role>
    ...

プロフィール

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

これは、次の理由でベストプラクティスに反することを認識しています。

  • 「単純な」認証とポート389を使用します。すべてのパスワードはプレーンテキストで送信されます!!!
  • baseDNは広すぎるため、LDAP検索を高速化するために絞り込む必要があります
  • ForceBindingLoginを使用する場合は、bindDNは必要ありません

追加リソース:

https://github.com/rundeck/rundeck/issues/59
https://github.com/rundeck/rundeck/issues/62
http://www.bitester.com/2015/12/ldap-authentication-with-rundeck.html

1
spuder

少なくとも私のユースケースでは、roleUsernameMemberAttributeを削除する必要があることがわかりました

supplementalRolesを定義することも重要です

最終的な作業例(最適化されていない)

ldap {
    com.dtolabs.rundeck.jetty.jaas.JettyCachingLdapLoginModule required
    debug="true"
    contextFactory="com.Sun.jndi.ldap.LdapCtxFactory"
    providerUrl="ldap://DC01.example.com:389"
    bindDn="cn=rundeck,OU=MyOU,DC=example,DC=com"
    bindPassword="correct-horse-battery-staple"
    authenticationMethod="simple"
    forceBindingLogin="true"
    userBaseDn="DC=example,DC=com"
    userRdnAttribute="sAMAccountName"
    userIdAttribute="sAMAccountName"
    userPasswordAttribute="unicodePwd"
    userObjectClass="user"
    roleBaseDn="DC=example,DC=com"
    roleNameAttribute="sAMAccountName"
    roleMemberAttribute="member"
    roleObjectClass="group"
    cacheDurationMillis="300000"
    supplementalRoles="user"
    reportStatistics="true"
    timeoutRead="10000"
    timeoutConnect="20000"
    nestedGroups="true";
};

注:これはLDAP認証のみを行います。ローカルアカウントとLDAPアカウントのハイブリッドを作成することもできます。

更新

このgithubの問題 の追加のドキュメントと情報

1
spuder