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

2018-12-20 14:32 更新

Solr允許配置角色來控制用戶對系統(tǒng)的訪問。

這是通過分配給用戶的基于規(guī)則的權(quán)限定義來完成的。這些角色是完全可自定義的,并且提供了限制對特定集合、請求處理程序、請求參數(shù)和請求方法的訪問的能力。

如果您創(chuàng)建了角色,則可以將這些角色用于任何身份驗(yàn)證插件或自定義身份驗(yàn)證插件。您只需確保使用您的身份驗(yàn)證系統(tǒng)提供的適當(dāng)用戶 ID 來配置角色到用戶(role-to-user)的映射。

一旦通過API定義,角色就存儲在security.json中。

啟用授權(quán)插件

必須在 security.json 中啟用該插件。此文件以及將其放置到系統(tǒng)中的位置在“使用security.json啟用插件”一節(jié)中進(jìn)行了詳細(xì)介紹。

這個文件有兩個部分,即authentication(身份驗(yàn)證)部分和authorization(授權(quán))部分。該authentication部分存儲有關(guān)用于身份驗(yàn)證的類的信息。

該authorization部分與基本身份驗(yàn)證無關(guān),但是是一個單獨(dú)的授權(quán)插件,旨在支持細(xì)粒度(fine-grained)的用戶訪問控制。創(chuàng)建security.json時,可以將權(quán)限添加到文件中,也可以使用下面描述的授權(quán)API在需要時添加它們。

此示例security.json顯示了基本身份驗(yàn)證插件如何與此授權(quán)插件配合使用:

{
"authentication":{
   "class":"solr.BasicAuthPlugin", 【1】
   "blockUnknown": true, 【2】
   "credentials":{"solr":"IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c="} 【3】
},
"authorization":{
   "class":"solr.RuleBasedAuthorizationPlugin", 【4】
   "permissions":[{"name":"security-edit",
      "role":"admin"}], 【5】
   "user-role":{"solr":"admin"} 【6】
}}

此示例中定義了以下幾項(xiàng)內(nèi)容(對于上述代碼中的數(shù)字):

  1. 基本身份驗(yàn)證插件已啟用。
  2. 所有沒有憑據(jù)的請求將被拒絕,并發(fā)生401錯誤。設(shè)置'blockUnknown'為false(或者完全刪除)如果您想讓未經(jīng)驗(yàn)證的請求通過。但是,如果一個特定的資源受到規(guī)則的保護(hù),它們將被拒絕,并且會有401錯誤。
  3. 已經(jīng)定義了一個名為'solr'的用戶,并帶有密碼。
  4. 基于規(guī)則的授權(quán)插件已啟用。
  5. "admin" 角色已定義,并且具有編輯安全設(shè)置的權(quán)限。
  6. "solr" 用戶已被定義為 "admin" 角色。

權(quán)限屬性

每個角色由一個或多個權(quán)限組成,這些權(quán)限定義用戶被允許執(zhí)行的操作。每個權(quán)限都由幾個定義允許的活動的屬性組成。有一些預(yù)定義的權(quán)限不能被修改。

查詢權(quán)限是為了在security.json顯示它們。匹配的第一個權(quán)限適用于每個用戶,所以最嚴(yán)格的權(quán)限應(yīng)該在列表的頂部。權(quán)限順序可以通過授權(quán)API的參數(shù)進(jìn)行控制,如下所述。

預(yù)定義的權(quán)限

有幾個預(yù)先定義的權(quán)限。它們具有固定的默認(rèn)值,不能修改,并且無法添加新屬性。要使用這些屬性,只需定義一個包含此權(quán)限的角色,然后將用戶分配給該角色。

