异步搜索安全性
您可以使用安全插件配合异步搜索,限制非管理员用户执行特定操作。例如,您可能希望某些用户只能提交或删除异步搜索,而另一些用户只能查看结果。
所有异步搜索索引都作为系统索引受到保护。只有超级管理员用户或拥有传输层安全 (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 手动添加。
现在,当用户在 OpenSearch Dashboards 中查看异步搜索资源(或进行 REST API 调用)时,他们只能看到由具有后端角色子集的用户提交的异步搜索。例如,考虑两个用户:judy
和 elon
。
judy
具有 IT 后端角色
PUT _plugins/_security/api/internalusers/judy
{
"password": "judy",
"backend_roles": [
"IT"
],
"attributes": {}
}
elon
具有管理员后端角色
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
的异步搜索。