【ES实战】ES上的安全性运行方式

How security works on ES


Elasticsearch 集群通常由许多活动部件组成。 有构成集群的 Elasticsearch 节点,通常是 Logstash 实例、Kibana 实例、Beats 代理和客户端,都与它进行通信。 保护此类集群具有许多方面和层次,这不足为奇。

Elastic Stack 安全功能提供了在多个级别上保护 Elastic 集群的方法:

  • User authentication 用户认证
  • User authorization and access control 用户授权和访问控制
  • Node/client authentication and channel encryption 节点/客户端身份验证和信道加密
  • Auditing 审计

User authentication

用户身份验证识别。要获得对受限资源的访问权限,用户必须通过密码、凭据或其他方式(通常称为身份验证令牌)证明其身份。

Elastic Stack 通过识别命中集群的请求背后的用户并验证他们是否是他们声称的身份来验证用户身份。 身份验证过程由一个或多个称为领域的身份验证服务处理。

您可以使用本机支持来管理和验证用户,或与外部用户管理系统(如 LDAP 和 Active Directory)集成。

Elastic Stack 安全功能提供内置领域,例如 native、ldap、active_directory、pki、file 和 saml。如果没有一个内置领域满足您的需求,您还可以构建自己的自定义领域并将其插入 Elastic Stack。

启用安全功能后,根据您配置的领域,您必须将您的用户凭据附加到发送到 Elasticsearch 的请求中。例如,当使用支持用户名和密码的领域时,您可以简单地将基本身份验证标头附加到请求中。

安全功能提供两种服务:令牌服务api 密钥服务。您可以使用这些服务来交换令牌或密钥的当前身份验证。然后可以将此令牌或密钥用作验证新请求的凭据。当为 HTTP 启用 TLS/SSL 时,这些服务默认启用。

Realms

Elastic Stack 安全功能使用领域和一个或多个 基于令牌的身份验证服务对用户进行身份验证 .

realm用于根据身份验证令牌解析和验证用户。 安全功能提供以下内置领域:

  • native

    用户存储在专用 Elasticsearch 索引中的内部领域。 此领域支持用户名和密码形式的身份验证令牌,并且在没有明确配置领域时默认可用。 用户通过 用户管理 API 进行管理。See Native user authentication.

  • ldap

    使用外部 LDAP 服务器对用户进行身份验证的领域。 此领域支持用户名和密码形式的身份验证令牌,并且需要显式配置才能使用。See LDAP user authentication.

  • active_directory

    使用外部 Active Directory 服务器对用户进行身份验证的领域。 使用此领域,用户通过用户名和密码进行身份验证。See Active Directory user authentication.

  • pki

    使用公钥基础设施 (PKI) 对用户进行身份验证的领域。 此领域与 SSL/TLS 结合使用,并通过客户端 X.509 证书的专有名称 (DN) 识别用户。See PKI user authentication.

  • file

    一个内部领域,其中用户在 Elasticsearch 集群中每个节点上存储的文件中定义。 此领域支持用户名和密码形式的身份验证令牌,并且始终可用。See File-based user authentication.

  • saml

    使用 SAML 2.0 Web SSO 协议促进身份验证的领域。 此领域旨在支持通过 Kibana 进行的身份验证,不适合在 REST API 中使用。See SAML authentication.

  • kerberos

    使用 Kerberos 身份验证对用户进行身份验证的领域。 基于 Kerberos 票证对用户进行身份验证。See Kerberos authentication.

安全功能还支持自定义领域。 如果您需要与另一个身份验证系统集成,您可以构建一个自定义领域插件。

For more information, see Integrating with other authentication systems.

Internal and external realms

Realm 类型大致可以分为两类:

  • Internal

    Elasticsearch 内部的领域,不需要与外部各方进行任何通信。 它们完全由安全功能管理。 每个内部领域类型最多只能配置一个领域。 X-Pack 安全提供两种内部领域类型:nativefile

  • External

    需要与 Elasticsearch 外部的各方/组件交互的领域,通常使用企业级身份管理系统。 与内部领域不同,可以有任意数量的外部领域——每个都有自己独特的名称和配置。 安全功能提供以下外部领域类型:ldapactive_directorysamlkerberospki

Realm chains

领域存在于领域链中。它本质上是已配置领域(通常是各种类型)的优先列表。列表的顺序决定了查询领域的顺序。您应该确保每个配置的领域都有不同的顺序设置。如果两个或多个领域具有相同的顺序,它们将按名称顺序进行处理。在身份验证过程中,X-Pack 安全性将咨询并尝试一次对一个领域的请求进行身份验证。一旦其中一个领域成功验证了请求,则认为验证成功,并且经过验证的用户将与请求相关联(然后将进入授权阶段)。如果一个领域无法验证请求,则将咨询链中的下一个在线领域。如果链中的所有领域都无法对请求进行身份验证,则认为身份验证不成功,并且将返回身份验证错误(如 HTTP 状态代码 401)。

默认领域链包含native领域和file领域。 要显式配置领域链,请在 elasticsearch.yml 中指定链。 配置领域链时,只有您指定的领域用于身份验证。 要使用native领域和file领域,您必须将它们包含在链中。

以下片段配置了一个领域链,其中包括native领域和file领域,以及两个 LDAP 领域和一个 Active Directory 领域。

xpack.security.authc:
  realms:

    file:
      type: file
      order: 0

    native:
      type: native
      order: 1

    ldap1:
      type: ldap
      order: 2
      enabled: false
      url: 'url_to_ldap1'
      ...

    ldap2:
      type: ldap
      order: 3
      url: 'url_to_ldap2'
      ...

    ad1:
      type: active_directory
      order: 4
      url: 'url_to_ad'

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

将授权委托给另一个领域

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

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

任何支持检索用户(不需要他们的凭据)的领域都可以用作授权领域(也就是说,它的名称可能显示为 authentication_realms 列表中的值之一)。有关哪些领域支持此功能的进一步说明,请参阅代表其他用户提交请求。

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

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

User authorization and access control

用户授权认证和访问控制

Elastic Stack 安全功能添加了授权,这是确定是否允许传入请求背后的用户执行请求的过程。

此过程在用户被成功识别和验证后发生。

Role-based access control

安全功能提供基于角色的访问控制 (RBAC) 机制,使您能够通过将权限分配给角色并将角色分配给用户或组来实现授权用户。
在这里插入图片描述

授权过程围绕以下结构展开:

  • Secured Resource

    访问受限的资源。 Indices、aliases、文documents、fields、users和 Elasticsearch 集群本身都是安全对象的示例。

  • Privilege

    用户可以对安全资源执行的一个或多个操作的命名组。 每个受保护的资源都有自己的一组可用权限。 例如,read 是一个索引权限,代表所有能够读取索引/存储数据的操作。 有关可用权限的完整列表,请参阅 安全权限

  • Permissions

    针对安全资源的一组一个或多个特权。 权限可以很容易地用文字描述,这里有几个例子:

    • read privilege on the products index: 产品索引的读取权限
    • manage privilege on the cluster: 管理集群上的权限
    • run_as privilege on john user: john 用户的 run_as 权限
    • read privilege on documents that match query X: 对匹配查询 X 的文档的读取权限
    • read privilege on credit_card field: 对 credit_card 字段的读取权限
  • Role

    A named set of permissions 一组命名的权限

  • User

    The authenticated user. 经过身份验证的用户。

  • Group

    用户所属的一个或多个组。 某些领域不支持组,例如本机、文件或 PKI 领域。

角色具有唯一的名称并标识一组权限,这些权限可转换为对资源的权限。 您可以将用户或组与任意数量的角色相关联。 当您将角色映射到组时,该组中用户的角色是分配给该组的角色和分配给该用户的角色的组合。 同样,用户拥有的总权限集由其所有角色的权限联合定义。

