Solr身份驗(yàn)證和授權(quán)插件

2018-12-19 11:55 更新
Solr擁有支持用戶身份驗(yàn)證和授權(quán)的安全框架。這允許驗(yàn)證用戶的身份并限制對(duì)Solr集群中的資源的訪問(wèn)。

Solr包括一些隨時(shí)可用的插件,并且可以使用下面描述的認(rèn)證和授權(quán)框架來(lái)開發(fā)額外的插件。

無(wú)論是在 SolrCloud 模式下還是在獨(dú)立模式下運(yùn)行, 所有的身份驗(yàn)證和授權(quán)插件都可以與 Solr 一起使用。所有身份驗(yàn)證和授權(quán)配置(包括用戶和權(quán)限規(guī)則)都存儲(chǔ)在名為“security.json”的文件中。在獨(dú)立模式下使用Solr時(shí),該文件必須位于$SOLR_HOME目錄(通常為server/solr)中。當(dāng)使用SolrCloud時(shí),這個(gè)文件必須位于ZooKeeper中。

以下部分描述如何啟用security.json插件并將其放置在適合您的操作模式的位置。

使用security.json啟用插件

初始化任何類型的安全性插件所需的所有信息都存儲(chǔ)在一個(gè)security.json文件中。該文件包含2個(gè)部分,其中每個(gè)部分用于身份驗(yàn)證和授權(quán)。

示例security.json

{
  "authentication" : {
    "class": "class.that.implements.authentication"
  },
  "authorization": {
    "class": "class.that.implements.authorization"
  }
}

在Solr實(shí)例出現(xiàn)之前,該/security.json文件需要位于適當(dāng)?shù)奈恢?,所以Solr在啟用安全插件的情況下啟動(dòng)。有關(guān)如何執(zhí)行此操作的信息,請(qǐng)參閱下面的 "使用Solr中的security.json" 一節(jié)。

根據(jù)所使用的插件,其他信息將被存儲(chǔ)在security.json,例如用戶信息或創(chuàng)建角色和權(quán)限的規(guī)則。這些信息是通過(guò)Solr提供的每個(gè)插件的API添加的,或者在自定義插件的情況下,由您設(shè)計(jì)的方法添加。

這是一個(gè)更詳細(xì)的security.json例子。在這里,啟用了基本身份驗(yàn)證和基于規(guī)則的授權(quán)插件,并添加了一些數(shù)據(jù):

{
"authentication":{
   "class":"solr.BasicAuthPlugin",
   "credentials":{"solr":"IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c="}
},
"authorization":{
   "class":"solr.RuleBasedAuthorizationPlugin",
   "permissions":[{"name":"security-edit",
      "role":"admin"}],
   "user-role":{"solr":"admin"}
}}

在Solr中使用security.json

在SolrCloud模式中使用

在配置 Solr 使用身份驗(yàn)證或授權(quán)插件時(shí),您需要將security.json文件上傳到ZooKeeper。以下的命令會(huì)在上傳文件時(shí)寫入文件 - 您也可以上傳已經(jīng)在本地創(chuàng)建的文件。

>server/scripts/cloud-scripts/zkcli.sh -zkhost localhost:2181 -cmd put /security.json
  '{"authentication": {"class": "org.apache.solr.security.KerberosPlugin"}}'

請(qǐng)注意,這個(gè)例子定義了用于身份驗(yàn)證的 KerberosPlugin。您將需要根據(jù)您所使用的插件修改本部分。

這個(gè)例子還定義了命令行上的security.json,但是您也可以在本地定義一個(gè)文件并把它上傳到ZooKeeper。

注意:根據(jù)您使用的身份驗(yàn)證和授權(quán)插件,您可能有存儲(chǔ)在security.json中的用戶信息。如果是這樣,我們強(qiáng)烈建議您在ZooKeeper節(jié)點(diǎn)中實(shí)施訪問(wèn)控制。有關(guān)如何啟用此功能的信息, 可在 "ZooKeeper訪問(wèn)控制" 一節(jié)中獲得。

一旦security.json上傳到ZooKeeper,您應(yīng)該使用適當(dāng)?shù)腁PI來(lái)更新您使用的插件。您可以手動(dòng)對(duì)其進(jìn)行編輯,但必須注意刪除任何版本數(shù)據(jù),以便在所有ZooKeeper節(jié)點(diǎn)上正確更新。版本數(shù)據(jù)位于security.json文件的末尾,并以字母“v”后面跟著一個(gè)數(shù)字,例如:{"v":138}。

在獨(dú)立模式下使用

在獨(dú)立模式下運(yùn)行Solr時(shí),您需要?jiǎng)?chuàng)建security.json文件并將其放在您安裝的 $SOLR_HOME 目錄中(這與您通常所在的solr.xml的位置相同并且通常為server/solr)。

如果您正在使用Legacy Scaling 和 Distribution,則需要在集群的每個(gè)節(jié)點(diǎn)上放置security.json。

