W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
本節(jié)介紹如何在Solr中使用ZooKeeper訪問控制列表(ACL)。有關(guān)ZooKeeper ACL的信息,請參閱:http://zookeeper.apache.org/doc/r3.4.10/zookeeperProgrammers.html#sc_ZooKeeperAccessControl 的ZooKeeper文檔。
SolrCloud使用ZooKeeper來共享信息和進行協(xié)調(diào)。
本節(jié)介紹如何配置Solr以將更多限制性的ACL添加到其創(chuàng)建的ZooKeeper內(nèi)容,以及如何告知Solr有關(guān)訪問ZooKeeper中內(nèi)容所需的憑據(jù)。如果你想在你的ZooKeeper節(jié)點中使用ACL,你必須激活這個功能。默認情況下,Solr行為是開放不安全的ACL,并且不使用任何憑據(jù)。
存儲在ZooKeeper中的內(nèi)容對于SolrCloud集群的運行至關(guān)重要。開放訪問ZooKeeper上的SolrCloud內(nèi)容可能會導致各種問題。例如:
如果您將ZooKeeper集合的訪問權(quán)限授予您不信任的實體,或者您希望減少由于下列原因?qū)е碌腻e誤操作的風險,則可能需要使用Solr啟用ZooKeeper ACL:
如果你認為ZooKeeper中有些東西不是每個人都應(yīng)該知道的,你甚至可能想要限制讀取權(quán)限?;蛘吣憧赡苤皇窃谛枰赖幕A(chǔ)上進行一般性的工作。
保護ZooKeeper本身可能意味著許多不同的事情。本節(jié)是關(guān)于保護ZooKeeper中的Solr內(nèi)容。ZooKeeper內(nèi)容基本上一直存在于磁盤上,部分地存在于ZooKeeper進程的內(nèi)存中。本節(jié)不涉及在存儲或ZooKeeper進程級別保護ZooKeeper數(shù)據(jù) - 這是ZooKeeper需要處理的。
但是這個內(nèi)容也可以通過ZooKeeper API“外部”提供。外部進程可以連接到ZooKeeper并創(chuàng)建/更新/刪除/讀取內(nèi)容;例如,SolrCloud集群中的Solr節(jié)點想要創(chuàng)建/更新/刪除/讀取,并且SolrJ客戶端想要從集群中讀取。創(chuàng)建/更新內(nèi)容來設(shè)置內(nèi)容的ACL是外部進程的責任。ACL描述誰可以讀取,更新,刪除,創(chuàng)建等。ZooKeeper中的每個信息(znode / content)都有自己的一組ACL,并且不可能繼承或共享。Solr中的默認行為是在其創(chuàng)建的所有內(nèi)容上添加一個ACL - 一個允許任何人執(zhí)行任何操作的權(quán)限(在ZooKeeper術(shù)語中稱為“開放式不安全ACL(open-unsafe ACL)”)。
我們希望能夠:
Solr節(jié)點,客戶端和工具(例如ZkCLI)總是使用一個稱為SolrZkClient的java類來處理他們的ZooKeeper的東西。這里所描述的解決方案的實現(xiàn)就是要改變的SolrZkClient。如果您在您的應(yīng)用程序中使用SolrZkClient,則下面的描述也適用于您的應(yīng)用程序。
通過在solr.xml的<solrcloud>部分中配置zkCredentialsProvider屬性到類的名稱(在類別路徑上)來實現(xiàn) zkCredentialsProvider 接口,這可以控制將使用哪個憑據(jù)提供程序。在Solr分布中的server/solr/solr.xml,定義了zkCredentialsProvider如果定義了它,它將采用同名zkCredentialsProvider系統(tǒng)屬性的值(例如,通過取消注釋在solr.in.sh/.cmd中的SOLR_ZK_CREDS_AND_ACLS環(huán)境變量定義-
參見下文),或者如果不定義,則默認為DefaultZkCredentialsProvider實現(xiàn)。
你總是可以自己實現(xiàn),但Solr有兩個實現(xiàn):
通過在solr.xml的<solrcloud>部分中配置zkACLProvider屬性到類的名稱(在類別路徑上)來實現(xiàn) ZkACLProvider 接口,將會控制要添加的ACL。在Solr分布中的server/solr/solr.xml,定義了zkACLProvider,如果定義了它,它將采用同名zkACLProvider系統(tǒng)屬性的值(例如,通過取消注釋在solr.in.sh/.cmd中的SOLR_ZK_CREDS_AND_ACLS環(huán)境變量定義 - 參見下文),或者如果不定義,則默認DefaultZkACLProvider執(zhí)行。
你總是可以讓你自己實現(xiàn),但Solr有兩個實現(xiàn):
如果沒有上述ACL添加到列表中,則默認情況下將使用 DefaultZkACLProvider 的(空)ACL列表。
注意系統(tǒng)屬性名稱與證書提供程序VMParamsSingleSetCredentialsDigestZkCredentialsProvider(如上所述)重疊。這是為了讓兩個供應(yīng)商以一種很好的方式進行協(xié)作:通過限制兩個用戶(一個管理員用戶和一個只讀用戶),我們始終保護對內(nèi)容的訪問權(quán)限,而且我們始終使用與相同管理員用戶相對應(yīng)的憑據(jù)進行連接,基本上這樣我們可以對我們自己創(chuàng)建的內(nèi)容/ znode做任何事情。
您可以將只讀憑據(jù)提供給SolrCloud群集的“客戶端” - 例如,供SolrJ客戶端使用。他們將能夠讀取運行SolrJ客戶端所需的任何內(nèi)容,但是他們將無法修改ZooKeeper中的任何內(nèi)容。
有兩個影響ZooKeeper ACL的腳本:
這些Solr腳本可以通過設(shè)置相應(yīng)的系統(tǒng)屬性來啟用ZK ACL:取消注釋以下內(nèi)容,并將密碼替換為您選擇的密碼,以便在以下文件中啟用上述VM參數(shù)ACL和憑證提供程序:
solr.in.sh:
# Settings for ZK ACL
#SOLR_ZK_CREDS_AND_ACLS="-DzkACLProvider=org.apache.solr.common.cloud.VMParamsAllAndReadonlyDigestZkACLProvider \
# -DzkCredentialsProvider=org.apache.solr.common.cloud.VMParamsSingleSetCredentialsDigestZkCredentialsProvider \
# -DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD \
# -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD"
#SOLR_OPTS="$SOLR_OPTS $SOLR_ZK_CREDS_AND_ACLS"
solr.in.cmd:
REM Settings for ZK ACL
REM set SOLR_ZK_CREDS_AND_ACLS=-DzkACLProvider=org.apache.solr.common.cloud.VMParamsAllAndReadonlyDigestZkACLProvider ^
REM -DzkCredentialsProvider=org.apache.solr.common.cloud.VMParamsSingleSetCredentialsDigestZkCredentialsProvider ^
REM -DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD ^
REM -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD
REM set SOLR_OPTS=%SOLR_OPTS% %SOLR_ZK_CREDS_AND_ACLS%
zkcli.sh:
# Settings for ZK ACL
#SOLR_ZK_CREDS_AND_ACLS="-DzkACLProvider=org.apache.solr.common.cloud.VMParamsAllAndReadonlyDigestZkACLProvider \
# -DzkCredentialsProvider=org.apache.solr.common.cloud.VMParamsSingleSetCredentialsDigestZkCredentialsProvider \
# -DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD \
# -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD"
zkcli.bat:
REM Settings for ZK ACL
REM set SOLR_ZK_CREDS_AND_ACLS=-DzkACLProvider=org.apache.solr.common.cloud.VMParamsAllAndReadonlyDigestZkACLProvider ^
REM -DzkCredentialsProvider=org.apache.solr.common.cloud.VMParamsSingleSetCredentialsDigestZkCredentialsProvider ^
REM -DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD ^
REM -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD
在運行Solr集群的整個過程中,您可能決定從一個不安全的ZooKeeper移動到一個安全的實例。更改在在solr.xml中配置的zkACLProvider將確保新創(chuàng)建的節(jié)點是安全的,但不會保護已有的數(shù)據(jù)。要修改所有現(xiàn)有的ACL,可以在Solr的ZkCLI中使用該updateacls命令。首先對定義在server/scripts/cloud-scripts/zkcli.sh(或在Windows上的zkcli.bat)上的SOLR_ZK_CREDS_AND_ACLS環(huán)境變量取消注釋,然后填寫admin-user和readonly-user的密碼
- 見上面 - 然后運行server/scripts/cloud-scripts/zkcli.sh -cmd updateacls /zk-path,或者在Windows上運行:server\scripts\cloud-scripts\zkcli.bat cmd updateacls /zk-path。
在ZK中更改ACL時,只能在SolrCloud群集停止時執(zhí)行。嘗試在Solr運行時執(zhí)行此操作可能會導致狀態(tài)不一致,并且某些節(jié)點無法訪問。
VM屬性:zkACLProvider和zkCredentialsProvider(包含在zkcli.sh/.bat的SOLR_ZK_CREDS_AND_ACLS環(huán)境變量中)控制著轉(zhuǎn)換:
zkcli.sh/.bat中未注釋的SOLR_ZK_CREDS_AND_ACLS環(huán)境變量將憑據(jù)和ACL提供程序設(shè)置為VMParamsSingleSetCredentialsDigestZkCredentialsProvider和VMParamsAllAndReadonlyDigestZkACLProvider實現(xiàn)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: