Realm 链

编辑

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

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

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

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

以下代码片段配置了一个 realm 链,该链启用了 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 设置中指定的顺序尝试每个领域。通过主体检索用户 - 用户必须在身份验证授权领域中具有相同的用户名。如果在任何授权领域中都找不到该用户,则身份验证失败。

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

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