1

Knox を使用して外部 IdP に対して認証し、ユーザーが正常に認証されたら LDAP インスタンスからグループ ルックアップを実行して、Zeppelin に Role Base Access Controls を実装しようとしています。

現在 Zeppelin にログインでき、HadoopGroupProvider は期待どおりにユーザーのグループを検索していますが、認証されたユーザーはどのロールにもマップされていないため、ノートブックを作成したり、インタープリターを使用したりできません。

Knox の構成を以下に示します。

<?xml version="1.0" encoding="utf-8"?>
<topology>
    <gateway>
      <provider>
        <role>federation</role>
        <name>pac4j</name>
        <enabled>true</enabled>
        <param>
          <name>pac4j.callbackUrl</name>
          <value>https://knox.example.com/gateway/knoxsso/api/v1/websso</value>
        </param>
        <param>
          <name>clientName</name>
          <value>SAML2Client</value>
        </param>
        <param>
          <name>saml.keystorePath</name>
          <value>/opt/knox-1.3.0/data/security/keystores/gateway.jks</value>
        </param>
        <param>
          <name>saml.keystorePassword</name>
          <value>password</value>
        </param>
        <param>
          <name>saml.privateKeyPassword</name>
          <value>password</value>
        </param>
        <param>
          <name>saml.identityProviderMetadataPath</name>
          <value>/etc/sso/idp.xml</value>
        </param>
        <param>
          <name>saml.maximumAuthenticationLifetime</name>
          <value>100000</value>
        </param>
        <param>
          <name>saml.serviceProviderEntityId</name>
          <value>https://knox.example.com/gateway/knoxsso/api/v1/websso?pac4jCallback=true&amp;client_name=SAML2Client</value>
        </param>
        <param>
          <name>saml.serviceProviderMetadataPath</name>
          <value>/etc/sso/sp.xml</value>
        </param>
        <param>
          <name>pac4j.id_attribute</name>
          <value>username</value>
        </param>
      </provider>
      <provider>
        <role>identity-assertion</role>
        <name>HadoopGroupProvider</name>
        <enabled>true</enabled>
        <param>
            <name>hadoop.security.group.mapping</name>
            <value>org.apache.hadoop.security.LdapGroupsMapping</value>
        </param>
        <param>
            <name>hadoop.security.group.mapping.ldap.bind.user</name>
            <value>cn=loginuser,ou=example,ou=example,dc=example,dc=example,dc=example,dc=com</value>
        </param>
        <param>
            <name>hadoop.security.group.mapping.ldap.bind.password</name>
            <value>password</value>
        </param>
        <param>
            <name>hadoop.security.group.mapping.ldap.url</name>
            <value>ldap://example.ldap.com:389</value>
        </param>
        <param>
            <name>hadoop.security.group.mapping.ldap.base</name>
            <value>ou=example,dc=example,dc=example,dc=example,dc=com</value>
        </param>
        <param>
            <name>hadoop.security.group.mapping.ldap.search.filter.user</name>
            <value>(&amp;(objectClass=user)(|(sAMAccountName={0})(mailNickname={0})))</value>
        </param>
        <param>
            <name>hadoop.security.group.mapping.ldap.search.filter.group</name>
            <value>(&amp;(cn=group*)(objectclass=Group))</value>
        </param>
        <param>
            <name>hadoop.security.group.mapping.ldap.search.attr.member</name>
            <value>member</value>
        </param>
        <param>
            <name>hadoop.security.group.mapping.ldap.search.attr.group.name</name>
            <value>cn</value>
        </param>
      </provider>
    </gateway>
    <service>
        <role>KNOXSSO</role>
        <param>
           <name>knoxsso.cookie.secure.only</name>
           <value>true</value>
        </param>
        <param>
          <name>knoxsso.token.ttl</name>
          <value>100000</value>
        </param>
        <param>
          <name>knoxsso.redirect.whitelist.regex</name>
          <value>.*</value>
        </param>
        <param>
            <name>knoxsso.token.ttl</name>
            <value>-1</value>
        </param>
    </service>
</topology>

これは、Zeppelin の shiro.ini 構成です。

[main]
knoxJwtRealm = org.apache.zeppelin.realm.jwt.KnoxJwtRealm
knoxJwtRealm.providerUrl = https://knox.example.com/
knoxJwtRealm.login = gateway/knoxsso/api/v1/websso
knoxJwtRealm.publicKeyPath = /etc/pki/tls/certs/knox.example.com.pem
knoxJwtRealm.logoutAPI = false
knoxJwtRealm.logout = gateway/knoxsso/api/v1/webssout
knoxJwtRealm.cookieName = hadoop-jwt
knoxJwtRealm.redirectParam = originalUrl
knoxJwtRealm.groupPrincipalMapping = group.principal.mapping
knoxJwtRealm.principalMapping = principal.mapping
authc = org.apache.zeppelin.realm.jwt.KnoxAuthenticationFilter

securityManager.realms = $knoxJwtRealm

sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager

cookie = org.apache.shiro.web.servlet.SimpleCookie
cookie.name = JSESSIONID
cookie.httpOnly = true
sessionManager.sessionIdCookie = $cookie

securityManager.sessionManager = $sessionManager
securityManager.sessionManager.globalSessionTimeout = 86400000
shiro.loginUrl = /api/login

[roles]
admin_role = *
user_role = *

[urls]
/api/version = anon
/** = authc

gateway-audit.log により、HadoopGroupProvider が LDAP インスタンスに接続し、グループを正常に検索していると確信しています。

19/10/07 15:33:00 ||6348f279-0ed2-445b-8a73-b76a8fcb985a|audit|1.2.3.4|KNOXSSO|USER1|||identity-mapping|principal|USER1|success|Groups: [Group1, Group2, Group3]

私の質問は次のとおりです。

これらのグループを Zeppelin のロールにマップするにはどうすればよいですか?

KnoxJwtRealm の org.apache.zeppelin.realm.LdapRealm の rolesByGroup 構成に相当するものはありますか?

どんな助けでも大歓迎です、事前に感謝します!

4

2 に答える 2

1

Hadoop バイナリをインストールし、 Hadoop グループ マッピングを構成する必要があります。zeppelin-env.sh に環境変数を指定して、Zeppelin をこの構成に依存させます。

USE_HADOOP=True
HADOOP_CONF_DIR=<PATH_TO_HADOOP_CONFIGURATION_FILES>

$HADOOP_HOME/binOS$PATH環境変数に追加する必要があります。したがって、Zeppelin はhadoopコマンドを実行して、ユーザーとグループをマッピングできます。

次のように、url セクションの下に URL ベースのルールを記述して、特定のグループ アクセス許可を設定します。

[urls]

/api/configurations/** = authc, roles[<YOUR_LDAP_GROUP>]

より詳しい情報:

Hadoop 統合

ツェッペリン・ノックスSSO

于 2022-02-21T18:45:07.833 に答える
0

Knox トポロジ内の HadoopGroupProvider のグループ ルックアップは正しいように見え、そのトポロジによってプロキシされるサービスへのアクセスを保護するためのサービス レベル認証にこれらのグループを使用できます。

ただし、これらのグループはゲートウェイからバックエンド サービスに伝達されません。Zeppelin は、独自のグループ ルックアップとロール マッピングを行うように構成する必要があります。残念ながら、そのための Zeppelin の設定には詳しくありません。

ただし、以下が役立つ場合があります

于 2019-10-16T00:56:51.463 に答える