领域链编辑

领域 存在于一个_领域链_中。它本质上是一个已配置领域(通常是各种类型)的优先级列表。领域按升序进行查询(也就是说,首先查询 order 值最低的领域)。您必须确保每个已配置的领域都有一个不同的 order 设置。如果两个或多个领域的 order 相同,则节点将无法启动。

在身份验证过程中,Elastic Stack 安全功能会依次查询并尝试对请求进行身份验证。一旦其中一个领域成功验证了请求,则身份验证就被视为成功。经过身份验证的用户将与请求相关联,然后进入授权阶段。如果一个领域无法验证请求,则会查询链中的下一个领域。如果链中的所有领域都无法验证请求,则身份验证被视为失败,并返回身份验证错误(作为 HTTP 状态代码 401)。

某些系统(例如 Active Directory)在连续几次登录尝试失败后会有一个临时锁定时间。如果多个领域中存在相同的用户名,则可能会发生意外的帐户锁定。有关更多信息,请参阅 用户经常被 Active Directory 锁定

默认领域链包含 filenative 领域。要显式配置领域链,请在 elasticsearch.yml 文件中指定该链。如果您的领域链不包含 filenative 领域,或者没有显式禁用它们,则 filenative 领域将按此顺序自动添加到领域链的开头。要退出自动行为,您可以使用 orderenabled 设置显式配置 filenative 领域。

以下代码段配置了一个领域链,该链启用了 file 领域以及两个 LDAP 领域和一个 Active Directory 领域,但禁用了 native 领域。

xpack.security.authc.realms:
  file.file1:
      order: 0

  ldap.ldap1:
      order: 1
      enabled: false
      url: 'url_to_ldap1'
      ...

  ldap.ldap2:
      order: 2
      url: 'url_to_ldap2'
      ...

  active_directory.ad1:
      order: 3
      url: 'url_to_ad'

  native.native1:
      enabled: false

如上所示,每个领域都有一个唯一的名称来标识它。每种类型的领域都规定了自己的必需和可选设置集。也就是说,有一些 对所有领域都通用的设置

将授权委托给另一个领域编辑

某些领域能够在内部执行_身份验证_,但将角色的查找和分配(即_授权_)委托给另一个领域。

例如,您可能希望使用 PKI 领域通过 TLS 客户端证书对用户进行身份验证,然后在 LDAP 领域中查找该用户,并使用其 LDAP 组分配来确定其在 Elasticsearch 中的角色。

任何支持检索用户(无需其凭据)的领域都可以用作_授权领域_(也就是说,其名称可以作为 authorization_realms 列表中的值之一出现)。有关哪些领域支持此功能的进一步说明,请参阅 在没有身份验证的情况下查找用户

对于支持此功能的领域,可以通过在身份验证领域上配置 authorization_realms 设置来启用它。检查每个领域的 支持的设置 列表,以查看它们是否支持 authorization_realms 设置。

如果为领域启用了委托授权,它将以其标准方式(包括相关的缓存)对用户进行身份验证,然后在已配置的授权领域列表中查找该用户。它会按照它们在 authorization_realms 设置中指定的顺序尝试每个领域。用户通过主体进行检索 - 用户在_身份验证_和_授权领域_中必须具有相同的用户名。如果在任何授权领域中都找不到该用户,则身份验证失败。

有关更多详细信息,请参阅 配置授权委托

委托授权要求您拥有包含自定义身份验证和授权领域的 订阅