Apache Nifi 身份验证(Authentication)及授权验证(Authorization)设置最详攻略(二)

在上一篇文章,我们谈到了如何设置Nifi的身份验证模块。在文章结尾,我们成功通过了身份验证,但是却遇到了授权验证的错误,以至于还是没能够访问Nifi的主界面。在这篇文章,我们就来看看如何解决这个问题。

授权验证(Authorization)概述

我们来回顾一下上一篇文章刚开始所打的比喻。你访问Nifi界面相当于你想进入一个商业写字楼,门口保安可能会拦住你要查看你的身份证(身份验证)。现在保安从身份证上知道了我们的名字(身份验证成功),但是他依然需要确定你是在这个写字楼工作才能让你进去。为此他查找大楼员工花名册(授权验证)。只有当你的名字出现在名册上时你才会被放行。

那么我们首先来了解一下Nifi的授权验证模块是如何工作的。让我们回顾一下上一篇的这个图:

Apache Nifi 身份验证(Authentication)及授权验证(Authorization)设置最详攻略(二)_第1张图片
Nifi 身份验证与授权验证系统

我们可以看到,Nifi授权验证模块与两个数据库有关:一个是授权用户身份数据库(UserGroupProvider),另一个是用户权限数据库(AccessPolicyProvider)。

其中,UserGroupProvider里面列出了所有被授权用户的用户名。只有在这个数据库里面的用户名才真正有权限使用Nifi。而AccessPolicyProvider里面列出了这些被授权用户以及他们所获得的权限之间的一一对应关系。

因此,Nifi的授权验证模块需要做的,就是先拿从身份验证模块得来的用户名与UserGroupProvider里的用户名做核对,看是否能找到对应的条目。如果有,再到AccessPolicyProvider里查看该用户有哪些权限。

看到这里,你应该大概明白Nifi是怎么确定一个用户的权限的了吧。接下来,我们就看看,在Nifi当中是怎么对UserGroupProviderAccessPolicyProvider进行设置的。

授权验证设置

默认设置中,Nifi 会在./conf/authorizers.xml这个文件中寻找UserGroupProviderAccessPolicyProvider的设置。

UserGroupProvider 设置

目前Nifi自带2种UserGroupProvider:

  • FileUserGroupProvider
  • LdapUserGroupProvider

FileUserGroupProvider的使用最为简单,其本质是把所有授权用户名都存在一个文件里面。在./conf/authorizers.xml文件中与FileUserGroupProvider相关的有以下条目:


        file-user-group-provider
        org.apache.nifi.authorization.FileUserGroupProvider
        ./conf/users.xml
        
        cn=John Smith,ou=people,dc=example,dc=com
    

我们可以看到,这个文件储存用户名的文件默认是./conf/users.xml。它可以有类似以下内容:



    
    
        
        
    

我们看到,这就是一个记载着所有用户名字的XML文件。

另外一个是LdapUserGroupProvider。所不同的是,这一个UserGroupProvider不是简单用文件记录所有用户名,而是利用一个外在的LDAP服务器来提供这些用户名(注意,这个LDAP服务器不一定得跟用户验证的LDAP服务器是同一个,完全可以是另外一个服务器)。相关的设置有以下的条目:


        ldap-user-group-provider
        org.apache.nifi.ldap.tenants.LdapUserGroupProvider
        

        
        

        
        
        
        
        
        
        
        
        

        FOLLOW
        10 secs
        10 secs

        
        
        30 mins

        
        person
        ONE_LEVEL
        
        
        
        

        
        group
        ONE_LEVEL
        
        
        
        
    

总体而言,大部分设置跟之前设置LDAP身份验证类似。这里不再详述。

值得一提的是User Identity Attribute,如果不设置这个属性,那么默认会用LDAP数据库中用户的完整DN来跟从身份验证模块过来的用户名进行比较。如果设置了如uid,那么则会用DN中的uid项的值来跟来自身份验证的用户名进行比较。

