Link Search Menu Expand Document Documentation Menu

异步搜索安全性

您可以使用安全插件配合异步搜索,限制非管理员用户执行特定操作。例如,您可能希望某些用户只能提交或删除异步搜索,而另一些用户只能查看结果。

所有异步搜索索引都作为系统索引受到保护。只有超级管理员用户或拥有传输层安全 (TLS) 证书的管理员用户才能访问系统索引。更多信息请参阅系统索引

基本权限

作为管理员用户,您可以使用安全插件根据用户需要访问的 API 操作为其分配特定权限。有关支持的 API 操作列表,请参阅异步搜索

安全插件有两个内置角色,涵盖了大多数异步搜索用例:asynchronous_search_full_accessasynchronous_search_read_access。有关每个角色的描述,请参阅预定义角色

如果这些角色不符合您的需求,您可以混合搭配各个异步搜索权限以适应您的用例。每个操作都对应 REST API 中的一个操作。例如,cluster:admin/opensearch/asynchronous_search/delete 权限允许您删除之前提交的异步搜索。

关于异步搜索和精细访问控制的注意事项

从设计上讲,异步搜索插件会从目标索引中提取数据,并将数据存储在一个单独的索引中,以便具有适当权限的用户可以访问搜索结果。尽管拥有 asynchronous_search_read_accesscluster:admin/opensearch/asynchronous_search/get 权限的用户无法提交异步搜索请求本身,但该用户可以使用关联的搜索 ID 获取和查看搜索结果。文档级安全 (DLS) 和字段级安全 (FLS) 访问控制旨在保护目标索引中的数据。但一旦数据存储在该索引之外,拥有这些访问权限的用户就可以使用搜索 ID 获取和查看异步搜索结果,其中可能包含目标索引中被 DLS 和 FLS 访问控制隐藏的数据。

为了减少意外用户查看可能描述索引的搜索结果的可能性,我们建议管理员启用基于角色的访问控制,并在向目标用户组分配权限时牢记这些设计元素。有关详细信息,请参阅按后端角色限制访问

(高级) 按后端角色限制访问

使用后端角色配置基于角色的异步搜索的精细访问。例如,组织中不同部门的用户可以查看由其自己部门拥有的异步搜索。

首先,请确保您的用户拥有适当的后端角色。后端角色通常来自 LDAP 服务器SAML 提供商。但是,如果您使用内部用户数据库,则可以使用 REST API 手动添加

现在,当用户在 OpenSearch Dashboards 中查看异步搜索资源(或进行 REST API 调用)时,他们只能看到由具有后端角色子集的用户提交的异步搜索。例如,考虑两个用户:judyelon

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": {}
}

judyelon 都对异步搜索具有完全访问权限

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 操作,反之则不行。

如果所有用户都没有设置任何后端角色,那么三者都将能够看到彼此的搜索。

例如,考虑三个用户:judyelonjack

judyelonjack 均未设置后端角色

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": {}
}

judyelon 都对异步搜索具有完全访问权限

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 的异步搜索。

剩余 350 字符

有问题?

想贡献?