預(yù)定義的權(quán)限是:

  • security-edit:允許此權(quán)限編輯安全性配置,這意味著security.json允許通過API 修改的任何更新操作。
  • security-read:允許此權(quán)限讀取安全配置??,這意味著security.json允許通過API 讀取設(shè)置的任何操作。
  • schema-edit:允許此權(quán)限使用架構(gòu)API編輯集合的架構(gòu)。請注意,這允許所有集合的架構(gòu)編輯權(quán)限。如果編輯權(quán)限只應(yīng)用于特定集合,則需要創(chuàng)建自定義權(quán)限。
  • schema-read:允許此權(quán)限使用架構(gòu)API讀取集合的架構(gòu)。請注意,這允許所有集合的模式讀取權(quán)限。如果讀取權(quán)限只應(yīng)用于特定集合,則需要創(chuàng)建自定義權(quán)限。
  • config-edit:允許此權(quán)限使用Config API,Request Parameters API和其他修改configoverlay.json的API來編輯集合的配置。請注意,這允許所有集合的配置編輯權(quán)限。如果編輯權(quán)限只應(yīng)用于特定集合,則需要創(chuàng)建自定義權(quán)限。
  • core-admin-read:讀取核心管理API上的操作
  • core-admin-edit:可以改變系統(tǒng)狀態(tài)的核心管理命令。
  • config-read:允許此權(quán)限使用Config API,Request Parameters API和其他修改configoverlay.json的API來讀取集合的配置。請注意,這允許所有集合的配置讀取權(quán)限。如果讀取權(quán)限只應(yīng)用于特定集合,則需要創(chuàng)建自定義權(quán)限。
  • collection-admin-edit:允許此權(quán)限使用Collections API編輯集合的配置。請注意,這允許所有集合的配置編輯權(quán)限。如果編輯權(quán)限只應(yīng)用于特定集合,則需要創(chuàng)建自定義權(quán)限。具體來說,允許以下的集合API操作:CREATE,RELOAD,SPLITSHARD,CREATESHARD,DELETESHARD,CREATEALIAS,DELETEALIAS,DELETE,DELETEREPLICA,ADDREPLICA,CLUSTERPROP,MIGRATE,ADDROLE,REMOVEROLE,ADDREPLICAPROP,DELETEREPLICAPROP,BALANCESHARDUNIQUE,REBALANCELEADERS
  • collection-admin-read:允許此權(quán)限使用Collections API讀取集合的配置。請注意,這允許所有集合的配置讀取權(quán)限。如果讀取權(quán)限只應(yīng)用于特定集合,則需要創(chuàng)建自定義權(quán)限。具體來說,允許以下的集合API操作:LIST,OVERSEERSTATUS,CLUSTERSTATUS,REQUESTSTATUS
  • update:允許此權(quán)限對任何集合執(zhí)行任何更新操作。這包括發(fā)送索引文件(使用更新請求處理程序)。默認(rèn)情況下,這適用于所有集合(collection:"*")。
  • read:允許此權(quán)限對任何集合執(zhí)行任何讀取操作。這包括使用搜索處理程序(使用請求處理程序)進(jìn)行查詢,例如:/select,/get,/browse,/tvrh,/terms,/clustering,/elevate,/export,/spell,/clustering和/sql。默認(rèn)情況下,這適用于所有集合(collection:"*")。
  • all:Solr的任何請求。

授權(quán)API

授權(quán)API端點(diǎn)

/admin/authorization:使用一組命令來創(chuàng)建權(quán)限,將權(quán)限映射到角色,并將角色映射到用戶。

管理權(quán)限

三個命令控制管理權(quán)限:

  • set-permission:創(chuàng)建新權(quán)限,覆蓋現(xiàn)有權(quán)限定義或?yàn)榻巧峙漕A(yù)定義的權(quán)限。
  • update-permission:更新現(xiàn)有權(quán)限定義的一些屬性。
  • delete-permission:刪除權(quán)限定義。

如果權(quán)限不在上面的預(yù)定義權(quán)限列表中,則需要創(chuàng)建權(quán)限。

可以使用幾個屬性來定義您的自定義權(quán)限。

name

權(quán)限的名稱。只有在預(yù)定義權(quán)限的情況下才需要。

collection

權(quán)限將應(yīng)用到的集合。

當(dāng)允許的路徑是特定于集合的路徑時(例如設(shè)置權(quán)限以允許使用Schema API時),省略集合屬性將允許為所有集合定義的路徑或方法。但是,如果路徑是非集合特定的路徑(如Collections API),則集合值必須為null。默認(rèn)值是*(所有集合)。

