Apache NiFi團隊[email protected]
系統要求
Apache NiFi可以運行在像筆記本電腦這樣簡單的東西上,但它也可以集羣在許多企業級服務器上。因此,所需的硬件和內存量將取決於所涉及的數據流的大小和性質。在NiFi處理數據時,數據存儲在磁盤上。因此,NiFi需要爲其各種存儲庫分配足夠的磁盤空間,尤其是內容存儲庫,流文件存儲庫和源文件存儲庫(有關這些存儲庫的更多信息,請參閱“ 系統屬性”部分)。NiFi具有以下最低系統要求:
-
需要Java 8或更高版本
-
支持的操作系統:
-
Linux的
-
Unix的
-
視窗
-
Mac OS X.
-
-
支持的Web瀏覽器:
-
Microsoft Edge: Current & (Current - 1)
-
Mozilla FireFox: Current & (Current - 1)
-
Google Chrome: Current & (Current - 1)
-
Safari: Current & (Current - 1)
-
注意在持續且極高的吞吐量下,可能需要調整CodeCache設置以避免突然的性能損失。有關更多信息,請參閱Bootstrap Properties部分。
如何安裝和啓動NiFi
-
Linux / Unix / OS X.
-
解壓縮並解壓縮到所需的安裝目錄
-
在下面找到的文件中進行任何所需的編輯
<installdir>/conf
-
至少,我們建議您編輯nifi.properties文件並輸入密碼
nifi.sensitive.props.key
(請參閱下面的系統屬性)
-
-
從
<installdir>/bin
目錄中,鍵入以下命令執行以下命令./nifi.sh <command>
:-
start:在後臺啓動NiFi
-
stop:停止在後臺運行的NiFi
-
status:提供NiFi的當前狀態
-
run:在前臺運行NiFi並等待Ctrl-C啓動NiFi的關閉
-
install:安裝NiFi作爲服務,然後可以通過控制
-
service nifi start
-
service nifi stop
-
service nifi status
-
-
-
-
視窗
-
解壓縮到所需的安裝目錄
-
在下面的文件中進行任何所需的編輯
<installdir>/conf
-
至少,我們建議您編輯nifi.properties文件並輸入密碼
nifi.sensitive.props.key
(請參閱下面的系統屬性)
-
-
導航到該
<installdir>/bin
目錄 -
雙擊
run-nifi.bat
。這會在前臺運行NiFi並等待Ctrl-C啓動NiFi的關閉 -
要查看NiFi的當前狀態,請雙擊
status-nifi.bat
-
首次啓動NiFi時,會創建以下文件和目錄:
-
content_repository
-
database_repository
-
flowfile_repository
-
provenance_repository
-
work
目錄 -
logs
目錄 -
在
conf
目錄中,將創建flow.xml.gz文件
有關配置NiFi存儲庫和配置文件的詳細信息,請參閱本指南的“ 系統屬性”部分。
端口配置
NiFi
下表列出了NiFi使用的默認端口以及nifi.properties文件中的相應屬性。
功能 | 屬性 | 默認值 |
---|---|---|
Web HTTP Forwarding Port |
|
none |
HTTP Port |
|
|
HTTPS Port* |
|
|
Remote Input Socket Port* |
|
|
Cluster Node Protocol Port* |
|
|
Cluster Node Load Balancing Port |
|
|
標有星號(*)的端口的屬性值默認爲nifi.properties中的空白。當使用TLS Toolkit爲安全的NiFi實例生成nifi.properties時,表中顯示的值是這些端口的默認值。TLS Toolkit使用的默認證書頒發機構端口是8443 。 |
嵌入式Zookeeper
下表列出了Embedded ZooKeeper服務器使用的默認端口以及zookeeper.properties文件中的相應屬性。
功能 | 屬性 | 默認值 |
---|---|---|
Zookeeper Server Quorum and Leader Election Ports |
|
沒有 |
Zookeeper Client Port |
|
|
Zookeeper服務器端口的註釋示例包含在表單中的zookeeper.properties文件中server.N=nifi-nodeN-hostname:2888:3888 。 |
配置最佳實踐
如果您在Linux上運行,請考慮這些最佳實踐。典型的Linux默認設置不一定能夠滿足像NiFi這樣的IO密集型應用程序的需求。對於所有這些領域,您的分發要求可能會有所不同。使用這些部分作爲建議,但請參閱特定於發行版的文檔,以瞭解如何最好地實現這些建議。
最大文件句柄(Maximum File Handles)
NiFi在任何時候都可能會打開非常大量的文件句柄。通過編輯/etc/security/limits.conf來增加限制,以添加類似的內容
* hard nofile 50000 * soft nofile 50000
最大Forked Processes
NiFi可以配置爲生成大量線程。要增加允許的數量,請編輯/etc/security/limits.conf
* hard nproc 10000 * soft nproc 10000
您的發行版可能需要通過添加來編輯/etc/security/limits.d/90-nproc.conf
* soft nproc 10000
增加可用的TCP套接字端口數
如果您的流量將在很短的時間內設置並拆除大量socket ,這一點尤爲重要。
sudo sysctl -w net.ipv4.ip_local_port_range =“10000 65000”
設置套接字在關閉時保持TIMED_WAIT狀態的時間 (Set how long sockets stay in a TIMED_WAIT state when closed)
考慮到您希望能夠快速設置和拆卸新套接字,您不希望您的套接字停留太長時間。最好多閱讀一下並調整類似的東西
sudo sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait =“1”
告訴Linux你永遠不希望NiFi交換
對於某些應用程序來說,交換非常棒。對於像NiFi一樣想要運行的東西並不好。要告訴Linux你要換掉,你可以編輯/etc/sysctl.conf來添加以下行
vm.swappiness = 0
對於處理各種NiFi回購的分區,請關閉類似atime
的東西。這樣做會導致吞吐量出人意料地大幅增加。編輯/etc/fstab
文件和感興趣的分區,添加noatime
選項。
安全配置
NiFi提供多種不同的配置選項以用於安全目的。最重要的屬性是nifi.properties文件中“安全屬性”標題下的屬性。爲了安全運行,必須設置以下屬性:
物業名稱 | 描述 |
---|---|
|
Truststore的密碼。 |
|
包含服務器私鑰的密鑰庫的文件名。 |
|
密鑰庫的類型。必須是 |
|
密鑰庫的密碼。 |
|
密鑰庫中證書的密碼。如果未設置, |
|
將用於授權連接到NiFi的Truststore的文件名。沒有Truststore的安全實例將拒絕所有傳入連接。 |
|
Truststore的類型。必須是 |
一旦配置了上述屬性,我們就可以通過HTTPS而不是HTTP來訪問用戶界面。這是通過設置nifi.web.https.host
和nifi.web.https.port
屬性來完成的。該nifi.web.https.host
屬性指示服務器應在哪個主機名上運行。如果希望可以從所有網絡接口訪問HTTPS接口,0.0.0.0
則應使用值。允許管理員將應用程序配置爲僅在特定網絡接口上運行,nifi.web.http.network.interface*
或者nifi.web.https.network.interface*
可以指定屬性。
啓用HTTPS時重要的nifi.web.http.port 是取消設置屬性。NiFi僅支持在HTTP 或 HTTPS 上運行,而不是同時支持。 |
當沒有配置需要單向SSL(例如LDAP,OpenId Connect等)的替代認證機制時,NiFi的Web服務器將要求訪問用戶界面的用戶使用基於證書的客戶端身份驗證。啓用備用身份驗證機制會將Web服務器配置爲WANT證書基本客戶端身份驗證。這將允許它支持具有證書的用戶,而沒有證書的用戶可以使用憑證登錄。有關詳細信息,請參閱用戶驗證
既然用戶界面已經受到保護,我們也可以輕鬆保護站點到站點的連接和內部羣集通信。這是通過分別設置nifi.remote.input.secure
和nifi.cluster.protocol.is.secure
屬性來實現的true
。這些通信將始終需要雙向SSL,因爲節點將使用其配置的密鑰庫/信任庫進行身份驗證。
TLS生成工具包
爲了便於NiFi的安全設置,您可以使用tls-toolkit
命令行實用程序自動生成所需的密鑰庫,信任庫和相關配置文件。這對於保護多個NiFi節點特別有用,這可能是一個單調乏味且容易出錯的過程。有關更多信息,請參閱NiFi工具包指南中的TLS工具包部分。相關主題包括:
用戶認證
NiFi通過客戶端證書,用戶名/密碼,Apache Knox或OpenId Connect支持用戶身份驗證。
用戶名/密碼驗證由“登錄身份提供者”執行。登錄身份提供程序是一種可插入的機制,用於通過用戶名/密碼對用戶進行身份驗證。要在nifi.properties文件中配置要使用的登錄標識提供程序。目前,NiFi爲輕量級目錄訪問協議(LDAP)和Kerberos提供了用戶名/密碼和登錄身份提供商選項。
該nifi.login.identity.provider.configuration.file
屬性指定登錄標識提供程序的配置文件。默認情況下,此屬性設置爲./conf/login-identity-providers.xml
。
該nifi.security.user.login.identity.provider
屬性指示應使用哪個配置的登錄標識提供程序。默認情況下,未配置此屬性意味着必須明確啓用用戶名/密碼。
在OpenId Connect身份驗證期間,NiFi會在返回NiFi之前將用戶重定向到使用提供商登錄。然後,NiFi將致電提供商以獲取用戶身份。
在Apache Knox身份驗證期間,NiFi將重定向用戶以使用Apache Knox登錄,然後再返回NiFi。NiFi將在身份驗證期間驗證Apache Knox令牌。
NiFi只能在給定時間配置爲用戶名/密碼,OpenId Connect或Apache Knox。它不支持同時運行這些中的每一個。如果沒有配置這些,則NiFi將要求客戶端證書通過HTTPS對用戶進行身份驗證。 |
除非配置爲使用輕量級目錄訪問協議(LDAP)或Kerberos登錄身份提供程序,否則無法匿名訪問受保護的NiFi實例,而後者必須配置爲明確允許匿名訪問。默認的FileAuthorizer目前無法進行匿名訪問(請參閱授權器配置),但這是未來的努力(NIFI-2730)。
NiFi不通過HTTP執行用戶身份驗證。使用HTTP,所有用戶都將被授予所有角色。 |
輕量級目錄訪問協議(LDAP)
以下是配置登錄身份提供程序的示例和說明,該登錄身份提供程序與Directory Server集成以對用戶進行身份驗證。
在nifi.properties中設置以下內容以啓用LDAP用戶名/密碼身份驗證:
nifi.security.user.login.identity.provider=ldap-provider
修改login-identity-providers.xml以啓用ldap-provider
。以下是文件中提供的示例:
-
<provider> <identifier>ldap-provider</identifier> <class>org.apache.nifi.ldap.LdapProvider</class> <property name="Authentication Strategy">START_TLS</property> <property name="Manager DN"></property> <property name="Manager Password"></property> <property name="TLS - Keystore"></property> <property name="TLS - Keystore Password"></property> <property name="TLS - Keystore Type"></property> <property name="TLS - Truststore"></property> <property name="TLS - Truststore Password"></property> <property name="TLS - Truststore Type"></property> <property name="TLS - Client Auth"></property> <property name="TLS - Protocol"></property> <property name="TLS - Shutdown Gracefully"></property> <property name="Referral Strategy">FOLLOW</property> <property name="Connect Timeout">10 secs</property> <property name="Read Timeout">10 secs</property> <property name="Url"></property> <property name="User Search Base"></property> <property name="User Search Filter"></property> <property name="Identity Strategy">USE_DN</property> <property name="Authentication Expiration">12 hours</property> </provider>
將ldap-provider
具有以下特性:
物業名稱 | 描述 |
---|---|
|
用戶身份驗證有效期的持續時間。如果用戶從未註銷,則需要在此持續時間之後重新登錄。 |
|
如何驗證與LDAP服務器的連接。可能的值是 |
|
用於綁定到LDAP服務器以搜索用戶的管理器的DN。 |
|
用於綁定到LDAP服務器以搜索用戶的管理器的密碼。 |
|
使用LDAPS或START_TLS連接到LDAP時使用的密鑰庫的路徑。 |
|
使用LDAPS或START_TLS連接到LDAP時使用的密鑰庫的密碼。 |
|
使用LDAPS或START_TLS(即 |
|
使用LDAPS或START_TLS連接到LDAP時使用的Truststore的路徑。 |
|
使用LDAPS或START_TLS連接到LDAP時使用的Truststore的密碼。 |
|
使用LDAPS或START_TLS(即 |
|
使用LDAPS或START_TLS連接到LDAP時的客戶端身份驗證策略。可能的值是 |
|
使用LDAPS或START_TLS連接到LDAP時使用的協議。(即 |
|
指定在關閉目標上下文之前是否應正常關閉TLS。默認爲false。 |
|
處理推薦的策略。可能的值是 |
|
連接超時的持續時間。(即 |
|
讀取超時的持續時間。(即 |
|
以空格分隔的LDAP服務器的URL列表(即 |
|
用於搜索用戶的基本DN(即 |
|
過濾搜索用戶 |
|
識別用戶的策略。可能的值是 |
要使對nifi.properties和login-identity-providers.xml的更改生效,需要重新啓動NiFi。如果NiFi是羣集的,則所有節點上的配置文件必須相同。 |
Kerberos的
以下是配置登錄身份提供程序的示例和說明,該登錄身份提供程序與Kerberos密鑰分發中心(KDC)集成以對用戶進行身份驗證。
在nifi.properties中設置以下內容以啓用Kerberos用戶名/密碼身份驗證:
nifi.security.user.login.identity.provider=kerberos-provider
修改login-identity-providers.xml以啓用kerberos-provider
。以下是文件中提供的示例:
-
<provider> <identifier>kerberos-provider</identifier> <class>org.apache.nifi.kerberos.KerberosProvider</class> <property name="Default Realm">NIFI.APACHE.ORG</property> <property name="Authentication Expiration">12 hours</property> </provider>
將kerberos-provider
具有以下特性:
物業名稱 | 描述 |
---|---|
|
用戶身份驗證有效期的持續時間。如果用戶從未註銷,則需要在此持續時間之後重新登錄。 |
|
當用戶輸入不完整的用戶主體(即 |
另請參閱Kerberos服務以允許通過客戶端Kerberos票證進行單點登錄訪問。
要使對nifi.properties和login-identity-providers.xml的更改生效,需要重新啓動NiFi。如果NiFi是羣集的,則所有節點上的配置文件必須相同。 |
OpenId Connect
要通過OpenId Connect啓用身份驗證,必須在nifi.properties中配置以下屬性。
物業名稱 | 描述 |
---|---|
|
用於驗證身份令牌的首選算法。如果此值爲空,則默認爲 |
|
所需OpenId Connect Provider的發現URL (http://openid.net/specs/openid-connect-discovery-1_0.html)。 |
|
與OpenId Connect Provider通信時連接超時。 |
|
與OpenId Connect Provider通信時讀取超時。 |
|
註冊OpenId Connect Provider後,NiFi的客戶端ID。 |
|
在向OpenId Connect Provider註冊後,NiFi的客戶機密。 |
Apache Knox
要通過Apache Knox啓用身份驗證,必須在nifi.properties中配置以下屬性。
物業名稱 | 描述 |
---|---|
|
可選的。逗號分隔列出的允許的受衆羣體。如果設置,則令牌中的受衆必須出現在此列表中。可以在Knox中配置令牌中填充的受衆。 |
|
Apache Knox登錄頁面的URL。 |
|
Apache Knox公鑰的路徑,用於驗證HTTP Cookie中的身份驗證令牌的簽名。 |
|
成功登錄後Apache Knox將生成的HTTP Cookie的名稱。 |
多租戶授權
將NiFi配置爲安全運行並使用身份驗證機制後,您必須配置誰有權訪問系統以及訪問級別。您可以使用“多租戶授權”執行此操作。多租戶授權允許多組用戶(租戶)命令,控制和觀察數據流的不同部分,具有不同級別的授權。當經過身份驗證的用戶嘗試查看或修改NiFi資源時,系統會檢查用戶是否具有執行該操作的權限。這些權限由可以在系統範圍內應用於單個組件的策略定義。
授權人配置
“授權者”通過在啓動時創建初步授權,授予用戶管理用戶和策略的權限。
使用nifi.properties文件中的兩個屬性配置授權程序:
-
該
nifi.authorizer.configuration.file
屬性指定定義授權器的配置文件。默認情況下,將選擇位於根安裝conf目錄中的authorizers.xml文件。 -
該
nifi.security.user.authorizer
屬性指示authorizers.xml文件中要使用的已配置授權者。
Authorizers.xml安裝程序
該authorizers.xml文件用於定義和配置可用的授權人。默認授權程序是StandardManagedAuthorizer。託管授權程序由UserGroupProvider和AccessPolicyProvider組成。將加載用戶,組和訪問策略,並可通過這些提供程序進行配置。託管授權人將根據提供的用戶,組和訪問策略做出所有訪問決策。
在啓動期間,檢查以確保沒有兩個具有相同身份/名稱的用戶/組。無論配置的實現如何,都會執行此檢查。這是必要的,因爲這是在訪問決策期間識別和授權用戶/組的方式。
FileUserGroupProvider
默認的UserGroupProvider是FileUserGroupProvider,但是,您可以將其他UserGroupProviders開發爲擴展。FileUserGroupProvider具有以下屬性:
-
用戶文件 (Users File ) - FileUserGroupProvider存儲用戶和組的文件。默認情況下,users.xml文件的
conf
目錄中選擇。 -
舊版授權用戶文件(Legacy Authorized Users File) - 現有authorized-users.xml的完整路徑,該路徑將自動用於將用戶和組加載到用戶文件中。
-
初始用戶身份(Initial User Identity) - 用於爲用戶文件設定種子的用戶和系統的標識。每個屬性的名稱必須是唯一的,例如:“初始用戶身份A”,“初始用戶身份B”,“初始用戶身份C”或“初始用戶身份1”,“初始用戶身份2”,“初始用戶身份3“
LdapUserGroupProvider
UserGroupProvider的另一個選項是LdapUserGroupProvider。默認情況下,此選項已註釋掉,但可以配置爲代替FileUserGroupProvider。這將從目錄服務器同步用戶和組,並以只讀形式在NiFi UI中顯示它們。
LdapUserGroupProvider具有以下屬性:
物業名稱 | 描述 |
---|---|
|
如果爲空,則定義的屬性值 |
|
如何驗證與LDAP服務器的連接。可能的值是 |
|
用於綁定到LDAP服務器以搜索用戶的管理器的DN。 |
|
用於綁定到LDAP服務器以搜索用戶的管理器的密碼。 |
|
使用LDAPS或START_TLS連接到LDAP時使用的密鑰庫的路徑。 |
|
使用LDAPS或START_TLS連接到LDAP時使用的密鑰庫的密碼。 |
|
使用LDAPS或START_TLS(即 |
|
使用LDAPS或START_TLS連接到LDAP時使用的Truststore的路徑。 |
|
使用LDAPS或START_TLS連接到LDAP時使用的Truststore的密碼。 |
|
使用LDAPS或START_TLS(即 |
|
使用LDAPS或START_TLS連接到LDAP時的客戶端身份驗證策略。可能的值是 |
|
使用LDAPS或START_TLS連接到LDAP時使用的協議。(即 |
|
指定在關閉目標上下文之前是否應正常關閉TLS。默認爲false。 |
|
處理推薦的策略。可能的值是 |
|
連接超時的持續時間。(即 |
|
讀取超時的持續時間。(即 |
|
以空格分隔的LDAP服務器的URL列表(即 |
|
檢索用戶和組時設置頁面大小。如果未指定,則不執行分頁。 |
|
同步用戶和組之間的持續時間。(即 |
|
用於搜索用戶的基本DN(即 |
|
用於標識用戶的對象類(即 |
|
搜索範圍進行搜索的用戶( |
|
過濾用於搜索 |
|
用於提取用戶身份的屬性(即 |
|
用於定義組成員身份的屬性(即 |
|
如果爲空,則定義的屬性值 |
|
用於搜索組的基本DN(即 |
|
用於標識組的對象類(即 |
|
搜索範圍搜索組( |
|
過濾搜索羣組 |
|
用於提取組名的屬性(即 |
|
用於定義組成員身份的屬性(即 |
nifi.properties中 指定的任何身份映射規則也將應用於用戶身份。組名未映射。 |
複合實現
UserGroupProvider的另一個選項是複合實現。這意味着可以配置和組合多個源/實現。例如,管理員可以配置要從文件和目錄服務器加載的用戶/組。有兩個複合實現,一個支持多個UserGroupProviders,一個支持多個UserGroupProviders和一個可配置的UserGroupProvider。
CompositeUserGroupProvider將支持從多個源檢索用戶和組。CompositeUserGroupProvider具有以下屬性:
nifi.properties中 指定的任何標識映射規則都不適用於此實現。基本實現需要應用此行爲。 |
CompositeConfigurableUserGroupProvider將支持從多個源檢索用戶和組。此外,還需要一個可配置的用戶組提供程序。可配置用戶組提供程序中的用戶是可配置的,但是從用戶組提供程序[唯一鍵]之一加載的用戶將不會。CompositeConfigurableUserGroupProvider具有以下屬性:
物業名稱 | 描述 |
---|---|
|
要加載的用戶組提供程序的標識符。每個屬性的名稱必須是唯一的,例如:“用戶組提供商A”,“用戶組提供商B”,“用戶組提供商C”或“用戶組提供商1”,“用戶組提供商2”,“用戶組”提供者3“ |
|
可配置的用戶組提供程序。 |
FileAccessPolicyProvider
默認的AccessPolicyProvider是FileAccessPolicyProvider,但是,您可以將其他AccessPolicyProvider開發爲擴展。FileAccessPolicyProvider具有以下屬性:
物業名稱 | 描述 |
---|---|
|
包含NiFi羣集節點的組的名稱。這種情況的典型用途是在羣集中動態添加/刪除節點。 |
|
上面定義的用戶組提供程序的標識符,用於訪問用於託管訪問策略的用戶和組。 |
|
FileAccessPolicyProvider將存儲策略的文件。 |
|
初始管理員用戶的身份,該用戶將被授予對UI的訪問權限,並且能夠創建其他用戶,組和策略。使用證書或LDAP或Kerberos主體時,此屬性的值可以是DN。僅在未定義其他策略時才使用此屬性。如果指定了此屬性,則無法指定舊版授權用戶文件。 |
|
現有authorized-users.xml的完整路徑,該路徑將自動轉換爲新的授權模型。如果指定了此屬性,則無法指定初始管理員標識,並且僅在未定義其他用戶,組和策略時才使用此屬性。 |
|
NiFi羣集節點的標識。在羣集時,應定義每個節點的屬性,以便每個節點都知道每個其他節點。如果不是羣集,則可以忽略這些屬性。每個屬性的名稱必須是唯一的,例如對於三節點羣集:“節點標識A”,“節點標識B”,“節點標識C”或“節點標識1”,“節點標識2”,“節點標識” 3" |
在初始管理員標識,節點標識屬性中配置的標識或在舊版授權用戶文件中發現的標識必須在配置的用戶組提供程序中可用。 |
必須在配置的用戶組提供程序中找到舊用戶文件中的所有用戶。 |
nifi.properties中 指定的任何標識映射規則也將應用於節點標識,因此值應爲未映射的標識(即來自證書的完整DN)。必須在配置的用戶組提供程序中找到此標識。 |
StandardManagedAuthorizer
默認授權程序是StandardManagedAuthorizer,但是,您可以將其他授權程序開發爲擴展程序。StandardManagedAuthorizer具有以下屬性:
FileAuthorizer
FileAuthorizer已被上述更精細的StandardManagedAuthorizer方法所取代。但是,由於向後兼容性原因,它仍然可用。FileAuthorizer具有以下屬性:
物業名稱 | 描述 |
---|---|
|
NiFi羣集節點的標識。在羣集時,應定義每個節點的屬性,以便每個節點都知道每個其他節點。如果不是羣集,則可以忽略這些屬性。 |
|
FileAuthorizer存儲策略的文件。默認情況下,authorizations.xml在 |
|
FileAuthorizer存儲用戶和組的文件。默認情況下,users.xml文件的 |
|
被授予對UI的訪問權限並且能夠創建其他用戶,組和策略的初始管理員用戶的身份。僅在未定義其他用戶,組和策略時使用此屬性。 |
|
現有authorized-users.xml的完整路徑,該路徑自動轉換爲多租戶授權模型。僅在未定義其他用戶,組和策略時使用此屬性。 |
nifi.properties中 指定的任何標識映射規則也將應用於初始管理標識,因此該值應爲未映射的標識。 |
nifi.properties中 指定的任何標識映射規則也將應用於節點標識,因此值應爲未映射的標識(即來自證書的完整DN)。 |
初始管理員身份(新NiFi實例)
如果您是第一次設置安全的NiFi實例,則必須在authorizers.xml文件中手動指定“初始管理員標識” 。此初始管理員用戶被授予對UI的訪問權限,並且可以創建其他用戶,組和策略。此屬性的值可以是DN(使用證書或LDAP時)或Kerberos主體。如果您是NiFi管理員,請將自己添加爲“初始管理員身份”。
編輯並保存authorizers.xml文件後,重新啓動NiFi。重新啓動期間,“初始管理員標識”用戶和管理策略將添加到users.xml和authorizations.xml文件中。一旦NiFi啓動,“初始管理員身份”用戶就可以訪問UI並開始管理用戶,組和策略。
對於全新的安全流,提供“初始管理員身份”使用戶可以訪問用戶界面並管理用戶,組和策略。但是,如果該用戶想要開始修改流,他們需要爲根進程組授予自己的策略。系統無法自動執行此操作,因爲在新流中,根進程組的UUID在生成flow.xml.gz之前不是永久性的。如果NiFi實例是從現有flow.xml.gz或從不安全到安全的1.x實例的升級,則“初始管理員身份”用戶將自動獲得修改流的權限。 |
一些常見用例如下所述。
基於文件(LDAP身份驗證)
以下是使用John Smith名稱的LDAP條目示例:
-
<authorizers> <userGroupProvider> <identifier>file-user-group-provider</identifier> <class>org.apache.nifi.authorization.FileUserGroupProvider</class> <property name="Users File">./conf/users.xml</property> <property name="Legacy Authorized Users File"></property> <property name="Initial User Identity 1">cn=John Smith,ou=people,dc=example,dc=com</property> </userGroupProvider> <accessPolicyProvider> <identifier>file-access-policy-provider</identifier> <class>org.apache.nifi.authorization.FileAccessPolicyProvider</class> <property name="User Group Provider">file-user-group-provider</property> <property name="Authorizations File">./conf/authorizations.xml</property> <property name="Initial Admin Identity">cn=John Smith,ou=people,dc=example,dc=com</property> <property name="Legacy Authorized Users File"></property> <property name="Node Identity 1"></property> </accessPolicyProvider> <authorizer> <identifier>managed-authorizer</identifier> <class>org.apache.nifi.authorization.StandardManagedAuthorizer</class> <property name="Access Policy Provider">file-access-policy-provider</property> </authorizer> </authorizers>
基於文件(Kerberos身份驗證)
以下是使用名稱John Smith和realm的示例Kerberos條目NIFI.APACHE.ORG
:
-
<authorizers> <userGroupProvider> <identifier>file-user-group-provider</identifier> <class>org.apache.nifi.authorization.FileUserGroupProvider</class> <property name="Users File">./conf/users.xml</property> <property name="Legacy Authorized Users File"></property> <property name="Initial User Identity 1">[email protected]</property> </userGroupProvider> <accessPolicyProvider> <identifier>file-access-policy-provider</identifier> <class>org.apache.nifi.authorization.FileAccessPolicyProvider</class> <property name="User Group Provider">file-user-group-provider</property> <property name="Authorizations File">./conf/authorizations.xml</property> <property name="Initial Admin Identity">[email protected]</property> <property name="Legacy Authorized Users File"></property> <property name="Node Identity 1"></property> </accessPolicyProvider> <authorizer> <identifier>managed-authorizer</identifier> <class>org.apache.nifi.authorization.StandardManagedAuthorizer</class> <property name="Access Policy Provider">file-access-policy-provider</property> </authorizer> </authorizers>
基於LDAP的用戶/組引用用戶DN
以下是從LDAP加載用戶和組的示例。組成員資格將通過每個組的成員屬性來驅動。授權仍將使用基於文件的訪問策略:
-
dn: cn=User 1,ou=users,o=nifi objectClass: organizationalPerson objectClass: person objectClass: inetOrgPerson objectClass: top cn: User 1 sn: User1 uid: user1 dn: cn=User 2,ou=users,o=nifi objectClass: organizationalPerson objectClass: person objectClass: inetOrgPerson objectClass: top cn: User 2 sn: User2 uid: user2 dn: cn=admins,ou=groups,o=nifi objectClass: groupOfNames objectClass: top cn: admins member: cn=User 1,ou=users,o=nifi member: cn=User 2,ou=users,o=nifi <authorizers> <userGroupProvider> <identifier>ldap-user-group-provider</identifier> <class>org.apache.nifi.ldap.tenants.LdapUserGroupProvider</class> <property name="Authentication Strategy">ANONYMOUS</property> <property name="Manager DN"></property> <property name="Manager Password"></property> <property name="TLS - Keystore"></property> <property name="TLS - Keystore Password"></property> <property name="TLS - Keystore Type"></property> <property name="TLS - Truststore"></property> <property name="TLS - Truststore Password"></property> <property name="TLS - Truststore Type"></property> <property name="TLS - Client Auth"></property> <property name="TLS - Protocol"></property> <property name="TLS - Shutdown Gracefully"></property> <property name="Referral Strategy">FOLLOW</property> <property name="Connect Timeout">10 secs</property> <property name="Read Timeout">10 secs</property> <property name="Url">ldap://localhost:10389</property> <property name="Page Size"></property> <property name="Sync Interval">30 mins</property> <property name="User Search Base">ou=users,o=nifi</property> <property name="User Object Class">person</property> <property name="User Search Scope">ONE_LEVEL</property> <property name="User Search Filter"></property> <property name="User Identity Attribute">cn</property> <property name="User Group Name Attribute"></property> <property name="User Group Name Attribute - Referenced Group Attribute"></property> <property name="Group Search Base">ou=groups,o=nifi</property> <property name="Group Object Class">groupOfNames</property> <property name="Group Search Scope">ONE_LEVEL</property> <property name="Group Search Filter"></property> <property name="Group Name Attribute">cn</property> <property name="Group Member Attribute">member</property> <property name="Group Member Attribute - Referenced User Attribute"></property> </userGroupProvider> <accessPolicyProvider> <identifier>file-access-policy-provider</identifier> <class>org.apache.nifi.authorization.FileAccessPolicyProvider</class> <property name="User Group Provider">ldap-user-group-provider</property> <property name="Authorizations File">./conf/authorizations.xml</property> <property name="Initial Admin Identity">John Smith</property> <property name="Legacy Authorized Users File"></property> <property name="Node Identity 1"></property> </accessPolicyProvider> <authorizer> <identifier>managed-authorizer</identifier> <class>org.apache.nifi.authorization.StandardManagedAuthorizer</class> <property name="Access Policy Provider">file-access-policy-provider</property> </authorizer> </authorizers>
該Initial Admin Identity
值將根據值從John Smith的條目中加載cn User Identity Attribute
。
基於LDAP的用戶/組引用用戶屬性
以下是從LDAP加載用戶和組的示例。組成員資格將通過每個組的成員uid屬性驅動。授權仍將使用基於文件的訪問策略:
-
dn: uid=User 1,ou=Users,dc=local objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount uid: user1 cn: User 1 dn: uid=User 2,ou=Users,dc=local objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount uid: user2 cn: User 2 dn: cn=Managers,ou=Groups,dc=local objectClass: posixGroup cn: Managers memberUid: user1 memberUid: user2 <authorizers> <userGroupProvider> <identifier>ldap-user-group-provider</identifier> <class>org.apache.nifi.ldap.tenants.LdapUserGroupProvider</class> <property name="Authentication Strategy">ANONYMOUS</property> <property name="Manager DN"></property> <property name="Manager Password"></property> <property name="TLS - Keystore"></property> <property name="TLS - Keystore Password"></property> <property name="TLS - Keystore Type"></property> <property name="TLS - Truststore"></property> <property name="TLS - Truststore Password"></property> <property name="TLS - Truststore Type"></property> <property name="TLS - Client Auth"></property> <property name="TLS - Protocol"></property> <property name="TLS - Shutdown Gracefully"></property> <property name="Referral Strategy">FOLLOW</property> <property name="Connect Timeout">10 secs</property> <property name="Read Timeout">10 secs</property> <property name="Url">ldap://localhost:10389</property> <property name="Page Size"></property> <property name="Sync Interval">30 mins</property> <property name="User Search Base">ou=Users,dc=local</property> <property name="User Object Class">posixAccount</property> <property name="User Search Scope">ONE_LEVEL</property> <property name="User Search Filter"></property> <property name="User Identity Attribute">cn</property> <property name="User Group Name Attribute"></property> <property name="User Group Name Attribute - Referenced Group Attribute"></property> <property name="Group Search Base">ou=Groups,dc=local</property> <property name="Group Object Class">posixGroup</property> <property name="Group Search Scope">ONE_LEVEL</property> <property name="Group Search Filter"></property> <property name="Group Name Attribute">cn</property> <property name="Group Member Attribute">memberUid</property> <property name="Group Member Attribute - Referenced User Attribute">uid</property> </userGroupProvider> <accessPolicyProvider> <identifier>file-access-policy-provider</identifier> <class>org.apache.nifi.authorization.FileAccessPolicyProvider</class> <property name="User Group Provider">ldap-user-group-provider</property> <property name="Authorizations File">./conf/authorizations.xml</property> <property name="Initial Admin Identity">John Smith</property> <property name="Legacy Authorized Users File"></property> <property name="Node Identity 1"></property> </accessPolicyProvider> <authorizer> <identifier>managed-authorizer</identifier> <class>org.apache.nifi.authorization.StandardManagedAuthorizer</class> <property name="Access Policy Provider">file-access-policy-provider</property> </authorizer> </authorizers>
Composite - 基於文件和LDAP的用戶/組
以下是從LDAP和本地文件加載用戶和組的示例複合實現。組成員資格將通過每個組的成員屬性來驅動。來自LDAP的用戶將是隻讀的,而從文件加載的用戶可以在UI中進行配置。
-
dn: cn=User 1,ou=users,o=nifi objectClass: organizationalPerson objectClass: person objectClass: inetOrgPerson objectClass: top cn: User 1 sn: User1 uid: user1 dn: cn=User 2,ou=users,o=nifi objectClass: organizationalPerson objectClass: person objectClass: inetOrgPerson objectClass: top cn: User 2 sn: User2 uid: user2 dn: cn=admins,ou=groups,o=nifi objectClass: groupOfNames objectClass: top cn: admins member: cn=User 1,ou=users,o=nifi member: cn=User 2,ou=users,o=nifi <authorizers> <userGroupProvider> <identifier>file-user-group-provider</identifier> <class>org.apache.nifi.authorization.FileUserGroupProvider</class> <property name="Users File">./conf/users.xml</property> <property name="Legacy Authorized Users File"></property> <property name="Initial User Identity 1">cn=nifi-node1,ou=servers,dc=example,dc=com</property> <property name="Initial User Identity 2">cn=nifi-node2,ou=servers,dc=example,dc=com</property> </userGroupProvider> <userGroupProvider> <identifier>ldap-user-group-provider</identifier> <class>org.apache.nifi.ldap.tenants.LdapUserGroupProvider</class> <property name="Authentication Strategy">ANONYMOUS</property> <property name="Manager DN"></property> <property name="Manager Password"></property> <property name="TLS - Keystore"></property> <property name="TLS - Keystore Password"></property> <property name="TLS - Keystore Type"></property> <property name="TLS - Truststore"></property> <property name="TLS - Truststore Password"></property> <property name="TLS - Truststore Type"></property> <property name="TLS - Client Auth"></property> <property name="TLS - Protocol"></property> <property name="TLS - Shutdown Gracefully"></property> <property name="Referral Strategy">FOLLOW</property> <property name="Connect Timeout">10 secs</property> <property name="Read Timeout">10 secs</property> <property name="Url">ldap://localhost:10389</property> <property name="Page Size"></property> <property name="Sync Interval">30 mins</property> <property name="User Search Base">ou=users,o=nifi</property> <property name="User Object Class">person</property> <property name="User Search Scope">ONE_LEVEL</property> <property name="User Search Filter"></property> <property name="User Identity Attribute">cn</property> <property name="User Group Name Attribute"></property> <property name="User Group Name Attribute - Referenced Group Attribute"></property> <property name="Group Search Base">ou=groups,o=nifi</property> <property name="Group Object Class">groupOfNames</property> <property name="Group Search Scope">ONE_LEVEL</property> <property name="Group Search Filter"></property> <property name="Group Name Attribute">cn</property> <property name="Group Member Attribute">member</property> <property name="Group Member Attribute - Referenced User Attribute"></property> </userGroupProvider> <userGroupProvider> <identifier>composite-user-group-provider</identifier> <class>org.apache.nifi.authorization.CompositeConfigurableUserGroupProvider</class> <property name="Configurable User Group Provider">file-user-group-provider</property> <property name="User Group Provider 1">ldap-user-group-provider</property> </userGroupProvider> <accessPolicyProvider> <identifier>file-access-policy-provider</identifier> <class>org.apache.nifi.authorization.FileAccessPolicyProvider</class> <property name="User Group Provider">composite-user-group-provider</property> <property name="Authorizations File">./conf/authorizations.xml</property> <property name="Initial Admin Identity">John Smith</property> <property name="Legacy Authorized Users File"></property> <property name="Node Identity 1">cn=nifi-node1,ou=servers,dc=example,dc=com</property> <property name="Node Identity 2">cn=nifi-node2,ou=servers,dc=example,dc=com</property> </accessPolicyProvider> <authorizer> <identifier>managed-authorizer</identifier> <class>org.apache.nifi.authorization.StandardManagedAuthorizer</class> <property name="Access Policy Provider">file-access-policy-provider</property> </authorizer> </authorizers>
在此示例中,用戶和組是從LDAP加載的,但服務器是在本地文件中管理的。該Initial Admin Identity
值來自基於的LDAP條目中的屬性User Identity Attribute
。該Node Identity
值是建立使用本地文件Initial User Identity
的屬性。
舊版授權用戶(NiFi實例升級)
如果要從0.x NiFi實例升級,則可以將先前配置的用戶和角色轉換爲多租戶授權模型。在authorizers.xml文件中,指定屬性中現有authorized-users.xml文件的位置Legacy Authorized Users File
。
這是一個示例條目:
-
<authorizers> <userGroupProvider> <identifier>file-user-group-provider</identifier> <class>org.apache.nifi.authorization.FileUserGroupProvider</class> <property name="Users File">./conf/users.xml</property> <property name="Legacy Authorized Users File">/Users/johnsmith/config_files/authorized-users.xml</property> <property name="Initial User Identity 1"></property> </userGroupProvider> <accessPolicyProvider> <identifier>file-access-policy-provider</identifier> <class>org.apache.nifi.authorization.FileAccessPolicyProvider</class> <property name="User Group Provider">file-user-group-provider</property> <property name="Authorizations File">./conf/authorizations.xml</property> <property name="Initial Admin Identity"></property> <property name="Legacy Authorized Users File">/Users/johnsmith/config_files/authorized-users.xml</property> <property name="Node Identity 1"></property> </accessPolicyProvider> <authorizer> <identifier>managed-authorizer</identifier> <class>org.apache.nifi.authorization.StandardManagedAuthorizer</class> <property name="Access Policy Provider">file-access-policy-provider</property> </authorizer> </authorizers>
編輯並保存authorizers.xml文件後,重新啓動NiFi。來自authorized-users.xml文件的用戶和角色將轉換並作爲身份和策略添加到users.xml和authorizations.xml文件中。應用程序啓動後,之前具有舊管理員角色的用戶可以訪問UI並開始管理用戶,組和策略。
如果NiFi實例具有現有的flow.xml.gz,下表總結了分配給每個舊角色的全局和組件策略:
全球訪問政策
Admin | DFM | Monitor | Provenance | NiFi | Proxy | |
---|---|---|---|---|---|---|
view the UI |
* |
* |
* |
|||
access the controller - view |
* |
* |
* |
* |
||
access the controller - modify |
* |
|||||
query provenance |
* |
|||||
access restricted components |
* |
|||||
access all policies - view |
* |
|||||
access all policies - modify |
* |
|||||
access users/user groups - view |
* |
|||||
access users/user groups - modify |
* |
|||||
retrieve site-to-site details |
* |
|||||
view system diagnostics |
* |
* |
||||
proxy user requests |
* |
|||||
access counters |
根進程組上的組件訪問策略
Admin | DFM | Monitor | Provenance | NiFi | Proxy | |
---|---|---|---|---|---|---|
view the component |
* |
* |
* |
|||
modify the component |
* |
|||||
view the data |
* |
* |
* |
|||
modify the data |
* |
* |
||||
view provenance |
* |
有關表中各個策略的詳細信息,請參閱訪問策略。
如果屬性Initial Admin Identity 和Legacy Authorized Users File 屬性都存在值,則NiFi無法重新啓動。您只能指定其中一個值來初始化授權。 |
不要手動編輯authorizations.xml文件。僅在初始設置期間以及之後使用NiFi UI創建授權。 |
羣集節點標識
如果在羣集環境中運行NiFi,則必須爲每個節點指定標識。在啓動期間創建節點通信所需的授權策略。
例如,如果要爲每個節點設置具有以下DN的2節點羣集:
-
cn=nifi-1,ou=people,dc=example,dc=com cn=nifi-2,ou=people,dc=example,dc=com
-
-
<authorizers> <userGroupProvider> <identifier>file-user-group-provider</identifier> <class>org.apache.nifi.authorization.FileUserGroupProvider</class> <property name="Users File">./conf/users.xml</property> <property name="Legacy Authorized Users File"></property> <property name="Initial User Identity 1">[email protected]</property> <property name="Initial User Identity 2">cn=nifi-1,ou=people,dc=example,dc=com</property> <property name="Initial User Identity 3">cn=nifi-2,ou=people,dc=example,dc=com</property> </userGroupProvider> <accessPolicyProvider> <identifier>file-access-policy-provider</identifier> <class>org.apache.nifi.authorization.FileAccessPolicyProvider</class> <property name="User Group Provider">file-user-group-provider</property> <property name="Authorizations File">./conf/authorizations.xml</property> <property name="Initial Admin Identity">[email protected]</property> <property name="Legacy Authorized Users File"></property> <property name="Node Identity 1">cn=nifi-1,ou=people,dc=example,dc=com</property> <property name="Node Identity 2">cn=nifi-2,ou=people,dc=example,dc=com</property> </accessPolicyProvider> <authorizer> <identifier>managed-authorizer</identifier> <class>org.apache.nifi.authorization.StandardManagedAuthorizer</class> <property name="Access Policy Provider">file-access-policy-provider</property> </authorizer> </authorizers>
-
在羣集中,所有節點必須具有相同的authorizations.xml和users.xml。唯一的例外是,如果節點在加入羣集之前具有空authorizations.xml和user.xml文件。在此方案中,節點在啓動期間從羣集繼承它們。 |
現在已經創建了初始授權,可以在NiFi UI中創建和管理其他用戶,組和授權。