Attribute-based access control

基于属性的访问控制

安全功能还提供基于属性的访问控制 (ABAC) 机制,使您能够使用属性来限制对搜索查询和聚合中的文档的访问。 例如,您可以为用户和文档分配属性,然后在角色定义中实施访问策略。 具有该角色的用户只有在具有所有必需属性时才能阅读特定文档。

For more information, see Document-level attribute-based access control with X-Pack 6.1.

安全权限
集群级别
权限值描述
all所有集群管理操作,如快照、节点关闭/重启、设置更新、重新路由或管理用户和角色。
create_snapshot为现有存储库创建快照的权限。 还可以列出和查看现有存储库和快照的详细信息。
manage建立在 monitor 之上,并添加了更改集群中值的集群操作。 这包括快照、更新设置和重新路由。 它还包括获取快照和恢复状态。 此权限不包括管理安全性的能力。
manage_ccr所有与管理follower索引和自动follower模式相关的跨集群复制操作。 它还包括授予管理follower索引和自动follower模式所需的权限的权限。 此权限仅在包含follower索引的集群上是必需的。
manage_ilm与管理策略相关的所有索引生命周期管理操作
manage_index_templates索引模板上的所有操作。
manage_ingest_pipelines摄取节点管道上的所有操作。
manage_ml所有机器学习操作,例如创建和删除数据馈送、作业和模型快照。在 6.2 版之前创建或在禁用安全功能时创建的数据馈送以具有提升权限的系统用户身份运行,包括读取所有索引的权限。 较新的数据馈送以创建或更新它们的用户的安全角色运行。
manage_pipeline摄取管道上的所有操作。
manage_rollup所有汇总操作,包括创建、启动、停止和删除汇总作业。
manage_saml允许使用内部 Elasticsearch API 来代表其他用户启动和管理 SAML 身份验证。
manage_security所有与安全相关的操作,例如对用户和角色的 CRUD 操作以及缓存清除。
manage_token由 Elasticsearch 令牌服务生成的令牌上的所有安全相关操作。
manage_watcher所有观察者操作,例如放置观察、执行、激活或确认。在 6.1 版之前创建或在禁用安全功能时创建的观察作为具有提升权限的系统用户运行,包括读取和写入所有索引的权限。 较新的观察者使用创建或更新它们的用户的安全角色运行。
monitor所有集群只读操作,如集群健康和状态、热线程、节点信息、节点和集群统计信息以及待处理的集群任务。
monitor_ml所有只读机器学习操作,例如获取有关数据馈送、作业、模型快照或结果的信息。
monitor_rollup所有只读汇总操作,例如查看历史和当前运行的汇总作业列表及其功能。
monitor_watcher所有只读观察者操作,例如获取观察者和观察者统计信息。
read_ccr所有只读跨集群复制操作,例如获取集群中leader索引的索引和元数据信息。 它还包括检查用户是否具有遵循leader索引的适当权限的权限。 此权限仅在包含leader索引的集群上是必需的。
read_ilm所有只读索引生命周期管理操作,例如获取策略和检查索引生命周期管理的状态
transport_client传输客户端连接所需的所有权限。 远程集群需要启用 跨集群搜索
权限优先级
–>–>–>
Allmanagecreate_snapshot
manage_securitymanage_ccr
manage_tokenmanage_ilm
manage_samlmanage_index_templates
manage_ml
manage_ingest_pipelines
manage_pipeline
manage_rollup
manage_watcher
monitormonitor_ml
monitor_rollup
monitor_watcher
read_ccr
read_ilm
transport_client
索引级别
权限值描述
all对索引的任何操作
create索引文档的特权。 还授予对更新映射操作的访问权限。此权限不会将索引操作限制为创建文档,而是将 API 使用限制为index API。 index API 允许用户覆盖以前索引的文档。
create_index创建索引的权限。 创建索引请求可能包含要在创建后添加到索引的别名。 在这种情况下,请求也需要对索引和别名名称的“管理”权限。
delete删除文档的权限。
delete_index删除索引的权限。
index索引和更新文档的特权。 还授予对更新映射操作的访问权限。
manage所有“监控”权限以及索引管理(别名、分析、缓存清除、关闭、删除、存在、刷新、映射、打开、强制合并、刷新、设置、搜索分片、模板、验证)。
manage_follow_index管理follower索引的生命周期所需的所有操作,包括创建follower索引、关闭它以及将其转换为常规索引。 此权限仅在包含follower索引的集群上是必需的。
manage_ilm与管理索引策略的执行相关的所有索引生命周期管理操作这包括重试策略和从索引中删除策略等操作。
manage_leader_index管理leader index的生命周期所需的所有操作,包括[forgetting a follower](https://www.elastic.co/guide/en/elasticsearch/reference/6.7/ccr-post-forget-follower. html). 此权限仅在包含leader索引的集群上是必需的。
monitor监控所需的所有操作(恢复、段信息、索引统计信息和状态)。
read对操作的只读访问 (count, explain, get, mget, get indexed scripts, more like this, multi percolate/search/termvector, percolate, scroll, clear_scroll, search, suggest, tv).
read_cross_cluster远程集群 对搜索操作的只读访问权限。
view_index_metadataThis privilege is primarily available for use by Kibana users.对索引元数据的只读访问(别名、别名存在、获取索引、存在、字段映射、映射、搜索分片、type exists、验证、warmers、settings、ilm)。 此权限主要供 Kibana 用户使用。
write对文档执行所有写入操作的权限,包括索引、更新和删除文档以及执行批量操作的权限。 还授予对更新映射操作的访问权限。
权限优先级
–>
Allcreate
create_index
delete
delete_index
index
managemanage_follow_index
manage_leader_index
manage_ilm
monitor
read
read_cross_cluster
view_index_metadata
write
Run as privilege

run_as 权限使经过身份验证的用户能够代表另一个用户提交请求。 该值可以是用户名或以逗号分隔的用户名列表。 (您也可以将用户指定为字符串数组或 YAML 序列。)For more information, see Submitting Requests on Behalf of Other Users.

权限代理?

应用程序权限

应用程序权限在 Elasticsearch 中进行管理,可以使用 has privilege API获取应用程序权限 API。 但是,它们不授予对 Elasticsearch 中任何操作或资源的访问权限。 它们的目的是使应用程序能够在 Elasticsearch 角色中表示和存储自己的权限模型。

要创建应用程序权限,请使用 添加应用程序权限 API。 然后,您可以将这些应用程序权限与角色相关联,如 定义角色 中所述。

Node/client authentication and channel encryption

安全功能支持配置 SSL/TLS 以保护进出集群和在集群内的通信通道。 这种支持说明了:

  • 对通过线路传输的数据进行加密

  • 基于证书的节点身份验证 - 防止未经授权的节点/客户端与集群建立连接。

For more information, see Encrypting Communications.

安全功能还使您能够配置 IP 过滤器,这可以被视为节点/客户端身份验证的轻量级机制。 通过 IP 过滤,您可以根据 IP 地址限制可以连接到集群的节点和客户端。 IP 过滤器配置提供 IP、子网和 DNS 域的白名单和黑名单。

Auditing

在处理任何安全系统时,设置审计跟踪机制至关重要。 审计跟踪记录系统中发生的各种活动/事件,使您能够在出现问题(例如安全漏洞)时分析和回溯过去的事件。

安全功能为集群中的所有节点提供此类审计跟踪功能。 您可以配置审核级别,以说明记录的事件类型。 这些事件包括身份验证尝试失败、用户访问被拒绝、节点连接被拒绝等。

For more information on auditing see Auditing security events.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

顧棟

若对你有帮助,望对作者鼓励一下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值