99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

ZooKeeper訪問(wèn)控制

2018-12-27 15:05 更新

本節(jié)介紹如何在Solr中使用ZooKeeper訪問(wèn)控制列表(ACL)。有關(guān)ZooKeeper ACL的信息,請(qǐng)參閱:http://zookeeper.apache.org/doc/r3.4.10/zookeeperProgrammers.html#sc_ZooKeeperAccessControl 的ZooKeeper文檔。

關(guān)于ZooKeeper ACL

SolrCloud使用ZooKeeper來(lái)共享信息和進(jìn)行協(xié)調(diào)。

本節(jié)介紹如何配置Solr以將更多限制性的ACL添加到其創(chuàng)建的ZooKeeper內(nèi)容,以及如何告知Solr有關(guān)訪問(wèn)ZooKeeper中內(nèi)容所需的憑據(jù)。如果你想在你的ZooKeeper節(jié)點(diǎn)中使用ACL,你必須激活這個(gè)功能。默認(rèn)情況下,Solr行為是開(kāi)放不安全的ACL,并且不使用任何憑據(jù)。

存儲(chǔ)在ZooKeeper中的內(nèi)容對(duì)于SolrCloud集群的運(yùn)行至關(guān)重要。開(kāi)放訪問(wèn)ZooKeeper上的SolrCloud內(nèi)容可能會(huì)導(dǎo)致各種問(wèn)題。例如:

  • 更改配置可能會(huì)導(dǎo)致Solr失敗或以非預(yù)期的方式運(yùn)行。
  • 將群集狀態(tài)信息更改為錯(cuò)誤或不一致的情況可能會(huì)使SolrCloud群集行為異常。
  • 添加由監(jiān)督員執(zhí)行的刪除集合作業(yè)將導(dǎo)致數(shù)據(jù)從群集中刪除。

如果您將ZooKeeper集合的訪問(wèn)權(quán)限授予您不信任的實(shí)體,或者您希望減少由于下列原因?qū)е碌腻e(cuò)誤操作的風(fēng)險(xiǎn),則可能需要使用Solr啟用ZooKeeper ACL:

  • 進(jìn)入你系統(tǒng)的惡意軟件。
  • 其他使用相同ZooKeeper集合的系統(tǒng)(一個(gè)“bad thing”可能是偶然發(fā)生的)。

如果你認(rèn)為ZooKeeper中有些東西不是每個(gè)人都應(yīng)該知道的,你甚至可能想要限制讀取權(quán)限。或者你可能只是在需要知道的基礎(chǔ)上進(jìn)行一般性的工作。

保護(hù)ZooKeeper本身可能意味著許多不同的事情。本節(jié)是關(guān)于保護(hù)ZooKeeper中的Solr內(nèi)容。ZooKeeper內(nèi)容基本上一直存在于磁盤(pán)上,部分地存在于ZooKeeper進(jìn)程的內(nèi)存中。本節(jié)不涉及在存儲(chǔ)或ZooKeeper進(jìn)程級(jí)別保護(hù)ZooKeeper數(shù)據(jù) - 這是ZooKeeper需要處理的。

但是這個(gè)內(nèi)容也可以通過(guò)ZooKeeper API“外部”提供。外部進(jìn)程可以連接到ZooKeeper并創(chuàng)建/更新/刪除/讀取內(nèi)容;例如,SolrCloud集群中的Solr節(jié)點(diǎn)想要?jiǎng)?chuàng)建/更新/刪除/讀取,并且SolrJ客戶端想要從集群中讀取。創(chuàng)建/更新內(nèi)容來(lái)設(shè)置內(nèi)容的ACL是外部進(jìn)程的責(zé)任。ACL描述誰(shuí)可以讀取,更新,刪除,創(chuàng)建等。ZooKeeper中的每個(gè)信息(znode / content)都有自己的一組ACL,并且不可能繼承或共享。Solr中的默認(rèn)行為是在其創(chuàng)建的所有內(nèi)容上添加一個(gè)ACL - 一個(gè)允許任何人執(zhí)行任何操作的權(quán)限(在ZooKeeper術(shù)語(yǔ)中稱為“開(kāi)放式不安全ACL(open-unsafe ACL)”)。

如何啟用ACL

我們希望能夠:

  1. 控制Solr用于其ZooKeeper連接的憑據(jù)。憑證用于獲取在ZooKeeper中執(zhí)行操作的權(quán)限。
  2. 控制ACL Solr將添加到它在ZooKeeper中創(chuàng)建的znodes(ZooKeeper文件/文件夾)。
  3. 從“外部”控制它,這樣您就不必修改或重新編譯Solr代碼即可將其打開(kāi)。

