安全域
编辑安全域
编辑安全域是一种将多个领域分组到同一域的方法,以便 Elastic Stack 可以识别单个用户何时使用这些领域进行身份验证。用户可以使用域组中的任何领域进行身份验证,并且无论他们使用哪个领域进行身份验证,都可以访问相同的资源集。
例如,单个用户配置文件与用户关联,从而可以在各个领域之间共享首选项、通知和其他用户数据。用户可以查看来自跨领域的异步搜索请求或滚动搜索的结果。如果用户具有必要的权限,他们还可以查看和管理跨领域的 API 密钥。
跨域资源共享
编辑Elasticsearch 中的某些类型的资源由单个用户拥有,例如异步搜索上下文、API 密钥和用户配置文件。当用户创建资源时,Elasticsearch 会捕获用户的用户名和领域信息作为资源元数据的一部分。同样,如果用户更新资源(例如 API 密钥),Elasticsearch 会自动重新捕获用户当前的领域信息。
当用户稍后尝试访问资源时,Elasticsearch 会将捕获的用户名和领域信息与访问用户的用户名和领域信息进行比较。除非领域和用户名都匹配,否则 Elasticsearch 将拒绝访问。如果 Elasticsearch 检测到来自两个不同领域的用户名正在尝试访问资源,则 Elasticsearch 会假定这些用户是不同的,并且不允许这些用户之间共享资源。
但是,在某些情况下,同一用户可以使用多个领域进行身份验证,并且需要在各个领域之间共享同一组资源。例如,LDAP 领域和SAML 领域可以由同一目录服务支持。此外,授权委托允许一个领域将授权委托给另一个领域。如果两个领域使用相同的用户名对用户进行身份验证,那么从资源所有权的角度来看,将这些用户视为同一用户是合理的。
安全域通过将这些领域分组到同一域下来实现跨领域资源共享。Elasticsearch 始终强制执行与当前已通过身份验证的用户关联的权限,这在安全域中仍然适用。当资源共享需要时,安全域不会绕过用户授权。例如,用户需要 manage_own_api_key
权限才能管理自己的 API 密钥。如果该用户在使用一个领域进行身份验证时没有此权限,则在使用另一个领域进行身份验证时将无法管理 API 密钥。
配置安全域
编辑必须在集群中的所有节点上一致地配置安全域。不一致的配置可能导致以下问题:
- 重复的用户配置文件
- 根据进行身份验证的节点的配置,资源的所有权不同
要配置安全域
-
在
xpack.security.authc.domains
命名空间中,将安全域配置添加到elasticsearch.yml
中指定的领域必须在
elasticsearch.yml
中定义,但不需要启用。 -
重新启动 Elasticsearch。
如果域配置无效,则 Elasticsearch 可能会启动失败,例如:
- 同一领域配置在多个域下。
- 任何未定义的领域、合成领域或保留领域被配置为在某个域下。
-
在执行与安全域相关的操作(包括创建和管理用户配置文件、API 密钥和异步搜索等资源)之前,请在集群中的所有节点上应用相同的配置。
将领域添加到安全域时,请避免在使用新添加的领域进行身份验证,直到更改完全应用于所有节点。
从安全域中删除领域
编辑从安全域中删除领域可能会导致意外行为,因此不建议这样做。在删除之前创建或更新的资源可能会根据资源类型由不同的用户拥有。
与其删除领域,不如考虑禁用它们并将其保留为安全域的一部分。在任何情况下,跨领域的资源共享仅在具有相同用户名的用户之间才有可能。