- Elasticsearch 指南其他版本
- 8.17 中的新功能
- Elasticsearch 基础
- 快速入门
- 设置 Elasticsearch
- 升级 Elasticsearch
- 索引模块
- 映射
- 文本分析
- 索引模板
- 数据流
- 摄取管道
- 别名
- 搜索您的数据
- 重新排名
- 查询 DSL
- 聚合
- 地理空间分析
- 连接器
- EQL
- ES|QL
- SQL
- 脚本
- 数据管理
- 自动缩放
- 监视集群
- 汇总或转换数据
- 设置高可用性集群
- 快照和还原
- 保护 Elastic Stack 的安全
- Watcher
- 命令行工具
- elasticsearch-certgen
- elasticsearch-certutil
- elasticsearch-create-enrollment-token
- elasticsearch-croneval
- elasticsearch-keystore
- elasticsearch-node
- elasticsearch-reconfigure-node
- elasticsearch-reset-password
- elasticsearch-saml-metadata
- elasticsearch-service-tokens
- elasticsearch-setup-passwords
- elasticsearch-shard
- elasticsearch-syskeygen
- elasticsearch-users
- 优化
- 故障排除
- 修复常见的集群问题
- 诊断未分配的分片
- 向系统中添加丢失的层
- 允许 Elasticsearch 在系统中分配数据
- 允许 Elasticsearch 分配索引
- 索引将索引分配过滤器与数据层节点角色混合,以在数据层之间移动
- 没有足够的节点来分配所有分片副本
- 单个节点上索引的分片总数已超过
- 每个节点的分片总数已达到
- 故障排除损坏
- 修复磁盘空间不足的数据节点
- 修复磁盘空间不足的主节点
- 修复磁盘空间不足的其他角色节点
- 启动索引生命周期管理
- 启动快照生命周期管理
- 从快照恢复
- 故障排除损坏的存储库
- 解决重复的快照策略失败问题
- 故障排除不稳定的集群
- 故障排除发现
- 故障排除监控
- 故障排除转换
- 故障排除 Watcher
- 故障排除搜索
- 故障排除分片容量健康问题
- 故障排除不平衡的集群
- 捕获诊断信息
- REST API
- API 约定
- 通用选项
- REST API 兼容性
- 自动缩放 API
- 行为分析 API
- 紧凑和对齐文本 (CAT) API
- 集群 API
- 跨集群复制 API
- 连接器 API
- 数据流 API
- 文档 API
- 丰富 API
- EQL API
- ES|QL API
- 功能 API
- Fleet API
- 图表探索 API
- 索引 API
- 别名是否存在
- 别名
- 分析
- 分析索引磁盘使用量
- 清除缓存
- 克隆索引
- 关闭索引
- 创建索引
- 创建或更新别名
- 创建或更新组件模板
- 创建或更新索引模板
- 创建或更新索引模板(旧版)
- 删除组件模板
- 删除悬挂索引
- 删除别名
- 删除索引
- 删除索引模板
- 删除索引模板(旧版)
- 存在
- 字段使用情况统计信息
- 刷新
- 强制合并
- 获取别名
- 获取组件模板
- 获取字段映射
- 获取索引
- 获取索引设置
- 获取索引模板
- 获取索引模板(旧版)
- 获取映射
- 导入悬挂索引
- 索引恢复
- 索引段
- 索引分片存储
- 索引统计信息
- 索引模板是否存在(旧版)
- 列出悬挂索引
- 打开索引
- 刷新
- 解析索引
- 解析集群
- 翻转
- 收缩索引
- 模拟索引
- 模拟模板
- 拆分索引
- 解冻索引
- 更新索引设置
- 更新映射
- 索引生命周期管理 API
- 推理 API
- 信息 API
- 摄取 API
- 许可 API
- Logstash API
- 机器学习 API
- 机器学习异常检测 API
- 机器学习数据帧分析 API
- 机器学习训练模型 API
- 迁移 API
- 节点生命周期 API
- 查询规则 API
- 重新加载搜索分析器 API
- 存储库计量 API
- 汇总 API
- 根 API
- 脚本 API
- 搜索 API
- 搜索应用程序 API
- 可搜索快照 API
- 安全 API
- 身份验证
- 更改密码
- 清除缓存
- 清除角色缓存
- 清除权限缓存
- 清除 API 密钥缓存
- 清除服务帐户令牌缓存
- 创建 API 密钥
- 创建或更新应用程序权限
- 创建或更新角色映射
- 创建或更新角色
- 批量创建或更新角色 API
- 批量删除角色 API
- 创建或更新用户
- 创建服务帐户令牌
- 委托 PKI 身份验证
- 删除应用程序权限
- 删除角色映射
- 删除角色
- 删除服务帐户令牌
- 删除用户
- 禁用用户
- 启用用户
- 注册 Kibana
- 注册节点
- 获取 API 密钥信息
- 获取应用程序权限
- 获取内置权限
- 获取角色映射
- 获取角色
- 查询角色
- 获取服务帐户
- 获取服务帐户凭据
- 获取安全设置
- 获取令牌
- 获取用户权限
- 获取用户
- 授予 API 密钥
- 具有权限
- 使 API 密钥失效
- 使令牌失效
- OpenID Connect 准备身份验证
- OpenID Connect 身份验证
- OpenID Connect 注销
- 查询 API 密钥信息
- 查询用户
- 更新 API 密钥
- 更新安全设置
- 批量更新 API 密钥
- SAML 准备身份验证
- SAML 身份验证
- SAML 注销
- SAML 失效
- SAML 完成注销
- SAML 服务提供商元数据
- SSL 证书
- 激活用户配置文件
- 禁用用户配置文件
- 启用用户配置文件
- 获取用户配置文件
- 建议用户配置文件
- 更新用户配置文件数据
- 具有用户配置文件权限
- 创建跨集群 API 密钥
- 更新跨集群 API 密钥
- 快照和还原 API
- 快照生命周期管理 API
- SQL API
- 同义词 API
- 文本结构 API
- 转换 API
- 使用情况 API
- Watcher API
- 定义
- 迁移指南
- 发行说明
- Elasticsearch 版本 8.17.0
- Elasticsearch 版本 8.16.1
- Elasticsearch 版本 8.16.0
- Elasticsearch 版本 8.15.5
- Elasticsearch 版本 8.15.4
- Elasticsearch 版本 8.15.3
- Elasticsearch 版本 8.15.2
- Elasticsearch 版本 8.15.1
- Elasticsearch 版本 8.15.0
- Elasticsearch 版本 8.14.3
- Elasticsearch 版本 8.14.2
- Elasticsearch 版本 8.14.1
- Elasticsearch 版本 8.14.0
- Elasticsearch 版本 8.13.4
- Elasticsearch 版本 8.13.3
- Elasticsearch 版本 8.13.2
- Elasticsearch 版本 8.13.1
- Elasticsearch 版本 8.13.0
- Elasticsearch 版本 8.12.2
- Elasticsearch 版本 8.12.1
- Elasticsearch 版本 8.12.0
- Elasticsearch 版本 8.11.4
- Elasticsearch 版本 8.11.3
- Elasticsearch 版本 8.11.2
- Elasticsearch 版本 8.11.1
- Elasticsearch 版本 8.11.0
- Elasticsearch 版本 8.10.4
- Elasticsearch 版本 8.10.3
- Elasticsearch 版本 8.10.2
- Elasticsearch 版本 8.10.1
- Elasticsearch 版本 8.10.0
- Elasticsearch 版本 8.9.2
- Elasticsearch 版本 8.9.1
- Elasticsearch 版本 8.9.0
- Elasticsearch 版本 8.8.2
- Elasticsearch 版本 8.8.1
- Elasticsearch 版本 8.8.0
- Elasticsearch 版本 8.7.1
- Elasticsearch 版本 8.7.0
- Elasticsearch 版本 8.6.2
- Elasticsearch 版本 8.6.1
- Elasticsearch 版本 8.6.0
- Elasticsearch 版本 8.5.3
- Elasticsearch 版本 8.5.2
- Elasticsearch 版本 8.5.1
- Elasticsearch 版本 8.5.0
- Elasticsearch 版本 8.4.3
- Elasticsearch 版本 8.4.2
- Elasticsearch 版本 8.4.1
- Elasticsearch 版本 8.4.0
- Elasticsearch 版本 8.3.3
- Elasticsearch 版本 8.3.2
- Elasticsearch 版本 8.3.1
- Elasticsearch 版本 8.3.0
- Elasticsearch 版本 8.2.3
- Elasticsearch 版本 8.2.2
- Elasticsearch 版本 8.2.1
- Elasticsearch 版本 8.2.0
- Elasticsearch 版本 8.1.3
- Elasticsearch 版本 8.1.2
- Elasticsearch 版本 8.1.1
- Elasticsearch 版本 8.1.0
- Elasticsearch 版本 8.0.1
- Elasticsearch 版本 8.0.0
- Elasticsearch 版本 8.0.0-rc2
- Elasticsearch 版本 8.0.0-rc1
- Elasticsearch 版本 8.0.0-beta1
- Elasticsearch 版本 8.0.0-alpha2
- Elasticsearch 版本 8.0.0-alpha1
- 依赖项和版本
常见 SAML 问题
编辑常见 SAML 问题
编辑下面列出了一些常见的 SAML 问题以及如何解决这些问题的提示。
-
症状
Kibana 中的身份验证失败,并在 Elasticsearch 日志中打印以下错误
Cannot find any matching realm for [SamlPrepareAuthenticationRequest{realmName=saml1, assertionConsumerServiceURL=https://my.kibana.url/api/security/saml/callback}]
解决方案
为了启动 SAML 身份验证,Kibana 需要知道它应该使用 Elasticsearch 中配置的哪个 SAML 领域。您可以使用
xpack.security.authc.providers.saml.<provider-name>.realm
设置在 Kibana 中显式设置 SAML 领域名称。它必须与 Elasticsearch 中配置的 SAML 领域名称匹配。如果您收到类似上述的错误,则可能表示您的 Kibana 配置中的
xpack.security.authc.providers.saml.<provider-name>.realm
值不正确。请验证它是否与 Elasticsearch 中配置的领域名称匹配,即 Elasticsearch 配置中xpack.security.authc.realms.saml.
之后的字符串。 -
症状
Kibana 中的身份验证失败,并在 Elasticsearch 日志中打印以下错误
Authentication to realm saml1 failed - Provided SAML response is not valid for realm saml/saml1 (Caused by ElasticsearchSecurityException[Conditions [https://5aadb9778c594cc3aad0efc126a0f92e.kibana.company....ple.com/] do not match required audience [https://5aadb9778c594cc3aad0efc126a0f92e.kibana.company.example.com]])
解决方案
我们收到了一个发送给另一个 SAML 服务提供商的 SAML 响应。这通常意味着
elasticsearch.yml
中的配置的 SAML 服务提供商实体 ID (sp.entity_id
) 与 SAML 身份提供商文档中配置为 SAML 服务提供商实体 ID 的不匹配。要解决此问题,请确保 Elasticsearch 中的 SAML 领域和 IdP 都配置了相同的服务提供商 SAML 实体 ID 字符串。
在 Elasticsearch 日志中,在异常消息(如上所示)之前,还会有一个或多个
INFO
级别的消息,格式如下:Audience restriction [https://5aadb9778c594cc3aad0efc126a0f92e.kibana.company.example.com/] does not match required audience [https://5aadb9778c594cc3aad0efc126a0f92e.kibana.company.example.com] (difference starts at character [#68] [/] vs [])
此日志消息可以帮助确定从 IdP 收到的值与 Elasticsearch 中配置的值之间的差异。仅当两个字符串被认为是相似时,才会显示括号中描述两个受众标识符之间差异的文本。
这些字符串按区分大小写的字符串进行比较,而不是按规范化的 URL 进行比较,即使值类似于 URL。请注意尾部的斜杠、端口号等。
-
症状
Kibana 中的身份验证失败,并在 Elasticsearch 日志中打印以下错误
Cannot find metadata for entity [your:entity.id] in [metadata.xml]
解决方案
在配置的元数据文件 (
metadata.xml
) 中,我们找不到 SAML 实体 IDyour:entity.id
的元数据。- 请确保您使用的
metadata.xml
文件确实是您的 SAML 身份提供商提供的。 - 请确保
metadata.xml
文件包含一个 <EntityDescriptor> 元素,如下所示:<EntityDescriptor ID="0597c9aa-e69b-46e7-a1c6-636c7b8a8070" entityID="https://saml.example.com/f174199a-a96e-4201-88f1-0d57a610c522/" ...
,其中entityID
属性的值与您在elasticsearch.yml
中的 SAML 领域配置中设置的idp.entity_id
的值相同。 - 请注意,这些字符串也按区分大小写的字符串进行比较,而不是按规范化的 URL 进行比较,即使值类似于 URL。
- 请确保您使用的
-
症状
Kibana 中的身份验证失败,并在 Elasticsearch 日志中打印以下错误
unable to authenticate user [<unauthenticated-saml-user>] for action [cluster:admin/xpack/security/saml/authenticate]
解决方案
此错误表明 Elasticsearch 无法处理传入的 SAML 身份验证消息。由于无法处理该消息,因此 Elasticsearch 不知道要进行身份验证的用户是谁,而是使用
<unauthenticated-saml-user>
占位符。要诊断实际问题,您必须检查 Elasticsearch 日志以获取更多详细信息。 -
症状
Kibana 中的身份验证失败,并在 Elasticsearch 日志中打印以下错误
Authentication to realm <saml-realm-name> failed - SAML Attribute [<AttributeName0>] for [xpack.security.authc.realms.saml.<saml-realm-name>.attributes.principal] not found in saml attributes [<AttributeName1>=<AttributeValue1>, <AttributeName2>=<AttributeValue2>, ...] or NameID [ NameID(format)=value ]
解决方案
此错误表明 Elasticsearch 无法在身份提供商发送的 SAML 响应中找到必要的 SAML 属性。在此示例中,Elasticsearch 配置如下
xpack.security.authc.realms.saml.<saml-realm-name>.attributes.principal: AttributeName0
此配置意味着 Elasticsearch 希望在 SAML 响应中找到名称为
AttributeName0
的 SAML 属性或具有适当格式的NameID
,以便 它可以将其映射到principal
用户属性。principal
用户属性是必需的,因此如果此映射无法发生,则身份验证将失败。如果您尝试映射
NameID
,请确保预期的NameID
格式与发送的格式匹配。有关详细信息,请参阅 特殊属性名称。如果您尝试映射 SAML 属性,并且该属性不在错误消息的列表中,则可能意味着您拼错了属性名称,或者 IdP 没有发送此特定属性。您或许可以使用列表中的另一个属性映射到
principal
,或者咨询您的 IdP 管理员以确定是否可以发送所需的属性。 -
症状
Kibana 中的身份验证失败,并在 Elasticsearch 日志中打印以下错误
Cannot find [{urn:oasis:names:tc:SAML:2.0:metadata}IDPSSODescriptor]/[urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect] in descriptor
解决方案
此错误表明您的身份提供商的 SAML 元数据不包含绑定为 HTTP-Redirect (urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect) 的
<SingleSignOnService>
端点。Elasticsearch 仅支持 SAML 身份验证请求的HTTP-Redirect
绑定(并且不支持HTTP-POST
绑定)。请咨询您的 IdP 管理员,以启用至少一个支持HTTP-Redirect
绑定的<SingleSignOnService>
并更新您的 IdP SAML 元数据。 -
症状
Kibana 中的身份验证失败,并在 Elasticsearch 日志中打印以下错误
Authentication to realm my-saml-realm failed - Provided SAML response is not valid for realm saml/my-saml-realm (Caused by ElasticsearchSecurityException[SAML Response is not a 'success' response: The SAML IdP did not grant the request. It indicated that the Elastic Stack side sent something invalid (urn:oasis:names:tc:SAML:2.0:status:Requester). Specific status code which might indicate what the issue is: [urn:oasis:names:tc:SAML:2.0:status:InvalidNameIDPolicy]] )
解决方案
这意味着 SAML 身份提供商未能对用户进行身份验证,并向服务提供商(Elastic Stack)发送了指示此失败的 SAML 响应。该消息将说明 SAML 身份提供商认为问题是出在服务提供商(Elastic Stack)还是身份提供商本身,并且随后的特定状态代码非常有用,因为它通常表示根本问题。特定错误代码的列表在 SAML 2.0 核心规范 - 第 3.2.2.2 节中定义,最常见的是:
-
urn:oasis:names:tc:SAML:2.0:status:AuthnFailed
:SAML 身份提供商未能对用户进行身份验证。在 Elastic Stack 端没有太多可进行故障排除的内容,SAML 身份提供商的日志有望提供更多信息。 -
urn:oasis:names:tc:SAML:2.0:status:InvalidNameIDPolicy
:SAML 身份提供商不支持以请求的格式发布 NameID。在创建 SAML 身份验证请求时,Elasticsearch 使用适当的值设置身份验证请求的 NameIDPolicy 元素。这由elasticsearch.yml
中的nameid_format
配置参数控制,如果未设置,则默认为urn:oasis:names:tc:SAML:2.0:nameid-format:transient
。这指示身份提供商在 SAML 响应中返回具有该特定格式的 NameID。如果 SAML 身份提供商无法授予该请求,例如因为它配置为改为发布具有urn:oasis:names:tc:SAML:2.0:nameid-format:persistent
格式的 NameID 格式,则会返回此错误,表明 NameID 策略无效。可以通过调整nameid_format
以匹配 SAML 身份提供商可以返回的格式,或者将其设置为urn:oasis:names:tc:SAML:2.0:nameid-format:unspecified
来解决此问题,以便允许身份提供商返回它想要的任何格式。
-
-
症状
Kibana 中的身份验证失败,并在 Elasticsearch 日志中打印以下错误
The XML Signature of this SAML message cannot be validated. Please verify that the saml realm uses the correct SAMLmetadata file/URL for this Identity Provider
解决方案
这意味着 Elasticsearch 无法验证身份提供商发送的 SAML 消息的数字签名。Elasticsearch 使用 SAML 元数据中包含的身份提供商的公钥,以验证 IdP 使用其相应的私钥创建的签名。未能这样做可能有很多原因:
- 正如错误消息所示,最常见的原因是使用了错误的元数据文件,因此它包含的公钥与身份提供商使用的私钥不对应。
- 身份提供商的配置已更改,或者密钥已轮换,并且 Elasticsearch 使用的元数据文件尚未更新。
- SAML 响应在传输过程中被更改,即使使用了正确的密钥也无法验证签名。
如上所述,在 SAML 中用于数字签名的私钥和公钥以及自签名 X.509 证书与在传输层或 http 层用于 TLS 的密钥和证书无关。如上所述的失败与您的
xpack.ssl
相关配置无关。 -
症状
由于启用了 SAML,用户无法使用本地用户名和密码在 Kibana 中登录。
解决方案
如果您希望用户能够使用本地凭据以及使用 SAML 领域进行单点登录来对 Kibana 进行身份验证,则必须在 Kibana 中启用
basic
authProvider
。该过程记录在 SAML 指南中 -
症状
没有 SAML 请求 ID 值从 Kibana 传递到 Elasticsearch
Caused by org.elasticsearch.ElasticsearchSecurityException: SAML content is in-response-to [_A1B2C3D4E5F6G8H9I0] but expected one of []
解决方案: 此错误表明 Elasticsearch 收到了与特定 SAML 请求关联的 SAML 响应,但 Kibana 没有明确指定该请求的 ID。这通常意味着 Kibana 无法找到之前存储 SAML 请求 ID 的用户会话。
要解决此问题,请确保您的 Kibana 配置中
xpack.security.sameSiteCookies
未设置为Strict
。根据您的配置,您可以依赖默认值或将值显式设置为None
。有关更多信息,请阅读 MDN SameSite cookies
如果您在负载均衡器后提供多个 Kibana 安装,请确保对所有安装使用相同的安全配置。
日志记录
如果之前的解决方案无法解决您的问题,请为 SAML 领域启用其他日志记录以进行进一步的故障排除。您可以通过配置以下持久设置来启用调试日志记录:
resp = client.cluster.put_settings( persistent={ "logger.org.elasticsearch.xpack.security.authc.saml": "debug" }, ) print(resp)
response = client.cluster.put_settings( body: { persistent: { 'logger.org.elasticsearch.xpack.security.authc.saml' => 'debug' } } ) puts response
const response = await client.cluster.putSettings({ persistent: { "logger.org.elasticsearch.xpack.security.authc.saml": "debug", }, }); console.log(response);
PUT /_cluster/settings { "persistent": { "logger.org.elasticsearch.xpack.security.authc.saml": "debug" } }
或者,您可以将以下行添加到 ES_PATH_CONF
中的 log4j2.properties
配置文件末尾
logger.saml.name = org.elasticsearch.xpack.security.authc.saml logger.saml.level = DEBUG
有关更多信息,请参阅配置日志记录级别。