安全域

编辑

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

例如,单个用户配置文件与用户关联,从而可以在各个领域之间共享首选项、通知和其他用户数据。用户可以查看来自跨领域的异步搜索请求或滚动搜索的结果。如果用户具有必要的权限,他们还可以查看和管理跨领域的 API 密钥。

跨域资源共享

编辑

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

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

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

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

跨领域管理角色

编辑

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

配置安全域

编辑

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

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

  • 重复的用户配置文件
  • 根据进行身份验证的节点的配置,资源的所有权不同

要配置安全域

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

    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 密钥的原始创建者在内的用户将失去所有权。
  • 异步搜索上下文等资源由最初创建它们的用户拥有。

与其删除领域,不如考虑禁用它们并将其保留为安全域的一部分。在任何情况下,跨领域的资源共享仅在具有相同用户名的用户之间才有可能。