Solr節(jié)點(diǎn),客戶端和工具(例如ZkCLI)總是使用一個(gè)稱為SolrZkClient的java類(lèi)來(lái)處理他們的ZooKeeper的東西。這里所描述的解決方案的實(shí)現(xiàn)就是要改變的SolrZkClient。如果您在您的應(yīng)用程序中使用SolrZkClient,則下面的描述也適用于您的應(yīng)用程序。

控制憑證

通過(guò)在solr.xml的<solrcloud>部分中配置zkCredentialsProvider屬性到類(lèi)的名稱(在類(lèi)別路徑上)來(lái)實(shí)現(xiàn) zkCredentialsProvider 接口,這可以控制將使用哪個(gè)憑據(jù)提供程序。在Solr分布中的server/solr/solr.xml,定義了zkCredentialsProvider如果定義了它,它將采用同名zkCredentialsProvider系統(tǒng)屬性的值(例如,通過(guò)取消注釋在solr.in.sh/.cmd中的SOLR_ZK_CREDS_AND_ACLS環(huán)境變量定義- 參見(jiàn)下文),或者如果不定義,則默認(rèn)為DefaultZkCredentialsProvider實(shí)現(xiàn)。

開(kāi)箱憑證實(shí)現(xiàn)

你總是可以自己實(shí)現(xiàn),但Solr有兩個(gè)實(shí)現(xiàn):

  • org.apache.solr.common.cloud.DefaultZkCredentialsProvider:它的getCredentials()返回一個(gè)長(zhǎng)度為零的列表,或者“沒(méi)有使用憑據(jù)”。這是默認(rèn)的。
  • org.apache.solr.common.cloud.VMParamsSingleSetCredentialsDigestZkCredentialsProvider:這使您可以使用系統(tǒng)屬性來(lái)定義憑據(jù)。它最多支持一組證書(shū)。
    • 架構(gòu)是“digest”。用戶名和密碼由系統(tǒng)屬性zkDigestUsername和zkDigestPassword定義。如果提供了用戶名和密碼,則這組憑證將被添加到getCredentials()返回的憑證列表中。
    • 如果上述一組憑證未添加到列表中,則此實(shí)現(xiàn)將回退到默認(rèn)行為并使用DefaultZkCredentialsProvider(空)憑證列表。

控制ACL

通過(guò)在solr.xml的<solrcloud>部分中配置zkACLProvider屬性到類(lèi)的名稱(在類(lèi)別路徑上)來(lái)實(shí)現(xiàn) ZkACLProvider 接口,將會(huì)控制要添加的ACL。在Solr分布中的server/solr/solr.xml,定義了zkACLProvider,如果定義了它,它將采用同名zkACLProvider系統(tǒng)屬性的值(例如,通過(guò)取消注釋在solr.in.sh/.cmd中的SOLR_ZK_CREDS_AND_ACLS環(huán)境變量定義 - 參見(jiàn)下文),或者如果不定義,則默認(rèn)DefaultZkACLProvider執(zhí)行。

開(kāi)箱即用的ACL實(shí)現(xiàn)

你總是可以讓你自己實(shí)現(xiàn),但Solr有兩個(gè)實(shí)現(xiàn):

  • org.apache.solr.common.cloud.DefaultZkACLProvider:它為所有zNodePath-s 返回一個(gè)長(zhǎng)度為1的列表。列表中的單個(gè)ACL條目是“不安全的”。這是默認(rèn)的。
  • org.apache.solr.common.cloud.VMParamsAllAndReadonlyDigestZkACLProvider:這使您可以使用系統(tǒng)屬性來(lái)定義ACL。它的 getACLsToAdd () 實(shí)現(xiàn)對(duì)任何東西都不使用 zNodePath,所以所有的znode都會(huì)得到相同的一組ACL。它支持添加以下一個(gè)或兩個(gè)選項(xiàng):
    • 允許執(zhí)行所有操作的用戶。
      • 該許可是“ALL”(對(duì)應(yīng)于所有的CREATE,READ,WRITE,DELETE,和ADMIN),而架構(gòu)是“digest”。
      • 用戶名和密碼分別由系統(tǒng)屬性zkDigestUsername和zkDigestPassword定義。
      • 除非提供用戶名和密碼,否則此ACL不會(huì)添加到ACL列表中。
    • 只允許執(zhí)行讀取操作的用戶。
      • 權(quán)限是READ以及架構(gòu)是digest。
      • 用戶名和密碼分別由系統(tǒng)屬性zkDigestReadonlyUsername和zkDigestReadonlyPassword定義。
      • 除非提供用戶名和密碼,否則此ACL不會(huì)添加到ACL列表中。
  • org.apache.solr.common.cloud.SaslZkACLProvider:需要SASL身份驗(yàn)證。在使用SASL時(shí),為系統(tǒng)屬性solr.authorization.superuser(默認(rèn): solr)中指定的用戶授予所有權(quán)限,并為其他任何人提供讀取權(quán)限。設(shè)計(jì)用于配置已經(jīng)設(shè)置且不會(huì)被修改的設(shè)置,或者通過(guò)Solr API控制配置更改的位置。這個(gè)提供程序?qū)⒃趉erberos環(huán)境中用于管理。在這樣的環(huán)境中,管理員希望Solr使用SASL對(duì)ZooKeeper進(jìn)行身份驗(yàn)證,因?yàn)檫@只能通過(guò)Kerberos與ZooKeeper進(jìn)行身份驗(yàn)證。

