W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
如果您使用Kerberos來保護您的網絡環(huán)境,則可以使用Kerberos身份驗證插件來保護Solr集群。
這允許Solr使用Kerberos服務主體和keytab文件來認證ZooKeeper以及Solr群集的節(jié)點(如果適用)。Admin UI和所有客戶端(如SolrJ)的用戶在能夠使用UI或向Solr發(fā)送請求之前還需要擁有一個有效的票證。
在SolrCloud模式或獨立模式下支持Kerberos身份驗證插件。
如果您將Solr與通過Kerberos保護的Hadoop集群一起使用,并打算將您的Solr索引存儲在HDFS中,請參閱HDFS上運行Solr部分,以獲取為此目的配置Solr的其他步驟。本頁面上的說明僅適用于使用Kerberos保護Solr的情況。如果您只需要將索引存儲在Kerberized HDFS系統(tǒng)中,請參閱上面的其他部分。
當設置Solr以使用Kerberos時,Solr將使用服務主體或在密鑰分發(fā)中心(KDC)注冊的Kerberos用戶名進行配置,以對請求進行身份驗證。這些配置定義了服務主體名稱和包含憑證的 keytab 文件的位置。
Solr 身份驗證模型使用名為security.json的文件。此文件的說明以及創(chuàng)建和維護的方式都包含在身份驗證和授權插件部分。如果此文件是在 Solr 初始啟動后創(chuàng)建的,則需要重新啟動系統(tǒng)的每個節(jié)點。
每個Solr節(jié)點必須具有在密鑰分發(fā)中心(KDC)注冊的服務主體。Kerberos插件使用SPNego來協(xié)商身份驗證。
使用HTTP/host1@YOUR-DOMAIN.ORG,作為服務主體的一個例子:
同一主機上的多個Solr節(jié)點可能具有相同的服務主體,因為主機名對于所有主機都是通用的。
與服務主體一起,每個Solr節(jié)點都需要一個keytab文件,該文件應包含所使用的服務主體的憑證。keytab 文件包含加密的憑據,以便在從KDC獲取Kerberos票據時支持無密碼登錄。對于每個Solr節(jié)點,keytab 文件應保存在安全的位置,而不是與群集的用戶共享。
由于Solr群集需要節(jié)點間通信,因此每個節(jié)點還必須能夠向其他節(jié)點啟用Kerberos啟用的請求。默認情況下,Solr使用相同的服務主體和keytab作為節(jié)點間通信的“客戶端主體”。您可以明確地配置一個不同的客戶端主體,但不建議這樣做,下面的示例中沒有涉及。
在設置Kerberos SolrCloud集群時,建議同時啟用ZooKeeper的Kerberos安全性。
在這樣的設置中,使用ZooKeeper身份驗證請求的客戶端主體也可以用于節(jié)點間通信。由于Solr使用的Zookeeper客戶端負責這個操作,因此不需要分別續(xù)訂票證授予票證(TGT)。為了達到這個目的,一個JAAS配置(應用程序名稱為Client)可用于Kerberos插件以及Zookeeper客戶端。
有關在Kerberos模式下啟動ZooKeeper的示例,請參見下面的ZooKeeper配置部分。
為了讓您的瀏覽器在啟用Kerberos身份驗證后訪問Solr管理用戶界面,它必須能夠與Kerberos身份驗證器服務進行協(xié)商以允許您訪問。每個瀏覽器都支持這種方式,有些(如Chrome)完全不支持。如果在啟用Kerberos身份驗證后嘗試訪問Solr管理用戶界面時看到401錯誤,則可能是您的瀏覽器未正確配置,無法知道如何或在何處協(xié)商身份驗證請求。
有關如何設置瀏覽器的詳細信息超出了本文檔的范圍。有關如何配置瀏覽器的詳細信息,請與系統(tǒng)管理員聯(lián)系以了解 Kerberos。
請咨詢您的 Kerberos 管理員:在嘗試將 Solr 配置為使用 kerberos 身份驗證之前,請查看下面列出的每個步驟,并咨詢您的本地Kerberos管理員的每個詳細信息,以確保您知道每個參數(shù)的正確值。小錯誤可能會導致Solr無法啟動或無法正常工作,并且非常難以診斷。
Kerberos插件的配置有幾個部分:
在之后的內容中我們會使用到這些步驟。
注意:使用主機名;要使用主機名而不是 IP 地址, 請使用 bin/solr.in.sh 中的 SOLR_HOST 配置或在 solr 啟動期間通過 -Dhost=<hostname> 系統(tǒng)參數(shù)。本指南使用 IP 地址。如果指定了主機名,請根據需要將指南中的所有IP地址替換為Solr主機名。
在配置Solr之前,請確保您擁有KDC服務器中每個Solr主機和ZooKeeper的Kerberos服務主體(如果ZooKeeper尚未配置),并生成一個keytab文件,如下所示。
這個例子假定主機名是192.168.0.107,并且您的主目錄是/home/foo/。這個例子應該根據您自己的環(huán)境進行修改。
root@kdc:/# kadmin.local
Authenticating as principal foo/admin@EXAMPLE.COM with password.
kadmin.local: addprinc HTTP/192.168.0.107
WARNING: no policy specified for HTTP/192.168.0.107@EXAMPLE.COM; defaulting to no policy
Enter password for principal "HTTP/192.168.0.107@EXAMPLE.COM":
Re-enter password for principal "HTTP/192.168.0.107@EXAMPLE.COM":
Principal "HTTP/192.168.0.107@EXAMPLE.COM" created.
kadmin.local: ktadd -k /tmp/107.keytab HTTP/192.168.0.107
Entry for principal HTTP/192.168.0.107 with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:/tmp/107.keytab.
Entry for principal HTTP/192.168.0.107 with kvno 2, encryption type arcfour-hmac added to keytab WRFILE:/tmp/107.keytab.
Entry for principal HTTP/192.168.0.107 with kvno 2, encryption type des3-cbc-sha1 added to keytab WRFILE:/tmp/108.keytab.
Entry for principal HTTP/192.168.0.107 with kvno 2, encryption type des-cbc-crc added to keytab WRFILE:/tmp/107.keytab.
kadmin.local: quit
將 keytab 文件從KDC服務器的/tmp/107.keytab位置復制到位于的Solr主機/keytabs/107.keytab。對每個Solr節(jié)點重復此步驟。
您可能需要采取類似的步驟來創(chuàng)建ZooKeeper服務主體和 keytab(如果尚未設置)。在這種情況下,下面的例子顯示了ZooKeeper的一個不同的服務主體,因此上述可能會以 zookeeper/host1 作為其中一個節(jié)點的服務主體來重復。
如果您正在使用的ZooKeeper已配置為使用 Kerberos,則可以跳過此處顯示的與ZooKeeper相關的步驟。
由于ZooKeeper管理SolrCloud集群中節(jié)點之間的通信,因此它還必須能夠與集群中的每個節(jié)點進行身份驗證。配置需要為ZooKeeper設置一個服務主體,定義一個JAAS配置文件并指示ZooKeeper使用這兩個項目。
第一步是在ZooKeeper的conf目錄下創(chuàng)建一個java.env文件并添加以下內容,如下例所示:
export JVMFLAGS="-Djava.security.auth.login.config=/etc/zookeeper/conf/jaas-client.conf"
JAAS配置文件應包含以下參數(shù)。務必根據需要更改principal和keyTab路徑。該文件必須位于上述步驟中定義的路徑中,指定文件名。
Server {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="/keytabs/zkhost1.keytab"
storeKey=true
doNotPrompt=true
useTicketCache=false
debug=true
principal="zookeeper/host1@EXAMPLE.COM";
};
最后,將以下行添加到ZooKeeper的配置文件zoo.cfg中:
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
jaasLoginRenew=3600000
一旦所有部分都到位,使用以下參數(shù)指向JAAS配置文件來啟動ZooKeeper:
bin/zkServer.sh start -Djava.security.auth.login.config=/etc/zookeeper/conf/jaas-client.conf
創(chuàng)建security.json文件,在SolrCloud模式下,您可以通過在創(chuàng)建ZooKeeper時上傳security.json來將Solr設置為使用Kerberos插件,如下所示:
server/scripts/cloud-scripts/zkcli.sh -zkhost localhost:2181 -cmd put /security.json '{"authentication":{"class": "org.apache.solr.security.KerberosPlugin"}}'
如果您在獨立模式下使用Solr,則需要創(chuàng)建該security.json文件并將其放入您的$SOLR_HOME目錄中。
有關如何在Solr中使用/security.json文件的更多詳細信息,請參見“身份驗證和授權插件”部分。
如果在ZooKeeper中已經有了/security.json文件,請下載該文件,添加或修改身份驗證部分,然后使用 Solr 中提供的命令行實用程序將其上傳回ZooKeeper。
JAAS配置文件定義用于身份驗證的屬性,如服務主體和 keytab 文件的位置。還可以設置其他屬性以確保票據緩存和其他功能。
以下示例可以根據您的環(huán)境稍微復制和修改。文件的位置可以在服務器上的任何位置,但在啟動Solr時會被引用,因此它必須在文件系統(tǒng)上是可讀的。JAAS文件可能包含不同用戶的多個部分,但每個部分必須具有唯一的名稱,以便在每個應用程序中唯一地引用它。
在下面的例子中,我們創(chuàng)建了一個 JAAS 配置文件,其名稱和路徑為/home/foo/jaas-client.conf。我們將在下一節(jié)定義Solr start 參數(shù)時使用這個名稱和路徑。請注意,這里的客戶端主體與服務主體相同。這將用于驗證節(jié)點間的請求和請求到ZooKeeper。請確保使用正確的主體主機名和 keyTab 文件路徑。
Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="/keytabs/107.keytab"
storeKey=true
useTicketCache=true
debug=true
principal="HTTP/192.168.0.107@EXAMPLE.COM";
};
這個文件的第一行定義了節(jié)名稱,它將與下面定義的solr.kerberos.jaas.appname參數(shù)一起使用。
我們關注的主要屬性是keyTab和principal屬性,但也有其他可能需要為您的環(huán)境。Krb5LoginModule 的 javadoc(正在使用的類在上面的第二行中被調用)提供了可用屬性的一個很好的概要,但是對于在上面的例子中使用的參考來說,這里解釋如下:
在啟動Solr時,需要傳遞以下特定于主機的參數(shù)。這些參數(shù)可以通過bin/solr啟動命令在命令行中傳遞(請參閱“Solr控制腳本參考”以了解如何傳遞系統(tǒng)參數(shù)的詳細信息),也可以在bin/solr.in.sh或者bin/solr.in.cmd中根據您的操作系統(tǒng)進行相應的定義。
用于將Kerberos主體映射到短名稱。默認值是DEFAULT
。名稱規(guī)則的例子:RULE:[1:$1@$0](.*EXAMPLE.COM)s/@.*//
。
用于發(fā)出cookie,并應具有Solr節(jié)點的主機名。該參數(shù)是必需的。
設置為true
時,Cookie根據主機和端口進行區(qū)分,而標準Cookie不是端口可識別的。如果在同一個主機上托管多個Solr節(jié)點,應該設置此項。默認是false
。
服務主體。該參數(shù)是必需的。
包含服務主體憑證的Keytab文件路徑。該參數(shù)是必需的。
節(jié)點間通信所需的JAAS配置文件中的應用程序名稱(節(jié)名稱)。默認值是Client
,也用于ZooKeeper身份驗證。如果ZooKeeper和Solr使用不同的用戶,那么他們將需要在JAAS配置文件中有單獨的部分。
用于配置Solr客戶端以進行節(jié)點間通信的JAAS配置文件的路徑。該參數(shù)是必需的。
這是一個可以添加到bin/solr.in.sh的例子。確保將此示例更改為使用正確的主機名和keytab文件路徑。
SOLR_AUTH_TYPE="kerberos"
SOLR_AUTHENTICATION_OPTS="-Djava.security.auth.login.config=/home/foo/jaas-client.conf -Dsolr.kerberos.cookie.domain=192.168.0.107 -Dsolr.kerberos.cookie.portaware=true -Dsolr.kerberos.principal=HTTP/192.168.0.107@EXAMPLE.COM -Dsolr.kerberos.keytab=/keytabs/107.keytab"
如果您的KDC使用AES-256加密,則在Kerberized Solr可以與KDC交互之前,您需要將Java Cryptography Extension(JCE)無限制強制管轄權策略文件添加到您的JRE。
當您在Solr日志中看到如下錯誤時,您將會知道這一點:“KrbException:帶有HMAC SHA1-96的加密類型AES256 CTS模式不支持/啟用”
對于Java 1.8,可以在這里找到:http : //www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html。
將 JAVA_HOME/jre/lib/security/ 與新的 local_policy. jar 一起替換為已下載包中的 local_policy,然后重新啟動Solr節(jié)點。
Kerberos插件可以配置為使用委托令牌,允許應用程序重復使用最終用戶或其他應用程序的身份驗證。
對于 Solr,有幾個用例可能會有幫助:
要啟用委托令牌,必須定義幾個參數(shù)。這些參數(shù)可以通過bin/solr啟動命令在命令行中傳遞(請參閱“Solr控制腳本參考”以了解如何傳遞系統(tǒng)參數(shù)的詳細信息),也可以在bin/solr.in.sh或者bin/solr.in.cmd中根據您的操作系統(tǒng)進行相應的定義。
默認情況下為false
,設置為true
時啟用委派令牌。如果要啟用令牌,則此參數(shù)是必需的。
代表令牌的類型。默認為solr-dt
??赡苓@不需要改變。目前沒有其他選項可用。
代表令牌的有效時間,以秒為單位。默認值是36000秒。
代表令牌信息存儲在內部。默認值是zookeeper
,必須是授權令牌在Solr服務器上工作的位置(在SolrCloud模式下運行時)。目前沒有其他選項可用。
秘密提供者信息所在的ZooKeeper路徑。這是路徑+ /安全/令牌的形式。路徑可以包含chroot,如果您不使用chroot,則可以省略chroot。這個例子包括在chroot: server1:9983,server2:9983,server3:9983/solr/security/token
。
存儲令牌信息的ZooKeeper路徑。這是路徑+ / security / zkdtsm的形式。路徑可以包含chroot,如果您不使用chroot,則可以省略chroot。這個例子包括在chroot: server1:9983,server2:9983,server3:9983/solr/security/zkdtsm
。
配置完成后,可以使用bin/solr腳本啟動Solr ,如下面的示例所示,僅適用于SolrCloud模式的用戶。這個例子假設你修改了bin/solr.in.sh或者bin/solr.in.cmd是正確的值,但是如果你沒有修改的話,你可以把系統(tǒng)參數(shù)和start命令一起傳遞。請注意,您還需要根據您的ZooKeeper節(jié)點的位置自定義該-z屬性。
bin/solr -c -z server1:2181,server2:2181,server3:2181/solr
curl --negotiate -u : "http://192.168.0.107:8983/solr/"
要在SolrJ應用程序中使用Kerberos身份驗證,在創(chuàng)建SolrClient之前,需要以下兩行代碼:
System.setProperty("java.security.auth.login.config", "/home/foo/jaas-client.conf");
HttpClientUtil.setConfigurer(new Krb5HttpClientConfigurer());
您需要為客戶端指定一個Kerberos服務主體,并在上面的JAAS客戶端配置文件中指定相應的keytab。這個負責人應該與我們?yōu)镾olr創(chuàng)建的服務負責人不同。
這是一個例子:
SolrJClient {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="/keytabs/foo.keytab"
storeKey=true
useTicketCache=true
debug=true
principal="solrclient@EXAMPLE.COM";
};
SolrJ也支持授權令牌,方法如下:
獲取授權令牌的示例代碼:
private String getDelegationToken(final String renewer, final String user, HttpSolrClient solrClient) throws Exception {
DelegationTokenRequest.Get get = new DelegationTokenRequest.Get(renewer) {
@Override
public SolrParams getParams() {
ModifiableSolrParams params = new ModifiableSolrParams(super.getParams());
params.set("user", user);
return params;
}
};
DelegationTokenResponse.Get getResponse = get.process(solrClient);
return getResponse.getDelegationToken();
}
創(chuàng)建使用委派令牌的 HttpSolrClient:
HttpSolrClient client = new HttpSolrClient.Builder("http://localhost:8983/solr").withDelegationToken(token).build();
創(chuàng)建使用委派令牌的 CloudSolrClient
CloudSolrClient client = new CloudSolrClient.Builder()
.withZkHost("http://localhost:2181")
.withLBHttpSolrClientBuilder(new LBHttpSolrClient.Builder()
.withResponseParser(client.getParser())
.withHttpSolrClientBuilder(
new HttpSolrClient.Builder()
.withKerberosDelegationToken(token)
))
.build();
Hadoop 的委托令牌響應采用 JSON 映射格式。DelegationTokenResponse 中提供了一個響應分析器。其他響應解析器可能無法很好地處理 Hadoop 響應。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: