- How security works on ES
- User authentication
- Realms
- Internal and external realms
- Realm chains
- 将授权委托给另一个领域
- User authorization and access control
- Role-based access control
- Attribute-based access control
- 安全权限
- 集群级别
- 权限优先级
- 索引级别
- 权限优先级
- Run as privilege
- 应用程序权限
- Node/client authentication and channel encryption
- Auditing
Elastic Stack 安全功能提供了在多个级别上保护 Elastic 集群的方法:
- User authentication 用户认证
- User authorization and access control 用户授权和访问控制
- Node/client authentication and channel encryption 节点/客户端身份验证和信道加密
- Auditing 审计
用户身份验证识别。要获得对受限资源的访问权限,用户必须通过密码、凭据或其他方式(通常称为身份验证令牌)证明其身份。
Elastic Stack 通过识别命中集群的请求背后的用户并验证他们是否是他们声称的身份来验证用户身份。 身份验证过程由一个或多个称为领域的身份验证服务处理。
您可以使用本机支持来管理和验证用户,或与外部用户管理系统(如 LDAP 和 Active Directory)集成。
Elastic Stack 安全功能提供内置领域,例如 native、ldap、active_directory、pki、file 和 saml。如果没有一个内置领域满足您的需求,您还可以构建自己的自定义领域并将其插入 Elastic Stack。
启用安全功能后,根据您配置的领域,您必须将您的用户凭据附加到发送到 Elasticsearch 的请求中。例如,当使用支持用户名和密码的领域时,您可以简单地将基本身份验证标头附加到请求中。
安全功能提供两种服务:令牌服务和 api 密钥服务。您可以使用这些服务来交换令牌或密钥的当前身份验证。然后可以将此令牌或密钥用作验证新请求的凭据。当为 HTTP 启用 TLS/SSL 时,这些服务默认启用。
RealmsElastic 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 realmsRealm 类型大致可以分为两类:
-
Internal
Elasticsearch 内部的领域,不需要与外部各方进行任何通信。 它们完全由安全功能管理。 每个内部领域类型最多只能配置一个领域。 X-Pack 安全提供两种内部领域类型:
native
和file
。 -
External
需要与 Elasticsearch 外部的各方/组件交互的领域,通常使用企业级身份管理系统。 与内部领域不同,可以有任意数量的外部领域——每个都有自己独特的名称和配置。 安全功能提供以下外部领域类型:
ldap
、active_directory
、saml
、kerberos
和pki
。
领域存在于领域链中。它本质上是已配置领域(通常是各种类型)的优先列表。列表的顺序决定了查询领域的顺序。您应该确保每个配置的领域都有不同的顺序设置。如果两个或多个领域具有相同的顺序,它们将按名称顺序进行处理。在身份验证过程中,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 theproducts
index: 产品索引的读取权限manage
privilege on the cluster: 管理集群上的权限run_as
privilege onjohn
user: john 用户的 run_as 权限read
privilege on documents that match query X: 对匹配查询 X 的文档的读取权限read
privilege oncredit_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_snapshotmanage_securitymanage_ccrmanage_tokenmanage_ilmmanage_samlmanage_index_templatesmanage_mlmanage_ingest_pipelinesmanage_pipelinemanage_rollupmanage_watchermonitormonitor_mlmonitor_rollupmonitor_watcherread_ccrread_ilmtransport_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_metadata
This privilege is primarily available for use by Kibana users.对索引元数据的只读访问(别名、别名存在、获取索引、存在、字段映射、映射、搜索分片、type exists、验证、warmers、settings、ilm)。 此权限主要供 Kibana 用户使用。write
对文档执行所有写入操作的权限,包括索引、更新和删除文档以及执行批量操作的权限。 还授予对更新映射操作的访问权限。
权限优先级
高–>低Allcreatecreate_indexdeletedelete_indexindexmanagemanage_follow_indexmanage_leader_indexmanage_ilmmonitorreadread_cross_clusterview_index_metadatawrite
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.