您可以使用身份驗(yàn)證和授權(quán)API,但是如果您使用舊版縮放模型,則需要分別在每個(gè)節(jié)點(diǎn)上創(chuàng)建相同的API請(qǐng)求。如果您愿意,也可以手動(dòng)編輯security.json。

身份驗(yàn)證插件

身份驗(yàn)證插件通過(guò)認(rèn)證傳入的請(qǐng)求進(jìn)行身份驗(yàn)證來(lái)幫助保護(hù) Solr 的端點(diǎn)。自定義插件可以通過(guò)擴(kuò)展AuthenticationPlugin類來(lái)實(shí)現(xiàn)。

身份驗(yàn)證插件由兩部分組成:

  1. 服務(wù)器端組件,它使用插件中定義的機(jī)制(例如Kerberos、基本身份驗(yàn)證或其他方法)來(lái)攔截和驗(yàn)證傳入的對(duì) Solr 的請(qǐng)求。
  2. 客戶端組件,即一個(gè)擴(kuò)展HttpClientConfigurer,它使SolrJ客戶端能夠使用服務(wù)器可以理解的身份認(rèn)證機(jī)制向安全的Solr實(shí)例發(fā)出請(qǐng)求。

啟用插件

  • 請(qǐng)?jiān)?security.json中指定身份驗(yàn)證插件,如以下示例所示:
    {
      "authentication": {
        "class": "class.that.implements.authentication",
        "other_data" : "..."}
    }
  • security.json認(rèn)證塊中的所有內(nèi)容將在初始化期間作為映射傳遞給插件。
  • 身份驗(yàn)證插件也可以通過(guò)在啟動(dòng)期間傳入-DauthenticationPlugin=<plugin class name>來(lái)與獨(dú)立的Solr實(shí)例一起使用。

可用的身份驗(yàn)證插件

Solr具有以下驗(yàn)證插件的實(shí)現(xiàn):

  • Kerberos身份驗(yàn)證插件
  • 基本身份驗(yàn)證插件
  • Hadoop身份驗(yàn)證插件

授權(quán)

通過(guò)擴(kuò)展AuthorizationPlugin接口,可以為Solr編寫授權(quán)插件。

加載自定義插件

  • 確保插件實(shí)現(xiàn)在類路徑中。
  • 然后可以通過(guò)在security.json中指定相同的方法來(lái)初始化插件,方式如下:
    {
      "authorization": {
        "class": "org.apache.solr.security.MockAuthorizationPlugin",
        "other_data" : "..."}
    }

security.json中的authorization塊中的所有內(nèi)容將在初始化期間作為映射傳遞給插件。

注意:授權(quán)插件僅在SolrCloud模式下受支持。另外,重新加載插件還不受支持,需要重啟 Solr 安裝 (也就是說(shuō),應(yīng)該重新啟動(dòng) JVM,而不是簡(jiǎn)單地重新加載內(nèi)核)。

Solr有一個(gè)授權(quán)插件的實(shí)現(xiàn):可用的授權(quán)插件

  • 基于規(guī)則的授權(quán)插件

確保節(jié)點(diǎn)間請(qǐng)求的安全

有很多來(lái)自Solr節(jié)點(diǎn)本身的請(qǐng)求。例如,監(jiān)督節(jié)點(diǎn)、恢復(fù)線程等的請(qǐng)求。每個(gè)Authentication(身份驗(yàn)證)插件聲明它是否能夠保證節(jié)點(diǎn)間的請(qǐng)求。如果沒(méi)有,Solr將回退到使用特殊的節(jié)點(diǎn)間身份驗(yàn)證機(jī)制,其中每個(gè)Solr節(jié)點(diǎn)是超級(jí)用戶,并被其他Solr節(jié)點(diǎn)完全信任,如下所述。

PKIAuthenticationPlugin

當(dāng)在兩個(gè)Solr節(jié)點(diǎn)之間發(fā)生任何請(qǐng)求時(shí),使用PKIAuthenticationPlugin,并且配置的Authentication插件不希望處理節(jié)點(diǎn)間安全性。

對(duì)于每個(gè)傳出的請(qǐng)求,PKIAuthenticationPlugin添加一個(gè)特殊的標(biāo)題'SolrAuth',其中包含使用該節(jié)點(diǎn)的私鑰加密的時(shí)間戳和主體。公鑰通過(guò)API公開,任何節(jié)點(diǎn)只要需要就可以讀取。任何獲取該頭部請(qǐng)求的節(jié)點(diǎn)都會(huì)從發(fā)送方獲取公鑰并解密信息。如果它能夠解密數(shù)據(jù),則請(qǐng)求受信任。如果時(shí)間戳超過(guò)5秒,則它無(wú)效。這假定群集中不同節(jié)點(diǎn)的時(shí)鐘是同步的。

超時(shí)時(shí)間可通過(guò)稱為 pkiauth.ttl 的系統(tǒng)屬性進(jìn)行配置。例如,如果您希望將生存時(shí)間提高到10秒(10000毫秒),請(qǐng)使用屬性'-Dpkiauth.ttl=10000'啟動(dòng)每個(gè)節(jié)點(diǎn)。

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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)