功能簡介
天翼云云搜索服務中的OpenSearch和Elasticsearch都支持細粒度權限管控,包括文檔級別和字段級別的權限控制,為企業級用戶提供了精確的數據訪問管理能力。這一功能使得管理員能夠針對不同的用戶或角色,靈活地配置他們對特定文檔或字段的訪問權限,確保敏感信息得到有效保護,同時實現數據的高效共享和管理。
核心原理
細粒度權限管控允許管理員在多個層次上定義用戶訪問權限。具體來說,文檔級別的權限控制使得管理員能夠基于文檔的內容或屬性,決定某個用戶是否可以訪問或查詢該文檔。字段級別的權限控制則進一步細化,允許管理員指定某些用戶只能查看或操作文檔中的特定字段,而隱藏其他字段內容。
例如,在一個包含敏感信息的客戶數據庫中,管理員可以配置權限,使得某些用戶只能訪問客戶的聯系方式,而不能查看財務信息或個人身份信息。通過這樣的精細控制,搜索引擎能夠確保數據的安全性和合規性,同時滿足不同業務場景下的訪問需求。
應用場景與優勢
數據安全與隱私保護
通過文檔級別和字段級別的權限控制,企業可以確保敏感信息僅對經過授權的用戶可見。這在金融、醫療等對數據隱私有嚴格要求的行業中尤為重要,能夠幫助企業滿足合規性要求。
個性化數據訪問
細粒度權限管控允許為不同用戶或角色定制數據訪問視圖。例如,在一個銷售系統中,銷售人員可能只需要訪問客戶的基本信息,而經理則可以查看更詳細的銷售記錄和分析數據。這種個性化的權限配置提高了工作效率。
多租戶環境
在多租戶環境中,細粒度權限管控能夠有效隔離不同租戶的數據,確保每個租戶只能訪問自己的數據。即使多個租戶共享同一個搜索引擎集群,他們的數據依然能夠得到嚴格的保護。
最小權限原則
細粒度權限控制支持最小權限原則(Principle of Least Privilege),確保用戶僅能訪問其工作所需的最小數據范圍,從而減少潛在的安全風險。
技術實現與應用
管理員可以通過 OpenSearch 的安全模塊,使用文檔級別安全(Document-Level Security, DLS)和字段級別安全(Field-Level Security, FLS)配置細粒度權限。DLS 允許基于查詢條件限制用戶對特定文檔的訪問,而 FLS 則允許管理員指定哪些字段對特定用戶可見或不可見。
這些權限配置可以通過 OpenSearch 的 REST API 或管理工具來實現和管理。管理員還可以結合角色和用戶組的概念,為不同用戶群體配置統一的權限策略,從而簡化權限管理流程。
操作示例
我們創建一個role public_role,創建一個user public_user1,目標是讓這個user只能查看pub開頭的索引里public字段為true的文檔。
創建角色:
PUT _plugins/_security/api/roles/public_role
{
"cluster_permissions": [
"*"
],
"index_permissions": [{
"index_patterns": [
"pub*"
],
"dls": "{\"term\": { \"public\": \"true\"}}",
"allowed_actions": [
"read"
]
}]
}
創建用戶:
PUT _plugins/_security/api/internalusers/public_user1
{
"password": "******"
}
創建Mapping:
PUT _plugins/_security/api/rolesmapping/public_role
{
"users" : [ "public_user1" ]
}
創建索引:
- pub索引,插入兩條數據
POST pub_index/_doc/
{
"name": "robert",
"age": "30",
"public": "true"
}
?
POST pub_index/_doc/
{
"name": "mike",
"age": "55",
"public": "false"
}
- 非pub索引
POST sec_index/_doc/
{
"name": "jane",
"age": "18",
"public": "true"
}
我們開始搜索,預期是public_user1搜索pub_index可以返回一條結果,搜索sec_index無結果。而admin用戶搜索pub_index可以返回兩條結果,搜索sec_index可以返回一條結果。
GET pub_index/_search
{"size": 10,"query": {"match_all": {}}}
{
"took" : 4,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 2.0,
"hits" : [
{
"_index" : "pub_index",
"_id" : "xBnh0okBxCORqeQrGobf",
"_score" : 2.0,
"_source" : {
"name" : "robert",
"age" : "30",
"public" : "true"
}
}
]
}
}
?
GET pub_index/_search
{"size": 10,"query": {"match_all": {}}}
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "pub_index",
"_id" : "xBnh0okBxCORqeQrGobf",
"_score" : 1.0,
"_source" : {
"name" : "robert",
"age" : "30",
"public" : "true"
}
},
{
"_index" : "pub_index",
"_id" : "xRnh0okBxCORqeQrMobq",
"_score" : 1.0,
"_source" : {
"name" : "mike",
"age" : "55",
"public" : "false"
}
}
]
}
}
?
GET sec_index/_search
{"size": 10,"query": {"match_all": {}}}
{
"error" : {
"root_cause" : [
{
"type" : "security_exception",
"reason" : "no permissions for [indices:data/read/search] and User [name=public_user1, backend_roles=[], requestedTenant=null]"
}
],
"type" : "security_exception",
"reason" : "no permissions for [indices:data/read/search] and User [name=public_user1, backend_roles=[], requestedTenant=null]"
},
"status" : 403
}
?
GET sec_index/_search
{"size": 10,"query": {"match_all": {}}}
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "sec_index",
"_id" : "xhnh0okBxCORqeQrTYbM",
"_score" : 1.0,
"_source" : {
"name" : "jane",
"age" : "18",
"public" : "true"
}
}
]
}
}
搜索引擎的細粒度權限管控功能通過支持文檔級別和字段級別的權限控制,為企業提供了強大的數據安全和管理能力。
這種精確的權限配置不僅幫助企業保護敏感信息,還能夠在多租戶環境和個性化數據訪問需求下提供高效的解決方案。通過細粒度的權限管控,企業可以確保數據的安全性、隱私性和合規性,同時實現靈活的業務支持。