是否可以通过基于文件的提供程序来引导用户组和策略?
目前,在设置NiFi实例时,我们使用org.apache.nifi.authorization.FileUserGroupProvider
引导Initial User Identity
和org.apache.nifi.authorization.FileAccessPolicyProvider
引导Initial Admin Identity
。
我在《管理指南》中检查了FileUserGroupProvider
和Authorizers.xml Setup的代码,但找不到引导用户组的任何信息。我想使用FileAccessPolicyProvider
引导AccessPolicies也是如此。我知道可以使用LDAP,但是我们现在不使用它。
我已经在StackOverflow上找到了一个类似的问题,但她的解决方案并不令人满意,因为如果不是绝对必要的话,我们不想在该任务中使用nifi-api。因此,我要做的是编写一个基于UserGroupProvider和AccessPolicyProvider的新文件来完成该任务。
那是唯一的可能性吗?
我将为此使用CompositeUserGroupProvider
还是CompositeConfigurableUserGroupProvider
,所以除了重新实现FileUserGroupProvider
的功能并添加我的自定义实现,我可以使用它来组合功能吗?
意思是这样的:
<userGroupProvider>
<identifier>composite-user-group-provider</identifier>
<class>org.apache.nifi.authorization.CompositeUserGroupProvider</class>
<property name="User Group Provider 1">org.apache.nifi.authorization.FileUserGroupProvider</property>
<property name="User Group Provider 2">MyFileUserGroupProvider</property>
</userGroupProvider>
authorizers.xml
文件中的配置如何?
如果我对如何使用CompositeProvider
的假设是正确的,是否有类似的自举策略?
答案 0 :(得分:2)
如果我理解正确,则希望将用户,组和策略自动设置为固定的预定义值。
我建议您使用FileUserGroupProvider
和FileAccessPolicyProvider
,因为它们都使您能够直接在NiFi本身中配置用户,组和策略。除非您需要自定义所提供的基于文件的提供程序所不能提供的功能之外,否则不必创建UserGroupProvider或AccessPolicyProvider的自定义实现。
您说过您不想使用nifi-api,我假设您的意思是HTTP REST API。 (我并不是想学究,实际上有一个名为nifi-api的库,该库是Java接口的集合,供nifi开发人员在编写扩展时使用。)REST APi是我通常推荐的一个不错的选择,因为有可以保证NiFI 1.x的向后兼容性,但这不是实现您想要做的唯一方法。
您可以在NiFi外部手动创建(或编写脚本)users.xml和authorizations.xml文件,只需配置FileUserGroupProvider和AccessUserGroupProvider即可使用这些文件(或将它们复制到以下位置的默认位置: conf目录)。在启动时,NiFi会将这些文件的内容读取到内存中以创建用户,组和访问策略。 “初始用户”和“初始管理员”属性仅用于在不存在或为空时自动填充这些文件,因此,如果您提供自己的这些文件副本,则将使用它们。
这些XML文件的结构很容易创建。您可以使用NiFi实例通过用户界面创建用户,组和策略,并查看写入这些文件的内容。然后,您可以根据自己的喜好创建它们:手动创建NiFi UI或从另一个源文件编写脚本。创建文件后,您可以通过将文件放置在NiFi conf目录中并(重新)启动文件来进行“引导”部分。除非在用户界面中修改了用户,组和策略,否则NiFi不会重新生成或修改这些文件。
这些方法的唯一缺点是不能保证这些文件具有稳定的架构。因此,可以随时间添加或更改新字段。也就是说,它们对于NiFi的最后几个版本都很稳定。