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