异步搜索安全
您可以将安全插件与异步搜索结合使用,以限制非管理员用户只能执行特定操作。例如,您可能希望某些用户只能提交或删除异步搜索,而另一些用户只能查看结果。
所有异步搜索索引都作为系统索引受到保护。只有超级管理员用户或拥有传输层安全性 (TLS) 证书的管理员用户才能访问系统索引。更多信息,请参阅 系统索引。
基本权限
作为管理员用户,您可以使用安全插件,根据用户需要访问的 API 操作,为其分配特定的权限。有关支持的 API 操作列表,请参阅 异步搜索。
安全插件有两个内置角色,涵盖了大多数异步搜索用例:asynchronous_search_full_access 和 asynchronous_search_read_access。有关每个角色的描述,请参阅 预定义角色。
如果这些角色不能满足您的需求,可以混合搭配单独的异步搜索权限以适应您的用例。每个操作都对应 REST API 中的一个操作。例如,cluster:admin/opensearch/asynchronous_search/delete 权限允许您删除之前提交的异步搜索。
关于异步搜索与细粒度访问控制的说明
按照设计,异步搜索插件会从目标索引提取数据,并将数据存储在单独的索引中,以便具有适当权限的用户可以访问搜索结果。虽然拥有 asynchronous_search_read_access 或 cluster:admin/opensearch/asynchronous_search/get 权限的用户本身无法提交异步搜索请求,但该用户可以使用关联的搜索 ID 来获取和查看搜索结果。文档级安全性 (DLS) 和 字段级安全性 (FLS) 访问控制旨在保护目标索引中的数据。但是,一旦数据存储在此索引之外,拥有这些访问权限的用户就能够使用搜索 ID 来获取和查看异步搜索结果,其中可能包含在目标索引中被 DLS 和 FLS 访问控制所隐藏的数据。
为了降低非预期用户查看可能描述索引的搜索结果的风险,我们建议管理员启用基于角色的访问控制,并在为预期用户组分配权限时牢记此类设计要素。详情请参阅 按后端角色限制访问。
(高级) 按后端角色限制访问
使用后端角色,可以基于角色配置对异步搜索的细粒度访问。例如,组织中的不同部门用户可以查看其所属部门拥有的异步搜索。
首先,请确保您的用户拥有适当的 后端角色。后端角色通常来自 LDAP 服务器 或 SAML 提供商。但是,如果您使用内部用户数据库,可以使用 REST API 手动添加。
现在,当用户在 UDB-SX Dashboards 中查看异步搜索资源(或进行 REST API 调用)时,他们只能看到由拥有其后端角色子集的用户提交的异步搜索。
例如,考虑两个用户:judy 和 elon。
judy 拥有一个 IT 后端角色:
PUT _plugins/_security/api/internalusers/judy
{
"password": "judy",
"backend_roles": [
"IT"
],
"attributes": {}
}
elon 拥有一个 admin 后端角色:
PUT _plugins/_security/api/internalusers/elon
{
"password": "elon",
"backend_roles": [
"admin"
],
"attributes": {}
}
judy 和 elon 都拥有异步搜索的完全访问权限:
PUT _plugins/_security/api/rolesmapping/async_full_access
{
"backend_roles": [],
"hosts": [],
"users": [
"judy",
"elon"
]
}
由于他们拥有不同的后端角色,judy 提交的异步搜索将对 elon 不可见,反之亦然。
judy 需要至少拥有 elon 所有角色的超集,才能看到 elon 的异步搜索。
例如,如果 judy 有五个后端角色,而 elon 拥有其中一个角色,那么 judy 可以看到 elon 提交的异步搜索,但 elon 看不到 judy 提交的异步搜索。这意味着 judy 可以对 elon 提交的异步搜索执行 GET 和 DELETE 操作,反之则不行。
如果所有用户都没有任何后端角色,则三者都能看到彼此的搜索。
例如,考虑三个用户:judy、elon 和 jack。
judy、elon 和 jack 都没有设置后端角色:
PUT _plugins/_security/api/internalusers/judy
{
"password": "judy",
"backend_roles": [],
"attributes": {}
}
PUT _plugins/_security/api/internalusers/elon
{
"password": "elon",
"backend_roles": [],
"attributes": {}
}
PUT _plugins/_security/api/internalusers/jack
{
"password": "jack",
"backend_roles": [],
"attributes": {}
}
judy 和 elon 都拥有异步搜索的完全访问权限:
PUT _plugins/_security/api/rolesmapping/async_full_access
{
"backend_roles": [],
"hosts": [],
"users": ["judy","elon"]
}
jack 拥有对异步搜索结果的读取权限:
PUT _plugins/_security/api/rolesmapping/async_read_access
{
"backend_roles": [],
"hosts": [],
"users": ["jack"]
}
由于所有用户都没有后端角色,他们将能够看到彼此的异步搜索。因此,如果 judy 提交了一个异步搜索,拥有完全访问权限的 elon 将能够看到该搜索。拥有读取权限的 jack 也将能够看到 judy 的异步搜索。