安全域编辑

安全域是一种将多个领域分组到同一个域下的方法,以便 Elastic Stack 能够识别单个用户何时使用这些领域进行身份验证。用户可以使用域组中的任何领域进行身份验证,并且无论使用哪个领域进行身份验证,都可以访问同一组资源。

例如,单个用户配置文件与一个用户相关联,从而能够跨领域共享偏好设置、通知和其他用户数据。用户可以跨领域查看异步搜索请求或滚动搜索的结果。如果用户拥有必要的权限,他们还可以跨领域查看和管理 API 密钥。

跨域资源共享编辑

Elasticsearch 中的某些类型的资源归单个用户所有,例如异步搜索上下文API 密钥用户配置文件。当用户创建资源时,Elasticsearch 会捕获用户的用户名和领域信息作为资源元数据的一部分。同样,如果用户更新资源(例如 API 密钥),Elasticsearch 会自动重新捕获用户的当前领域信息。

当用户稍后尝试访问资源时,Elasticsearch 会将捕获的用户名和领域信息与访问用户的用户名和领域信息进行比较。除非领域和用户名都匹配,否则 Elasticsearch 将拒绝访问。如果 Elasticsearch 检测到来自两个不同领域的用户名试图访问资源,则 Elasticsearch 会假定这些用户是不同的,并且不允许在这些用户之间共享资源。

但是,在某些情况下,同一个用户可以使用多个领域进行身份验证,并且需要跨领域共享同一组资源。例如,LDAP 领域SAML 领域可以由同一个目录服务支持。此外,授权委托允许一个领域将授权委托给另一个领域。如果两个领域都使用相同的用户名对用户进行身份验证,则从资源所有权的角度来看,将这些用户视为同一个用户是合理的。

安全域通过将这些领域分组到同一个域下来实现跨领域资源共享。Elasticsearch 始终强制执行与当前经过身份验证的用户关联的权限,这在安全域中仍然适用。当资源共享需要时,安全域不会绕过用户授权。例如,用户需要 manage_own_api_key 权限才能管理自己的 API 密钥。如果该用户在使用一个领域进行身份验证时没有此权限,则在使用另一个领域进行身份验证时将无法管理 API 密钥。

跨领域管理角色编辑

Elasticsearch 提供了多种方法来跨领域一致地应用角色。例如,您可以使用授权委托来确保为用户分配来自多个领域的相同角色。您还可以手动配置由同一个目录服务支持的多个领域。尽管可以在使用不同领域进行身份验证时为同一个用户配置不同的角色,但我们建议这样做。

配置安全域编辑

安全域是一项高级功能,需要仔细配置。配置错误或误用可能会导致意外行为。

必须在集群中的所有节点上始终如一地配置安全域。不一致的配置可能会导致以下问题,例如

  • 重复的用户配置文件
  • 资源的不同所有权,具体取决于身份验证节点的配置

要配置安全域,请执行以下操作:

  1. 将安全域配置添加到 elasticsearch.yml 中的 xpack.security.authc.domains 命名空间

    xpack:
      security:
        authc:
          domains:
            my_domain:
              realms: [ 'default_native', 'saml1' ] 

    此配置定义了一个名为 my_domain 的安全域,其中包含两个名为 default_nativesaml1 的领域。

    指定的领域必须在 elasticsearch.yml 中定义,但不需要启用。

    文件领域本机领域分别作为 default_filedefault_native 自动启用,无需任何显式配置。即使未在 elasticsearch.yml 中显式定义这些领域,您也可以在域下列出它们。

  2. 重新启动 Elasticsearch。

    如果域配置无效,Elasticsearch 可能无法启动,例如

    • 在多个域下配置了相同的领域。
    • 任何未定义的领域、合成领域或保留领域都被配置为属于某个域。
  3. 在执行与安全域相关的操作(包括创建和管理资源,例如用户配置文件API 密钥异步搜索)之前,请在集群中的所有节点上应用相同的配置。

    将领域添加到安全域时,请避免使用新添加的领域进行身份验证,直到更改完全应用于所有节点。

从安全域中删除领域编辑

从安全域中删除领域可能会导致意外行为,因此不建议这样做。根据资源类型,删除之前创建或更新的资源可能归不同的用户所有

  • 用户配置文件归上次激活该配置文件的用户所有。对于其领域不再与所有者用户位于同一个域中的用户,将在下次调用激活用户配置文件 API 时为其创建一个新的用户配置文件。
  • API 密钥归最初创建或上次更新它的用户所有。如果用户的领域不再与当前 API 密钥所有者的领域位于同一个域中,则包括 API 密钥的原始创建者在内的用户将失去所有权。
  • 异步搜索上下文等资源归最初创建它们的用户所有。

与其删除领域,不如考虑禁用它们并将它们保留在安全域中。在任何情况下,只有用户名相同的用户才能跨领域共享资源。