还有值得注意的是,使用LdapUserGroupProvider的时候,管理员用户无法在Nifi的UI界面里面添加用户,而使用FileUserGroupProvider的时候,管理员是可以添加用户的。

AccessPolicyProvider 设置

目前,Nifi只有一种自带AccessPolicyProvider,那就是FileAccessPolicyProvider。在authorizers.xml中相关的设置有以下的条目:


    file-access-policy-provider
    org.apache.nifi.authorization.FileAccessPolicyProvider
    file-user-group-provider
    ./conf/authorizations.xml
    
    
    


我们可以看到,在属性User Group Provider中我们指定了使用哪一个UserGroupProvider。而Authorizations File指定了权限数据都存在哪个文件,默认是./conf/authorizations.xml。这个文件中有类似以下的内容:



    
        
            
        
        
            
        
        
            
        
    


我们看到, 在这个文件中列出了每一条的权限(Policy),而每条权限都对应一个用户,这样形成了一一对应的关系,而Nifi也能够因此确定每个用户拥有什么权限。

Authorizer设置

最后,我们还得提一下authorizers.xml里的最后一部分设置,那就是authorizer。相关的条目如下:

    
        managed-authorizer
        org.apache.nifi.authorization.StandardManagedAuthorizer
        file-access-policy-provider
    

Nifi自带只有managed-authorizer一种,注意我们要在这里指定AccessPolicyProvider。然后,在nifi.properties中,我们要在以下属性指定我们需要用的authorizer:

nifi.security.user.authorizer=managed-authorizer

这样,我们就告诉了Nifi我们使用的是managed-authorizer,然后managed-authorizer又指定了使用的AccessPolicyProvider,而AccessPolicyProvider又指定了所使用的UserGroupProvider。整个权限验证模块的设置就是这样子被串了起来。

用户管理

那么看到这里,你可能要问,难道我们是要手动添加条目到./conf/users.xml./conf/authorizations.xml吗?并不需要,我们可以通过在Nifi的UI界面操作来添加。不过,首先你得有一个管理员账号来登录进Nifi界面才行。无论你采用哪种身份验证方法,对于一个新的加密Nifi,你必须在authorizers.xmlAccessPolicyProvider中找到这一项:


把你的用户名添加进去。我们以上一篇LDAP身份验证示例中的身份为例子(注意空格和大小写也必须吻合):

uid=user,ou=people,dc=example,dc=com

保存,重启Nifi。当你再次访问UI时就发现,关于权限的错误已经消除,主界面也可以进去了。实际上,当你添加了Initial Admin Identity并重启后,Nifi在后台把这名用户添加到了users.xml中,并且在authorizations.xml中添加了一些基础的权限。

当你使用初始管理员账号进入Nifi以后,你会发现大部分的地方都是灰色的,你基本没法做任何操作(下图):

Apache Nifi 身份验证(Authentication)及授权验证(Authorization)设置最详攻略(二)_第2张图片
大部分Nifi功能并没被激活

这时候你可以通过点击右上侧的菜单栏并选择Policies来为你自己的账户添加全局权限(下图):

Apache Nifi 身份验证(Authentication)及授权验证(Authorization)设置最详攻略(二)_第3张图片
进入全局权限设置页面

又或者点击Process Group的权限按钮来设定应用于该组别的权限(下图):

Apache Nifi 身份验证(Authentication)及授权验证(Authorization)设置最详攻略(二)_第4张图片
进入Process Group权限页面

添加查看和修改Processors的权限:

添加权限

这样你会发现图标终于被激活,我们终于获得了加密Nifi的控制权了!

Apache Nifi 身份验证(Authentication)及授权验证(Authorization)设置最详攻略(二)_第5张图片
Nifi功能激活

你可能感兴趣的:(Apache Nifi 身份验证(Authentication)及授权验证(Authorization)设置最详攻略(二))