如果沒(méi)有上述ACL添加到列表中,則默認(rèn)情況下將使用 DefaultZkACLProvider 的(空)ACL列表。

注意系統(tǒng)屬性名稱與證書(shū)提供程序VMParamsSingleSetCredentialsDigestZkCredentialsProvider(如上所述)重疊。這是為了讓兩個(gè)供應(yīng)商以一種很好的方式進(jìn)行協(xié)作:通過(guò)限制兩個(gè)用戶(一個(gè)管理員用戶和一個(gè)只讀用戶),我們始終保護(hù)對(duì)內(nèi)容的訪問(wèn)權(quán)限,而且我們始終使用與相同管理員用戶相對(duì)應(yīng)的憑據(jù)進(jìn)行連接,基本上這樣我們可以對(duì)我們自己創(chuàng)建的內(nèi)容/ znode做任何事情。

您可以將只讀憑據(jù)提供給SolrCloud群集的“客戶端” - 例如,供SolrJ客戶端使用。他們將能夠讀取運(yùn)行SolrJ客戶端所需的任何內(nèi)容,但是他們將無(wú)法修改ZooKeeper中的任何內(nèi)容。

Solr腳本中的ZooKeeper ACL

有兩個(gè)影響ZooKeeper ACL的腳本:

  • 對(duì)于* nix系統(tǒng):bin/solr&server/scripts/cloud-scripts/zkcli.sh
  • 對(duì)于Windows系統(tǒng):bin/solr.cmd&server/scripts/cloud-scripts/zkcli.bat

這些Solr腳本可以通過(guò)設(shè)置相應(yīng)的系統(tǒng)屬性來(lái)啟用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

更改ACL方案

在運(yùn)行Solr集群的整個(gè)過(guò)程中,您可能決定從一個(gè)不安全的ZooKeeper移動(dòng)到一個(gè)安全的實(shí)例。更改在在solr.xml中配置的zkACLProvider將確保新創(chuàng)建的節(jié)點(diǎn)是安全的,但不會(huì)保護(hù)已有的數(shù)據(jù)。要修改所有現(xiàn)有的ACL,可以在Solr的ZkCLI中使用該updateacls命令。首先對(duì)定義在server/scripts/cloud-scripts/zkcli.sh(或在Windows上的zkcli.bat)上的SOLR_ZK_CREDS_AND_ACLS環(huán)境變量取消注釋?zhuān)缓筇顚?xiě)admin-user和readonly-user的密碼 - 見(jiàn)上面 - 然后運(yùn)行server/scripts/cloud-scripts/zkcli.sh -cmd updateacls /zk-path,或者在Windows上運(yùn)行:server\scripts\cloud-scripts\zkcli.bat cmd updateacls /zk-path。

在ZK中更改ACL時(shí),只能在SolrCloud群集停止時(shí)執(zhí)行。嘗試在Solr運(yùn)行時(shí)執(zhí)行此操作可能會(huì)導(dǎo)致?tīng)顟B(tài)不一致,并且某些節(jié)點(diǎn)無(wú)法訪問(wèn)。

VM屬性:zkACLProvider和zkCredentialsProvider(包含在zkcli.sh/.bat的SOLR_ZK_CREDS_AND_ACLS環(huán)境變量中)控制著轉(zhuǎn)換:

  • 憑證提供程序必須是在節(jié)點(diǎn)上具有當(dāng)前管理權(quán)限的憑證提供程序。省略時(shí),該進(jìn)程將不使用任何憑據(jù)(適用于不安全的配置)。
  • ACL提供程序?qū)⒂糜谟?jì)算新的ACL。省略時(shí),該過(guò)程將為所有用戶設(shè)置所有權(quán)限,從而消除存在的任何安全性。

zkcli.sh/.bat中未注釋的SOLR_ZK_CREDS_AND_ACLS環(huán)境變量將憑據(jù)和ACL提供程序設(shè)置為VMParamsSingleSetCredentialsDigestZkCredentialsProvider和VMParamsAllAndReadonlyDigestZkACLProvider實(shí)現(xiàn)。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)