path

請求處理程序名稱,如/update或者 /select。支持通配符,以適應(yīng)所有路徑(如,/update/*)。

method

允許此權(quán)限的HTTP方法。您可以只允許GET請求,或者有一個允許PUT和POST請求的角色。該屬性允許的方法值是GET,POST,PUT,DELETE和HEAD。

params

請求參數(shù)的名稱和值。如果所有的請求參數(shù)都要匹配,那么這個屬性可以省略,但是如果定義的話只會限制訪問提供的值。

例如,此屬性可用于限制角色允許使用Collections API執(zhí)行的操作。如果只允許角色執(zhí)行LIST或CLUSTERSTATUS請求,則可以按如下方式進(jìn)行定義:

{"params": {
   "action": ["LIST", "CLUSTERSTATUS"]
  }
}

參數(shù)的值可以是簡單的字符串,也可以是正則表達(dá)式。使用前綴REGEX:來使用正則表達(dá)式匹配而不是字符串標(biāo)識匹配

如果命令LIST和CLUSTERSTATUS不區(qū)分大小寫,上面的例子應(yīng)該如下:

{"params": {
   "action": ["REGEX:(?i)LIST", "REGEX:(?i)CLUSTERSTATUS"]
  }
}
before

該屬性允許排序權(quán)限。這個屬性的值是這個新權(quán)限應(yīng)該放在security.json之前的權(quán)限的索引。該索引按照它們創(chuàng)建的順序自動分配。

role

授予此權(quán)限的角色的名稱。此名稱將用于將用戶標(biāo)識映射到角色以授予這些權(quán)限。該值可以是通配符,如(*),這意味著任何用戶都可以,但是沒有用戶是不可以的。

下面創(chuàng)建一個名為“collection-mgr”的新權(quán)限,允許創(chuàng)建和列出集合。權(quán)限將被放置在“讀取”權(quán)限之前。還要注意,我們已經(jīng)將“集合”定義為 null,這是因?yàn)閷螦PI的請求從來都不是特定于集合的。

curl --user solr:SolrRocks -H 'Content-type:application/json' -d '{
  "set-permission": {"collection": null,
                     "path":"/admin/collections",
                     "params":{"action":["LIST", "CREATE"]},
                     "before": 3,
                     "role": "admin"}
}' http://localhost:8983/solr/admin/authorization

將所有集合的更新權(quán)限應(yīng)用于稱為dev的角色,dev并將權(quán)限讀取到名為guest的角色:

curl --user solr:SolrRocks -H 'Content-type:application/json' -d '{
  "set-permission": {"name": "update", "role":"dev"},
  "set-permission": {"name": "read", "role":"guest"}
}' http://localhost:8983/solr/admin/authorization

更新或刪除權(quán)限

權(quán)限可以通過列表中的索引進(jìn)行訪問。使用/admin/authorizationAPI查看現(xiàn)有權(quán)限及其索引。

以下示例更新'role'索引3處的權(quán)限屬性:

curl --user solr:SolrRocks -H 'Content-type:application/json' -d '{
  "update-permission": {"index": 3,
                       "role": ["admin", "dev"]}
}' http://localhost:8983/solr/admin/authorization

以下示例刪除索引3處的權(quán)限:

curl --user solr:SolrRocks -H 'Content-type:application/json' -d '{
  "delete-permission": 3
}' http://localhost:8983/solr/admin/authorization

將角色映射到用戶

單個命令允許將角色映射到用戶:

  • set-user-role:將用戶映射到權(quán)限。

要刪除用戶的權(quán)限,您應(yīng)該將角色設(shè)置為null。沒有命令來刪除用戶角色。

提供給命令的值只是一個用戶ID和一個或多個用戶應(yīng)具有的角色。

例如,以下內(nèi)容將“admin”和“dev”角色授予給用戶“solr”,并從用戶ID“harry”中刪除所有角色:

curl -u solr:SolrRocks -H 'Content-type:application/json' -d '{
   "set-user-role" : {"solr": ["admin","dev"],
                      "harry": null}
}' http://localhost:8983/solr/admin/authorization
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號