原英文版地址: https://www.elastic.co/guide/en/elasticsearch/reference/7.7/security-settings.html, 原文档版权归 www.elastic.co 所有
本地英文版地址: ../en/security-settings.html

安全设置

默认情况下,当你使用 basic(基本) 或 trail(试用) 许可时,Elasticsearch 安全功能是禁用的。 要启用安全功能,请使用 xpack.security.enabled 设置。

配置 xpack.security 设置以 启用匿名访问 并执行消息身份验证, 设置文档和字段级别的安全配置领域(realm)用 SSL 加密通信, 以及 审计安全事件

有这些设置都可以添加到elasticsearch.yml配置文件中,只有安全设置除外,它是添加到 Elasticsearch 密钥库中的。 有关创建和更新 Elasticsearch 密钥库的更多信息,请参考 安全设置

常规安全设置

xpack.security.enabled

设置为 true 以在节点上启用 Elasticsearch 安全功能。

如果设置为 false(basic 许可证和 trail 许可证的默认值),则安全功能将被禁用。 它还影响连接到这个 Elasticsearch 实例的所有 Kibana 实例,不需要在那些 Kibana 实例的 kibana.yml 文件中禁用安全特性。 有关在特定 Kibana 实例中禁用安全功能的更多信息,请参考 Kibana安全设置

如果你使用 gold 或更高版本的许可证,默认就是 true;但是仍建议你显式地添加此设置,以免混淆。

xpack.security.hide_settings
集群节点信息API结果中忽略的设置的逗号分隔列表。 一个用逗号分隔的设置列表,这些设置在 集群节点信息API 的结果中被省略了。 可以使用通配符在列表中包含多个设置。 例如,xpack.security.authc.realms.active_directory.ad1.* 这个值会隐藏 ad1 活动目录领域(active_directory realm)的所有设置。 出于信息的敏感性,API 已经忽略了所有ssl设置、bind_dnbind_password
xpack.security.fips_mode.enabled
启用 fips 操作模式。 如果你在启用 FIPS 140-2 的 JVM 中运行这个 Elasticsearch 实例,请设置为 true。 更多信息参考 FIPS 140-2。 默认为 false

密码哈希设置

xpack.security.authc.password_hashing.algorithm
指定用于安全用户凭据存储的哈希算法。 参考 表 2,“密码哈希算法”。默认为bcrypt

匿名访问设置

你可以在 elasticsearch.yml 中配置下面几个匿名访问设置。 更多信息参考 启用匿名访问

xpack.security.authc.anonymous.username
匿名用户的用户名(最重要的)。默认为 _es_anonymous_user
xpack.security.authc.anonymous.roles
与匿名用户关联的角色。必需的。
xpack.security.authc.anonymous.authz_exception
true时,如果匿名用户没有请求操作的适当权限,则返回 HTTP 403 响应。 也不会提示用户提供凭据来访问所请求的资源。 当设置为 false 时, 会返回一个 HTTP 401 响应,用户可以提供具有适当权限的凭据来获得访问权限。 默认为 true

自动机(Automata) 设置

在安全特征接受通配符模式的地方(例如,角色中的索引模式、角色映射API中的组匹配),每个模式都被编译成自动机。 以下设置可用于控制这种行为。

xpack.security.automata.max_determinized_states
单个模式可以创建的自动机状态的上限。 这防止了过于困难(例如指数级困难)的模式。 默认为 100,000
xpack.security.automata.cache.enabled
是否缓存编译后的自动机。 编译自动机会占用大量 CPU 资源,可能会降低某些操作的速度。 缓存降低了自动机需要编译的频率。 默认为 true
xpack.security.automata.cache.size
自动机缓存中要保留的最大项目数。默认为 10,000
xpack.security.automata.cache.ttl
项目在自动机缓存中保留的时间(基于最近的使用)。 默认为 48h (48 小时)。

文档和字段级别的安全设置

可以在 elasticsearch.yml 中配置下面几个文档和字段级别的安全设置。 更多信息参考 设置字段和文档级别的安全

xpack.security.dls_fls.enabled
设置为false 可防止配置文档和字段级别的安全性。 默认为 true
xpack.security.dls.bitset.cache.ttl
用于文档级安全的 位组 (BitSet) 的缓存的生存时间(ttl, time-to-live)。 文档级安全查询可能依赖于 Lucene BitSet 对象,这些对象会被自动缓存以提高性能。 默认会将 168h (7天)未使用的记录过期。
xpack.security.dls.bitset.cache.size
用于文档级安全的 位组 (BitSet) 的缓存可使用的最大内存。 文档级安全查询可能依赖于 Lucene BitSet 对象,这些对象会被自动缓存以提高性能。 默认为 50mb,超过此内存,最近最少使用的记录将被清除。

令牌(token)服务设置

可以在 elasticsearch.yml 中设置以下令牌服务设置。

xpack.security.authc.token.enabled
设置为 false 以禁用内置的令牌服务。 默认值是 true,除非 xpack.security.http.ssl.enabled设置为 false。 这可以防止通过普通 http 从连接中嗅探令牌。
xpack.security.authc.token.timeout
令牌的有效时间。 默认情况下,这个值是 20m,就是 20分钟。 最大值是 1 小时。

API 密钥服务管理

可以在 elasticsearch.yml 中设置以下 API 密钥服务设置。

xpack.security.authc.api_key.enabled
设置为 false 以禁用内置的 API 密钥服务。 默认值是 true,除非 xpack.security.http.ssl.enabled设置为 false。 这可以防止通过普通 http 从连接中嗅探API 密钥。
xpack.security.authc.api_key.hashing.algorithm
指定用于保护 API 密钥凭据的哈希算法。 参考 表 2, “密码哈希算法”。 默认值为 pbkdf2
xpack.security.authc.api_key.cache.ttl
缓存的 API 密钥的生存时间。 在这段时间内,API 密钥的 id 及密钥的哈希值被缓存。 用 Elasticsearch 标准的time units (时间单位)指定时间段。 默认为 1d 即 1 天。
xpack.security.authc.api_key.cache.max_keys
在任何给定时间内,可以存在于缓存中的 API 密钥的最大数量。默认为 10,000。
xpack.security.authc.api_key.cache.hash_algo
(专家级设置) 用于缓存在内存中的 API 密钥凭据的哈希算法。 有关可能的值,参考 表 1, “缓存哈希算法”. 默认值为 ssha256

领域(realm) 设置

可以在 elasticsearch.ymlxpack.security.authc.realms 命名空间下配置领域设置。 比如:

xpack.security.authc.realms:

    native.realm1: 
        order: 0
        ...

    ldap.realm2:
        order: 1
        ...

    active_directory.realm3:
        order: 2
        ...
    ...

指定领域的类型(比如,native, ldap, active_directory, pki, file, kerberos, saml)及领域的名称。 此设置是必须的。

有效设置因领域类型而异。 更多信息请参考 用户身份验证

对所有领域有效的设置
order
领域链中领域的优先级。值越小,越先被咨询。 虽然不是必需的,但强烈建议在配置多个领域时使用此设置。 默认值为 Integer.MAX_VALUE
enabled
是否启用领域。 可以使用此设置禁用领域,而无需删除其配置信息。默认为 true
本地领域设置 (native realm settings)

对于本地领域来说,type 必须设置为 native。 除了对所有领域都有效的设置之外,你还可以指定以下可选设置:

cache.ttl
缓存的用户的生存时间。 在这段时间内,用户及其凭证的哈希值将被缓存。 用 Elasticsearch 标准的time units (时间单位)指定时间段。 默认为 20m 即 20 分钟。
cache.max_users
在任何给定时间内,可以存在于缓存中的最大用户数量。默认为 100000
cache.hash_algo
(专家级设置) 用于缓存在内存中的用户凭据的哈希算法。 有关可能的值,参考 表 1, “缓存哈希算法”. 默认值为 ssha256
authentication.enabled
如果设置为 false,则在该领域中禁用对身份验证的支持,这就仅支持用户查找了。 (参考 运行方式 (run as)授权领域 功能)。 默认为 true
文件领域设置

type 设置必须设置为 file。 除了对所有领域都有效的设置之外,你还可以指定以下可选设置:

cache.ttl
缓存的用户的生存时间。 在这段时间内,用户及其凭证的哈希值将被缓存。 用 Elasticsearch 标准的time units (时间单位)指定时间段。 默认为 20m 即 20 分钟。
cache.max_users
在任何给定时间内,可以存在于缓存中的最大用户数量。默认为 100000
cache.hash_algo
(专家级设置) 用于缓存在内存中的用户凭据的哈希算法。 有关可能的值,参考 表 1, “缓存哈希算法”. 默认值为 ssha256
authentication.enabled
如果设置为 false,则在该领域中禁用对身份验证的支持,这就仅支持用户查找了。 (参考 运行方式 (run as)授权领域 功能)。 默认为 true
LDAP 领域设置

type 设置必须设置为 ldap。 除了对所有领域都有效的设置之外,你还可以指定以下可选设置:

url

ldap[s]://<server>:<port> 格式的一个或多个 LDAP url地址。必需的。

如果要提供多个 url 地址,使用 YAML 数组 (["ldap://server1:636", "ldap://server2:636"]) 或者逗号分隔的字符串 ("ldap://server1:636, ldap://server2:636")。

虽然两者都受支持,但是不能混合使用ldapldaps协议。

load_balance.type
定义了多个 LDAP url地址时使用的行为。 关于支持的值,请参考 负载均衡和故障转移类型。 默认值为 failover
load_balance.cache_ttl
当负载均衡的类型为 dns_failoverdns_round_robin 时,这个设置用来控制 DNS 查找缓存的时间。 默认值为 1h
bind_dn
用于绑定到 LDAP 并执行搜索的用户的 DN。 仅适用于用户搜索模式。 如果未指定,则尝试匿名绑定。 默认值为空。 由于潜在的安全影响,bind_dn 没有通过 节点信息API公开。
bind_password
[6.3] 在 6.3 中废弃 使用 secure_bind_password 替代之。 用于绑定到 LDAP 目录的用户密码。 默认值为空。 由于潜在的安全影响,bind_password 没有通过 节点信息API公开。
secure_bind_password (安全)
用于绑定到 LDAP 目录的用户密码。 默认值为空。
user_dn_templates
用字符串{0}替换用户名的 DN 模板。 该设置是 多值的(multivalued),你可以指定多个用户上下文。 需要在用户模板模式下操作。 如果指定了 user_search.base_dn,则此设置无效。 有关不同模式的更多信息,请参考LDAP 用户身份验证
authorization_realms

委托授权时应咨询的领域的名称。 如果使用此设置,则 LDAP 领域不执行角色映射,而是从列出的领域加载用户。 被引用的领域按照它们在列表中定义的顺序进行查询。 参考 将授权委托给另一个领域

如果指定的任何一个设置以 user_search 开头,则 user_dn_templates 设置将无效。

user_group_attribute
指定要检查用户组成员关系的属性。 如果指定了任何 group_search 设置,该设置将被忽略。 默认为 memberOf
user_search.base_dn
为用户搜索所指定的容器 DN。 需要在用户搜索模式下操作。 如果指定了 user_dn_templates,则此设置无效。 有关不同模式的更多信息,请参考LDAP 用户身份验证
user_search.scope
用户搜索的范围。 有效值包括sub_treeone_levelbaseone_level 搜索直接包含在 base_dn中的对象。 sub_tree 搜索 base_dn 中的所有对象。 base 指定 base_dn 是用户对象,并且是唯一被考虑的用户。 默认值为 sub_tree
user_search.filter
指定用于搜索目录的过滤器,以尝试将记录与用户提供的用户名相匹配。 默认值为 (uid={0}){0} 会被替换为搜索时提供的用户名。
user_search.attribute
[5.6] 在 5.6 中废弃。 使用 user_search.filter 替代之。 与请求发送的用户名匹配的属性。默认为 uid
user_search.pool.enabled
为用户搜索启用或禁用连接池。 如果设置为false,则每次搜索都会创建一个新的连接。 当设置了 bind_dn 时, 默认值为 true
user_search.pool.size
连接池中允许的 LDAP 服务器的最大连接数。 默认值为 20
user_search.pool.initial_size
在启动时要创建到 LDAP 服务器的初始连接数。默认为 0。 如果 LDAP 服务器关闭,大于0的值可能会导致启动失败。
user_search.pool.health_check.enabled
启用或禁用连接池中 LDAP 连接的健康检查。 以指定的时间间隔在后台检查连接。 默认值为 true
user_search.pool.health_check.dn
健康检查时需要使用的 识别名(dn, distinguished name)。 原文: The distinguished name that is retrieved as part of the health check. 默认值为 bind_dn (如果存在);如果没有,则返回到 user_search.base_dn
user_search.pool.health_check.interval
对连接池中的连接执行后台检查的时间间隔。默认为 60s
group_search.base_dn
用于搜索用户所属的组的容器 DN。 当缺少此元素时,Elasticsearch 搜索由用户上设置的user_group_attribute指定的属性,以确定组成员关系。
group_search.scope
指定组搜索应该是sub_treeone_level 还是 baseone_level 搜索直接包含在 base_dn中的对象。 sub_tree 搜索 base_dn 中的所有对象。 base 指定 base_dn 是组对象,并且是唯一被考虑的组。 默认值为 sub_tree
group_search.filter
指定用于查找组的筛选器。 如果未设置,领域将使用属性membermemberOfmemberUid搜索 groupgroupOfNamesgroupOfUniqueNamesposixGroup。 筛选器中的任何{0}实例都被group_search.user_attribute中定义的用户属性替换。
group_search.user_attribute
指定提取并作为参数提供给过滤器的用户属性。 如果未设置,则用户 DN 被传递到过滤器中。 默认为空。
unmapped_groups_as_roles
如果设置为 true,任何 未映射(unmapped) 的 LDAP 组的名称将用作角色名称并分配给用户。 如果在 角色映射(role-mapping)文件中没有引用某个组,则该组被视为未映射(unmapped)。 不考虑基于 API 的角色映射。 默认为 false
files.role_mapping
YAML 角色映射配置文件位置(location)。 默认值为 ES_PATH_CONF/role_mapping.yml
follow_referrals
指定 Elasticsearch 是否应该遵循 LDAP 服务器返回的引用(referrals)。 引用(referrals)是服务器返回的URL,用于继续 LDAP 操作(例如,搜索)。 默认为 true
metadata
应该从 LDAP 服务器加载的附加 LDAP 属性的列表,它们存储在经过身份验证的用户的元数据字段中。
timeout.tcp_connect
建立 LDAP 连接的 TCP 连接超时时间。 s结尾的表示秒,ms结尾的表示毫秒。 默认值为 5s (5秒)。
timeout.tcp_read
[7.7] 在 7.7 中废弃。 建立 LDAP 连接后的 TCP 读取超时时间。 它等价于timeout.response,但(相比于后者)不再不推荐使用它,且它们不能同时使用。 s结尾的表示秒,ms结尾的表示毫秒。
timeout.response
等待 LDAP 服务器响应的时间间隔。 s结尾的表示秒,ms结尾的表示毫秒。 默认值为 timeout.ldap_search 的值。
timeout.ldap_search
LDAP 搜索的超时时间。 该值在请求中指定,并由接收 LDAP 服务器强制执行。 s结尾的表示秒,ms结尾的表示毫秒。 默认值为 5s (5秒)。
ssl.key

包含私钥的 PEM 编码文件的路径。

如果 LDAP 服务器需要客户端身份验证,则将使用该文件。 这个设置不能与 ssl.keystore.path 同时使用。

ssl.key_passphrase
用于解密私钥的密码。 由于密钥可能没有加密,因此该值是可选的。
ssl.secure_key_passphrase (安全)
用于解密私钥的密码。 由于密钥可能没有加密,因此该值是可选的。.
ssl.certificate

指定与密钥相关的 PEM 编码证书(或证书链)的路径。

客户端连接时会收到此证书。

ssl.certificate_authorities

应受信任的 PEM 编码证书文件的路径列表。

此设置不能与 ssl.truststore.path 同时使用。

ssl.keystore.path

包含私钥和证书的密钥库文件的路径。

此设置不能与 ssl.key 同时使用。

ssl.keystore.type
密钥库文件的格式,必须是 jksPKCS12。 如果秘钥库路径以 ".p12"、".pfx" 或 ".pkcs12" 结尾,则其默认值为 PKCS12;否则,默认值为 jks
ssl.keystore.password
密钥库的密码。
ssl.keystore.secure_password (安全)
密钥库的密码。
ssl.keystore.key_password
密钥库中密钥的密码。默认值是密钥库的密码。
ssl.keystore.secure_key_password
密钥库中密钥的密码。默认值是密钥库的密码。
ssl.truststore.path

包含要信任的证书的密钥库的路径。 它必须是 Java密钥库(jks) 或 PKCS#12 文件。

此设置不能与 ssl.certificate_authorities 同时使用。

ssl.truststore.password
信任库的密码。
ssl.truststore.secure_password (安全)
信任库的密码。
ssl.truststore.type
信任库文件的格式。 对于Java秘钥库格式,使用 jks。 对于 PKCS#12 文件,使用 PKCS12。 对于 PKCS#11 令牌, 使用 PKCS11。 默认值为 jks
ssl.verification_mode

使用 ldaps 防止中间人攻击和证书伪造时的验证类型。 可用的值有:

  • full,用于验证所提供的证书是否由可信机构(CA)签名,还验证服务器的主机名(或IP地址)是否与证书中标识的名称匹配。
  • certificate,用于验证所提供的证书是否由可信机构(CA)签名,但不执行任何主机名验证。
  • none不验证服务器的证书。 这种模式禁用了 SSL/TLS 的许多安全优势,应该在非常谨慎的考虑之后才使用。 它主要用作尝试解决 TLS 错误时的临时诊断机制;强烈建议不要在生产集群上使用它。

    默认值为 full

ssl.supported_protocols

支持的协议版本。可用的协议包括:SSLv2HelloSSLv3TLSv1TLSv1.1TLSv1.2TLSv1.3。 如果 JVM 的 SSL 提供程序支持 TLSv1.3,则默认值为 TLSv1.3,TLSv1.2,TLSv1.1;否则,默认值为 TLSv1.2,TLSv1.1

如果 xpack.security.fips_mode.enabledtrue,则不能使用 SSLv2HelloSSLv3。参考 FIPS 140-2

ssl.cipher_suites

指定与LDAP服务器通信时应支持的密码套件。 支持的密码套件因使用的 Java 版本而异。例如,对于版本11,默认值为 TLS_AES_256_GCM_SHA384, TLS_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_GCM_SHA384, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA.

上面列出的默认密码套件包括 TLSv1.3 密码和需要 Java 加密扩展(JCE)无限强度权限策略文件进行256位 AES 加密的密码。 如果 TLSv1.3 不可用,则 TLSv1.3 密码 TLS_AES_256_GCM_SHA384TLS_AES_128_GCM_SHA256 不会包括在默认列表中。 如果 256-bit AES 不可用,则名字中有AES_256的密码不会包含在默认列表中。 最后,AES GCM 在 Java 11 之前的版本中存在已知的性能问题,只有在使用 Java 11 或更高版本时才会包含在默认列表中。

有关更多信息,请参见Oracle的 Java加密体系结构文档

cache.ttl
缓存的用户的生存时间。 在这段时间内,用户及其凭证的哈希值将被缓存。 用 Elasticsearch 标准的time units (时间单位)指定时间段。 默认为 20m 即 20 分钟。
cache.max_users
指定缓存可以包含的最大用户数。 默认为 100000
cache.hash_algo
(专家级设置) 用于缓存在内存中的用户凭据的哈希算法。 参考 表 1, “缓存哈希算法”. 默认值为 ssha256
authentication.enabled
如果设置为 false,则在该领域中禁用对身份验证的支持,这就仅支持用户查找了。 (参考 运行方式 (run as)授权领域 功能)。 默认为 true
Active Directory(活动目录/域控制器) 领域设置

type 设置必须配置为 active_directory。 除了对所有领域都有效的设置之外,你还可以指定以下可选设置:

url

ldap[s]://<server>:<port> 格式的一个或多个 LDAP url地址。 默认为 ldap://<domain_name>:389。 使用 SSL/TLS 连接或使用自定义端口时,必须设置。

如果要提供多个 url 地址,使用 YAML 数组 (["ldap://server1:636", "ldap://server2:636"]) 或者逗号分隔的字符串 ("ldap://server1:636, ldap://server2:636")。

虽然两者都受支持,但是不能混合使用ldapldaps协议。

如果 URL 未指定,Elasticsearch 会使用默认值 ldap://<domain_name>:389。 此默认值使用 domain_name 的值,并假设到端口 389 的连接未加密。

load_balance.type
定义了多个 LDAP url地址时使用的行为。 关于支持的值,请参考 负载均衡和故障转移类型。 默认值为 failover
load_balance.cache_ttl
当负载均衡的类型为 dns_failoverdns_round_robin 时,这个设置用来控制 DNS 查找缓存的时间。 默认值为 1h
domain_name
Active Directory 的 域名(domain name)。 如果 urluser_search.base_dn 设置未指定,集群可以从该设置中获取这些值。必需的。
bind_dn
用于绑定到 Active Directory 并执行搜索的用户的 DN。 默认为空。 由于潜在的安全影响,bind_dn 没有通过 节点信息API 公开。
bind_password
[6.3] 在 6.3 中废弃。 使用 secure_bind_password 替代之。 用于绑定到 Active Directory 的用户的密码。 默认为空。 由于潜在的安全影响,bind_password 没有通过 节点信息API 公开。
secure_bind_password (安全)
用于绑定到 Active Directory 的用户的密码。 默认为空。
unmapped_groups_as_roles
如果设置为 true,任何 未映射(unmapped) 的 Active Directory 组的名称将用作角色名称并分配给用户。 如果在 角色映射(role-mapping)文件中没有引用某个组,则该组被视为未映射(unmapped)。 不考虑基于 API 的角色映射。 默认为 false
files.role_mapping
YAML 角色映射配置文件位置(location)。 默认值为 ES_PATH_CONF/role_mapping.yml
user_search.base_dn
搜索用户的上下文。默认为 Active Directory 域的根目录。
user_search.scope
指定用户搜索应该是sub_treeone_level 还是 baseone_level 搜索直接包含在 base_dn中的用户。 sub_tree 搜索 base_dn 中的所有对象。 base 指定 base_dn 是用户对象,并且是唯一被考虑的用户。 默认值为 sub_tree
user_search.filter
指定用于查找给定用户名的用户的筛选器。 默认筛选器使用sAMAccountNameuserPrincipalName查找 user对象。 如果指定,则必须是一个有效的 LDAP 用户搜索过滤器。 比如 (&(objectClass=user)(sAMAccountName={0}))。 更多信息参考 搜索过滤器语法(Search Filter Syntax)
user_search.upn_filter
指定用于在给定用户主体名称的情况下查找用户的筛选器。 默认筛选器使用 userPrincipalName 查找 user 对象。 如果指定,则必须是一个有效的 LDAP 用户搜索过滤器。 比如 (&(objectClass=user)(userPrincipalName={1})){1} 是用户提供的完整用户主体名称。 更多信息参考 搜索过滤器语法(Search Filter Syntax)
user_search.down_level_filter
指定用于查找给定了下级登录名(DOMAIN\user)的用户的筛选器。 默认筛选器使用 sAMAccountName 在指定的域内查找 user 对象。 如果指定,则必须是一个有效的 LDAP 用户搜索过滤器。 比如 (&(objectClass=user)(sAMAccountName={0}))。 更多信息参考 搜索过滤器语法(Search Filter Syntax)
user_search.pool.enabled
为用户搜索启用或禁用连接池。 禁用时,每次搜索都会创建一个新连接。 当提供了 bind_dn时,默认值为 true
user_search.pool.size
连接池中允许的到 Active Directory 服务器的最大连接数。 默认为 20
user_search.pool.initial_size
在启动时要创建到 Active Directory 服务器的初始连接数。默认为 0。 如果 Active Directory 服务器关闭,大于0的值可能会导致启动失败。
user_search.pool.health_check.enabled
启用或禁用连接池中 Active Directory 连接的健康检查。 以指定的时间间隔在后台检查连接。 默认值为 true
user_search.pool.health_check.dn
健康检查时需要使用的 识别名(dn, distinguished name)。 原文: The distinguished name that is retrieved as part of the health check. 默认值为 bind_dn (如果存在);如果没有,则返回到 user_search.base_dn
user_search.pool.health_check.interval
对连接池中的连接执行后台检查的时间间隔。默认为 60s
group_search.base_dn
用于搜索用户所属组的上下文。 默认为 Active Directory 域的根目录。
group_search.scope
指定组搜索应该是sub_treeone_level 还是 baseone_level 搜索直接包含在 base_dn中的组。 sub_tree 搜索 base_dn 中的所有对象。 base 指定 base_dn 是组对象,并且是唯一被考虑的组。 默认值为 sub_tree
metadata
应该从 LDAP 服务器加载的附加 LDAP 属性的列表,它们存储在经过身份验证的用户的元数据字段中。
timeout.tcp_connect
建立 LDAP 连接的 TCP 连接超时时间。 s结尾的表示秒,ms结尾的表示毫秒。 默认值为 5s (5秒)。
timeout.tcp_read
[7.7] 在 7.7 中废弃。 建立 LDAP 连接后的 TCP 读取超时时间。 它等价于timeout.response,但(相比于后者)不再推荐使用它,且它们不能同时使用。 s结尾的表示秒,ms结尾的表示毫秒。 默认值为 timeout.ldap_search 的值。
timeout.response
等待 AD(Active Directory) 服务器响应的时间间隔。 s结尾的表示秒,ms结尾的表示毫秒。 默认值为 timeout.ldap_search 的值。
timeout.ldap_search
LDAP 搜索的超时时间。 该值在请求中指定,并由接收 LDAP 服务器强制执行。 s结尾的表示秒,ms结尾的表示毫秒。 默认值为 5s (5秒)。
ssl.certificate

指定与密钥相关的 PEM 编码证书(或证书链)的路径。

客户端连接时会收到此证书。

ssl.certificate_authorities

要信任的PEM编码证书路径的列表。

此设置不能与 ssl.truststore.path 同时使用。

ssl.key

包含私钥的 PEM 编码文件的路径。

如果 Active Directory 服务器需要客户端身份验证,则将使用该文件。 这个设置不能与 ssl.keystore.path 同时使用。

ssl.key_passphrase
用于解密私钥的密码。 由于密钥可能没有加密,因此该值是可选的。
ssl.secure_key_passphrase (安全)
用于解密私钥的密码。 由于密钥可能没有加密,因此该值是可选的。
ssl.keystore.key_password
密钥库中密钥的密码。默认值是密钥库的密码。
ssl.keystore.secure_key_password (安全)
密钥库中密钥的密码。默认值是密钥库的密码。
ssl.keystore.password
密钥库的密码。
ssl.secure_keystore.password (安全)
密钥库的密码。
ssl.keystore.path

包含私钥和证书的密钥库文件的路径。

此设置不能与 ssl.key 同时使用。

ssl.keystore.type
密钥库文件的格式,必须是 jksPKCS12。 如果秘钥库路径以 ".p12"、".pfx" 或 ".pkcs12" 结尾,则其默认值为 PKCS12;否则,默认值为 jks
ssl.truststore.password
信任库的密码。
ssl.truststore.secure_password (Secure)
信任库的密码。
ssl.truststore.path

包含要信任的证书的密钥库的路径。 它必须是 Java密钥库(jks) 或 PKCS#12 文件。

此设置不能与 ssl.certificate_authorities 同时使用。

ssl.truststore.type
信任库文件的格式。 对于Java秘钥库格式,使用 jks。 对于 PKCS#12 文件,使用 PKCS12。 对于 PKCS#11 令牌, 使用 PKCS11。 默认值为 jks
ssl.verification_mode

使用 ldaps 防止中间人攻击和证书伪造时的验证类型。 可用的值有:

  • full,用于验证所提供的证书是否由可信机构(CA)签名,还验证服务器的主机名(或IP地址)是否与证书中标识的名称匹配。
  • certificate,用于验证所提供的证书是否由可信机构(CA)签名,但不执行任何主机名验证。
  • none不验证服务器的证书。 这种模式禁用了 SSL/TLS 的许多安全优势,应该在非常谨慎的考虑之后才使用。 它主要用作尝试解决 TLS 错误时的临时诊断机制;强烈建议不要在生产集群上使用它。

    默认值为 full

ssl.supported_protocols

支持的协议版本。可用的协议包括:SSLv2HelloSSLv3TLSv1TLSv1.1TLSv1.2TLSv1.3。 如果 JVM 的 SSL 提供程序支持 TLSv1.3,则默认值为 TLSv1.3,TLSv1.2,TLSv1.1;否则,默认值为 TLSv1.2,TLSv1.1

如果 xpack.security.fips_mode.enabledtrue,则不能使用 SSLv2HelloSSLv3。参考 FIPS 140-2

ssl.cipher_suites

指定与 Active Directory 服务器通信时应支持的密码套件。 支持的密码套件因使用的 Java 版本而异。例如,对于版本11,默认值为 TLS_AES_256_GCM_SHA384, TLS_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_GCM_SHA384, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA.

上面列出的默认密码套件包括 TLSv1.3 密码和需要 Java 加密扩展(JCE)无限强度权限策略文件进行256位 AES 加密的密码。 如果 TLSv1.3 不可用,则 TLSv1.3 密码 TLS_AES_256_GCM_SHA384TLS_AES_128_GCM_SHA256 不会包括在默认列表中。 如果 256-bit AES 不可用,则名字中有AES_256的密码不会包含在默认列表中。 最后,AES GCM 在 Java 11 之前的版本中存在已知的性能问题,只有在使用 Java 11 或更高版本时才会包含在默认列表中。

有关更多信息,请参见Oracle的 Java加密体系结构文档

cache.ttl
缓存的用户的生存时间。 在这段时间内,用户及其凭证的哈希值将被缓存。 用 Elasticsearch 标准的time units (时间单位)指定时间段。 默认为 20m 即 20 分钟。
cache.max_users
指定缓存可以包含的最大用户数。 默认为 100000
cache.hash_algo
(专家级设置) 用于缓存在内存中的用户凭据的哈希算法。 参考 表 1, “缓存哈希算法”. 默认值为 ssha256
authentication.enabled
如果设置为 false,则在该领域中禁用对身份验证的支持,这就仅支持用户查找了。 (参考 运行方式 (run as)授权领域 功能)。 默认为 true
follow_referrals
指定 Elasticsearch 是否应该遵循 LDAP 服务器返回的引用(referrals)。 引用(referrals)是服务器返回的URL,用于继续 LDAP 操作(例如,搜索(search))。 默认为 true
PKI 领域设置

type 必须设置为 pki。 除了对所有realm都有效的设置之外,你还可以指定以下可选设置:

username_pattern
用于从证书 DN 中提取用户名的正则表达式模式。 第一个匹配组用作用户名。 默认为 CN=(.*?)(?:,\|$)
certificate_authorities
PEM 证书文件的路径列表,用于验证用户的证书是否受信任。 默认是为 SSL 配置的受信任证书。 此设置不能与 truststore.path 一起使用。
truststore.algorithm
信任库的算法。默认为 SunX509
truststore.password
信任库的密码。

如果设置了 truststore.path,则此设置是必须的。

truststore.secure_password (Secure)
信任库的密码。
truststore.path
信任库使用的路径。 默认是为SSL配置的受信任证书。 此设置不能与 certificate_authorities 一起使用。
files.role_mapping
YAML 角色映射配置文件位置(location)。 默认值为 ES_PATH_CONF/role_mapping.yml
authorization_realms
委托授权时应咨询的领域的名称。 如果使用此设置,则 KPI 领域不执行角色映射,而是从列出的领域加载用户。 参考 将授权委托给另一个领域
cache.ttl
缓存的用户的生存时间。 在这段时间内,用户及其凭证的哈希值将被缓存。 用 Elasticsearch 标准的time units (时间单位)指定时间段。 默认为 20m 即 20 分钟。
cache.max_users
指定缓存可以包含的最大用户数。 默认为 100000
delegation.enabled
通常,为了让客户端通过 PKI 领域的身份验证,它们必须直接连接到 Elasticsearch。 也就是说,它们不能通过代理,因为代理会终止 TLS 连接。 为了允许一个可信(trusted)智能的(smart)代理(如 Kibana)在 Elasticsearch 之前进行访问并终止 TLS 连接,但仍然允许客户端通过该领域在 Elasticsearch 上进行身份验证,需要将此设置切换为true。 默认为 false。 如果启用了 委托(delegation),则必须定义 truststore.pathcertificate_authorities。 详情请参考 给KPI realm配置身份验证
SAML 领域设置

type 必须设置为 saml。 除了对所有领域都有效的设置之外,你还可以指定以下可选设置:

idp.entity_id
SAML 身份提供者(idp, Identity Provider)的实体ID(Entity ID)。 一个实体ID是一个URL,限制最大长度为1024个字符。 它可以是一个 URL (https://idp.example.com/) 或者一个 URN (urn:example.com:idp),且可以在配置文件或者身份提供者的SAML元数据中找到。
idp.metadata.path
描述身份提供者的功能和配置的 SAML 2.0 元数据文件的路径(推荐) 或 URL。 如果提供的是路径,则被解析为相对于 Elasticsearch 配置目录的路径。 如果提供的是URL,则必须是一个 file URL 或者https URL。 Elasticsearch 自动轮询这个元数据资源,并在检测到更改时重新加载 IdP 配置。 基于文件的资源的轮询频率由 Elasticsearch 全局设置 resource.reload.interval.high 决定,默认为5秒。 HTTPS 资源的轮询频率由 idp.metadata.http.refresh 设置决定。
idp.metadata.http.refresh
检查 https 元数据更改的频率。默认为1h (1小时)。
idp.use_single_logout
是否使用身份提供程序的 单一注销服务(Single Logout service) (如果IdP元数据文件中存在)。 默认值为 true
sp.entity_id
SAML 服务提供者(sp, service provider) 的实体ID。它应该是一个 URL。 建议使用 Kibana 实例的基本URL,比如 https://kibana.example.com/
sp.acs
Kibana 中的 断言消费者服务(acs, Assertion Consumer Service) 的 URL。 通常,这是你的 Kibana 服务器的 "api/security/v1/saml" 终端,比如 https://kibana.example.com/api/security/v1/saml
sp.logout
Kibana 中的 单一注销服务(Single Logout service) 的 URL。 通常,这是你的 Kibana 服务器的"logout"终端,比如 https://kibana.example.com/logout
attributes.principal
包含用户主体(用户名)的 SAML 属性的名称。
attributes.groups
包含用户组的 SAML 属性的名称。
attributes.name
包含用户全名的 SAML 属性的名称。
attributes.mail
包含用户email地址的 SAML 属性的名称。
attributes.dn
包含用户的 X.50 识别名(dn, Distinguished Name) 的 SAML 属性的名称。
attribute_patterns.principal
在应用于用户的 主体principal 属性之前,与attributes.pattern指定的 SAML 属性匹配的 Java 正则表达式。 属性值必须与模式匹配,并且第一个 捕获组(capturing group) 的值用作主体。 比如,^([^@]+)@example\\.com$ 匹配来自 "example.com" 域的email地址,并将 local-part(就是@前面的部分内容)作为主体。
attribute_patterns.groups
每个 attribute_patterns.principal,但group 属性除外。
attribute_patterns.name
每个 attribute_patterns.principal,但name 属性除外。
attribute_patterns.mail
每个 attribute_patterns.principal,但mail 属性除外。
attribute_patterns.dn
每个 attribute_patterns.principal,但dn 属性除外。
nameid_format
要求IdP对当前用户进行身份验证时应请求的 NameID 的格式。 默认值为请求 transient 名称 (urn:oasis:names:tc:SAML:2.0:nameid-format:transient)。
nameid.allow_create
身份验证请求中的NameIdPolicy元素的AllowCreate属性的值。 默认值为 false
nameid.sp_qualifier
身份验证请求中的 NameIdPolicy 元素的 SPNameQualifier 属性的值。 默认是不包含 SPNameQualifier 属性的。
force_authn
要求IdP对当前用户进行身份验证时是否要设置 ForceAuthn 属性。 如果设置为 true,则要求IdP验证用户的身份,而不考虑他们可能拥有的任何现有会话。 默认为 false
populate_user_metadata
是否用 SAML 属性提供的值填充 Elasticsearch 用户的元数据。 默认值为 true
authorization_realms
委托授权时应咨询的领域的名称。 如果使用此设置,则 SAML 领域不执行角色映射,而是从列出的领域加载用户。 参考 将授权委托给另一个领域
allowed_clock_skew
IdP 时钟和 Elasticsearch 节点时钟之间可以容忍的最大偏差量。 默认值为 3m (3分钟)
req_authn_context_class_ref

请求IdP对当前用户进行身份验证时,要包含在请求的 身份验证上下文(Authentication Context) 中的 身份验证上下文类引用(Authentication Context Class Reference) 值的逗号分隔列表。 相应的身份验证响应的身份验证上下文应该包含至少一个请求的值。

更多信息参考 请求特定的身份验证方法

SAML 领域签名设置

如果配置了签名密钥(即设置了signing.keysigning.keystore.path),那么 Elasticsearch 会对传出的 SAML 消息进行签名。 可以使用以下设置来配置签名:

signing.saml_messages
应签名的SAML消息类型列表,或使用*表示对所有消息进行签名。 列表中的每个元素都应该是SAML XML元素的本地名称。 支持的元素类型有AuthnRequestLogoutRequestLogoutResponse。 还必须同时指定了 signing.keysigning.keystore.path 才有效。 默认值为 *
signing.key
指定用于SAML消息签名的PEM编码私钥的路径。 signing.keysigning.keystore.path 不能同时使用。
signing.secure_key_passphrase (安全)
用于解密加密过的PEM编码私钥(signing.key)的密码。
signing.certificate
指定对应于signing.key的PEM编码证书(或证书链)的路径。 该证书还必须包含在 服务提供者(Service Provider) 的元数据中,或者在 IdP 中手动配置,以允许签名验证。 只有设置了signing.key,才能使用此设置。
signing.keystore.path
包含私钥和证书的密钥库的路径。 它必须是 Java密钥库(jks) 或 PKCS#12 文件。 此设置不能与 signing.key 同时使用。
signing.keystore.type
signing.keystore.path中的密钥库的类型,必须是 jksPKCS12。 如果秘钥库路径以 ".p12"、".pfx" 或 ".pkcs12" 结尾,则其默认值为 PKCS12;否则,默认值为 jks
signing.keystore.alias
密钥库中用于SAML消息签名的密钥的别名。 如果密钥库包含多个私钥,则必须指定此设置。
signing.keystore.secure_password (安全)
signing.keystore.path中密钥库的密码。
signing.keystore.secure_key_password (安全)
密钥库(signing.keystore.path中密钥的密码。 默认值为密钥库的密码。
SAML 领域加密设置

如果配置了加密密钥(即设置了 encryption.keyencryption.keystore.path ),那么 Elasticsearch 会在生成元数据时发布加密证书,并尝试解密传入的 SAML 内容。 可以使用以下设置来配置加密:

encryption.key
用于SAML消息解密的PEM编码私钥的路径。 encryption.keyencryption.keystore.path 不能同时使用。
encryption.secure_key_passphrase (Secure)
用于解密加密过的PEM编码私钥(encryption.key)的密码。
encryption.certificate
encryption.key关联的PEM编码证书(或证书链)的路径。 该证书还必须包含在 服务提供者(Service Provider) 的元数据中,或者在 IdP 中手动配置,以允许消息加密。 只有设置了encryption.key,才能使用此设置。
encryption.keystore.path
包含私钥和证书的密钥库的路径。 它必须是 Java密钥库(jks) 或 PKCS#12 文件。 此设置不能与 encryption.key 同时使用。
encryption.keystore.type
密钥库(encryption.keystore.path)的类型,必须是 jks 或者 PKCS12。 如果秘钥库路径以 ".p12"、".pfx" 或 ".pkcs12" 结尾,则其默认值为 PKCS12;否则,默认值为 jks
encryption.keystore.alias
密钥库(encryption.keystore.path)中用于解密SAML消息的密钥的别名。 如果未指定,密钥库中所有兼容的密钥对都将被视为解密的候选密钥。
encryption.keystore.secure_password (安全)
密钥库(encryption.keystore.path)的密码。
encryption.keystore.secure_key_password (安全)
密钥库(encryption.keystore.path)中的密钥的密码。 只支持单个密码。 如果你使用了多个解密密钥,则它们不能有单独的密码。
SAML 领域 SSL 设置

如果你通过SSL/TLS加载IdP元数据(即idp.metadata.path是一个使用https协议的URL),以下设置可用于配置SSL。

除了通过https加载元数据之外,这些设置不会用于任何目的。

ssl.key

包含私钥的 PEM 编码文件的路径。

如果要求 HTTP 客户端身份验证,则将使用该文件。 这个设置不能与 ssl.keystore.path 同时使用。

ssl.key_passphrase

用于解密私钥的密码。 由于密钥可能没有加密,因此该值是可选的。

此设置不能与 ssl.secure_key_passphrase 同时使用。

ssl.secure_key_passphrase (安全)

用于解密私钥的密码。 由于密钥可能没有加密,因此该值是可选的。

此设置不能与 ssl.key_passphrase 同时使用。

ssl.certificate

指定与密钥相关的 PEM 编码证书(或证书链)的路径。

只有当设置了 ssl.key 时才能使用此设置。

ssl.certificate_authorities

要信任的PEM编码证书的路径列表。

此设置不能与 ssl.truststore.path 同时使用。

ssl.keystore.path

包含私钥和证书的密钥库文件的路径。

它必须是一个 Java密钥库(jks) 或 PKCS#12 文件。 此设置不能与 ssl.key 同时使用。

ssl.keystore.type
密钥库文件的格式,必须是 jksPKCS12。 如果秘钥库路径以 ".p12"、".pfx" 或 ".pkcs12" 结尾,则其默认值为 PKCS12;否则,默认值为 jks
ssl.keystore.password

密钥库的密码。

此设置不能与 ssl.keystore.secure_password 同时使用。

ssl.keystore.secure_password (Secure)

密钥库的密码。

此设置不能与 ssl.keystore.password 同时使用。

ssl.keystore.key_password

密钥库中密钥的密码。默认值是密钥库的密码。

此设置不能与 ssl.keystore.secure_key_password 同时使用。

ssl.keystore.secure_key_password (Secure)
密钥库中密钥的密码。默认值是密钥库的密码。

此设置不能与 ssl.keystore.key_password 同时使用。

ssl.truststore.path

包含要信任的证书的密钥库的路径。 它必须是 Java密钥库(jks) 或 PKCS#12 文件。

此设置不能与 ssl.certificate_authorities 同时使用。

ssl.truststore.type
信任库文件的格式,必须是 jksPKCS12。 如果秘钥库路径以 ".p12"、".pfx" 或 ".pkcs12" 结尾,则其默认值为 PKCS12;否则,默认值为 jks
ssl.truststore.password

信任库的密码。

此设置不能与 ssl.truststore.secure_password 同时使用。

ssl.truststore.secure_password (Secure)

信任库的密码。

此设置不能和 ssl.truststore.password 一起使用。

ssl.verification_mode

控制证书的验证。 可用的值有:

  • full,用于验证所提供的证书是否由可信机构(CA)签名,还验证服务器的主机名(或IP地址)是否与证书中标识的名称匹配。
  • certificate,用于验证所提供的证书是否由可信机构(CA)签名,但不执行任何主机名验证。
  • none不验证服务器的证书。 这种模式禁用了 SSL/TLS 的许多安全优势,应该在非常谨慎的考虑之后才使用。 它主要用作尝试解决 TLS 错误时的临时诊断机制;强烈建议不要在生产集群上使用它。

    默认值为 full

ssl.supported_protocols

支持的协议版本。可用的协议包括:SSLv2HelloSSLv3TLSv1TLSv1.1TLSv1.2TLSv1.3。 如果 JVM 的 SSL 提供程序支持 TLSv1.3,则默认值为 TLSv1.3,TLSv1.2,TLSv1.1;否则,默认值为 TLSv1.2,TLSv1.1

如果 xpack.security.fips_mode.enabledtrue,则不能使用 SSLv2HelloSSLv3。参考 FIPS 140-2

ssl.cipher_suites

支持的密码套件因使用的 Java 版本而异。例如,对于版本11,默认值为 TLS_AES_256_GCM_SHA384, TLS_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_GCM_SHA384, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA.

上面列出的默认密码套件包括 TLSv1.3 密码和需要 Java 加密扩展(JCE)无限强度权限策略文件进行256位 AES 加密的密码。 如果 TLSv1.3 不可用,则 TLSv1.3 密码 TLS_AES_256_GCM_SHA384TLS_AES_128_GCM_SHA256 不会包括在默认列表中。 如果 256-bit AES 不可用,则名字中有AES_256的密码不会包含在默认列表中。 最后,AES GCM 在 Java 11 之前的版本中存在已知的性能问题,只有在使用 Java 11 或更高版本时才会包含在默认列表中。

有关更多信息,请参见Oracle的 Java加密体系结构文档

Kerberos 领域设置

对于一个 Kerberos 领域,type 必须设置为 kerberos。 除了对所有领域都有效的设置之外,你还可以指定以下可选设置:

keytab.path
指定 Kerberos 密钥表文件的路径,该文件包含此 Elasticsearch 节点使用的服务主体。 它必须是 Elasticsearch 配置目录中的一个位置,并且该文件必须具有读取权限。 必需的。
remove_realm_name
设置为true可删除主体名称中的领域部分。 Kerberos 中的 主体名称 的格式为 user/instance@REALM。 如果设置为 true,则用户名中不会包含领域部分(@REALM)。 默认为 false
krb.debug
设置为true以启用为 Kerberos 身份验证提供支持的 Java 登录模块的调试日志。默认为 false
cache.ttl
缓存的用户的生存时间。 在这段时间内,用户将被缓存。 用 Elasticsearch 标准的time units (时间单位)指定时间段。 默认为 20m 即 20 分钟。
cache.max_users
在任何给定时间内,可以存在于缓存中的最大用户数量。默认为 100,000。
authorization_realms
委托授权时应咨询的领域的名称。 如果使用此设置,则 Kerberos 领域不执行角色映射,而是从列出的领域加载用户。 参考 将授权委托给另一个领域
OpenID Connect 领域设置

除了对所有领域都有效的设置之外,你还可以指定以下可选设置:

op.issuer
OpenID连接提供程序(OpenID Connect Provider) 的可验证标识。 发行者标识(Issuer Identifier) 通常是一个使用https方案的大小写敏感的URL,它包含方案、主机、可选的端口号 及 路径组件,不包含查询或分段(fragment)组件。 此设置的值应由你的 OpenID连接提供程序 提供。
op.authorization_endpoint
OpenID连接提供程序 中 授权 终端的URL。 此设置的值应由你的 OpenID连接提供程序 提供。
op.token_endpoint
OpenID连接提供程序 中 令牌 终端的URL。 此设置的值应由你的 OpenID连接提供程序 提供。
op.userinfo_endpoint
OpenID连接提供程序 中 用户信息 终端的URL。 此设置的值应由你的 OpenID连接提供程序 提供。
op.endsession_endpoint
OpenID连接提供程序 中的 结束会话 终端的URL。 此设置的值应由你的 OpenID连接提供程序 提供。
op.jwkset_path
JSON Web Key Set 的路径或URL, OpenID连接提供程序用于签名令牌和声明响应的密钥材料。 如果提供的是路径,则相对于 Elasticsearch 配置目录进行解析。 如果提供的是URL,则它必须是一个 file URL 或 https URL。 Elasticsearch会自动缓存检索到的JWK集,以避免不必要的HTTP请求,但会在签名验证失败时尝试刷新JWK,因为这可能表明OpenID连接提供程序已经轮换了签名密钥。

基于文件的资源的轮询频率由 Elasticsearch 全局设置 resource.reload.interval.high 决定,默认为5秒。

rp.client_id
在 OpenID连接提供程序 处注册时分配给 Elasticsearch 的 OAuth 2.0 客户端标识。
rp.client_secret(安全)
在 OpenID连接提供程序 处注册时分配给 Elasticsearch 的 OAuth 2.0 客户端密钥。
rp.redirect_uri
Kibana 内的重定向(Redirect) URI。 如果想要使用 授权代码流程(authorization code flow) ,就是你的Kibana服务器的“api/security/oidc/callback”终端。 如果要使用隐式流程(implicit flow) ,就是 "api/security/oidc/implicit" 终端。 比如 https://kibana.example.com/api/security/oidc/callback
rp.response_type
OAuth 2.0 响应类型,它决定了要使用的授权处理流程。 可以是用于授权码授权流程的code,或者 id_tokenid_token token中的一个,用于隐式流程。
rp.signature_algorithm
签名算法,Elasticsearch 用于验证它将从 OpenID连接提供程序 接收的id令牌的签名。默认为 RSA256
rp.requested_scopes
作为身份验证请求的一部分,OpenID连接提供程序 会请求 范围(scope) 的值。可选,默认为 openid
rp.post_logout_redirect_uri
重定向URI(通常在Kibana内),在一次成功的注销后,OpenID连接提供程序应该将浏览器重定向到这个URI。
claims.principal
包含用户主体(用户名)的 OpenID连接 声明的名称。
claims.groups
包含用户组的 OpenID连接 声明的名称。
claims.name
包含用户全名的OpenID连接声明的名称。
claims.mail
包含用户email地址的OpenID连接声明的名称。
claims.dn
包含用户的 X.509 识别名称(dn, Distinguished Name) 的OpenID连接声明的名称。
claim_patterns.principal
在应用于用户的 主体(principal) 属性之前,与claims.principal指定的OpenID连接声明相匹配的 Java 正则表达式。 属性值必须与模式匹配,第一个 捕获组(capturing group) 的值用作主体。 比如,^([^@]+)@example\\.com$ 匹配来自 "example.com" 域的email地址,并将 local-part(就是@前面的部分内容)作为主体。
claim_patterns.groups
每个 claim_patterns.principal,但 group 属性除外。
claim_patterns.name
每个 claim_patterns.principal,但 name 属性除外。
claim_patterns.mail
每个 claim_patterns.principal,但 mail 属性除外。
claim_patterns.dn
每个 claim_patterns.principal,但 dn 属性除外。
allowed_clock_skew
验证id令牌的创建和过期时间时,要考虑的最大允许时钟偏差。
populate_user_metadata
是否用OpenID连接声明提供的值填充 Elasticsearch 用户的元数据。默认为 true
http.connect_timeout
控制用于与OpenID连接提供程序终端进行 反向通道(back-channel) 通信的 http 客户端的行为。 指定连接建立之前的超时时间。 零值意味着不使用超时。 默认为 5s
http.connection_read_timeout
控制用于与OpenID连接提供程序终端进行 反向通道(back-channel) 通信的 http 客户端的行为。 从连接管理器请求连接时使用的超时时间。 默认为 5s
http.socket_timeout
控制用于与OpenID连接提供程序终端进行 反向通道(back-channel) 通信的 http 客户端的行为。 socket超时时间(SO_TIMEOUT),单位为毫秒,这是等待数据的超时时间,或者换句话说,两个连续数据包之间的最大不活动周期。 默认为 5s
http.max_connections
控制用于与OpenID连接提供程序终端进行 反向通道(back-channel) 通信的 http 客户端的行为。 所有终端允许的最大连接数。
http.max_endpoint_connections
控制用于与OpenID连接提供程序终端进行 反向通道(back-channel) 通信的 http 客户端的行为。 每个终端允许的最大连接数。
OpenID Connect 领域 SSL 设置

以下设置可用于为到OpenID连接提供程序终端的所有传出http连接配置SSL。

这些设置用于 Elasticsearch 和OpenID连接提供程序之间的 反向通道(back-channel) 通信

ssl.key

包含私钥的 PEM 编码文件的路径。

如果需要 HTTP 客户端身份验证,则将使用该文件。 这个设置不能与 ssl.keystore.path 同时使用。

ssl.key_passphrase

用于解密私钥的密码。 由于密钥可能没有加密,因此该值是可选的。

此设置不能与 ssl.secure_key_passphrase 同时使用。

ssl.secure_key_passphrase (Secure)

用于解密私钥的密码。 由于密钥可能没有加密,因此该值是可选的。

此设置不能与 ssl.key_passphrase 同时使用。

ssl.certificate

指定与密钥相关的 PEM 编码证书(或证书链)的路径。

只有当设置了 ssl.key 时才能使用此设置。

ssl.certificate_authorities

要信任的PEM编码证书的路径列表。

此设置不能与 ssl.truststore.path 同时使用。

ssl.keystore.path

包含私钥和证书的密钥库文件的路径。

它必须是一个 Java密钥库(jks) 或 PKCS#12 文件。 此设置不能与 ssl.key 同时使用。

ssl.keystore.type
密钥库文件的格式,必须是 jksPKCS12。 如果秘钥库路径以 ".p12"、".pfx" 或 ".pkcs12" 结尾,则其默认值为 PKCS12;否则,默认值为 jks
ssl.keystore.password

密钥库的密码。

此设置不能与 ssl.keystore.secure_password 同时使用。

ssl.keystore.secure_password (安全)

密钥库的密码。

此设置不能与 ssl.keystore.password 同时使用

ssl.keystore.key_password

密钥库中密钥的密码。默认值是密钥库的密码。

此设置不能与 ssl.keystore.secure_key_password 同时使用。

ssl.keystore.secure_key_password (Secure)

密钥库中密钥的密码。默认值是密钥库的密码。

此设置不能与 ssl.keystore.key_password 同时使用。

ssl.truststore.path

包含要信任的证书的密钥库的路径。 它必须是 Java密钥库(jks) 或 PKCS#12 文件。

此设置不能与 ssl.certificate_authorities 同时使用。

ssl.truststore.type
密钥库文件的格式,必须是 jksPKCS12。 如果秘钥库路径以 ".p12"、".pfx" 或 ".pkcs12" 结尾,则其默认值为 PKCS12;否则,默认值为 jks
ssl.truststore.password

信任库的密码。

该设置不能与 ssl.truststore.secure_password 同时使用。

ssl.truststore.secure_password (Secure)

信任库的密码。

该设置不能与 ssl.truststore.password 同时使用。

ssl.verification_mode

控制证书的验证。 可用的值有:

  • full,用于验证所提供的证书是否由可信机构(CA)签名,还验证服务器的主机名(或IP地址)是否与证书中标识的名称匹配。
  • certificate,用于验证所提供的证书是否由可信机构(CA)签名,但不执行任何主机名验证。
  • none不验证服务器的证书。 这种模式禁用了 SSL/TLS 的许多安全优势,应该在非常谨慎的考虑之后才使用。 它主要用作尝试解决 TLS 错误时的临时诊断机制;强烈建议不要在生产集群上使用它。

    默认值为 full

ssl.supported_protocols

支持的协议版本。可用的协议包括:SSLv2HelloSSLv3TLSv1TLSv1.1TLSv1.2TLSv1.3。 如果 JVM 的 SSL 提供程序支持 TLSv1.3,则默认值为 TLSv1.3,TLSv1.2,TLSv1.1;否则,默认值为 TLSv1.2,TLSv1.1

如果 xpack.security.fips_mode.enabledtrue,则不能使用 SSLv2HelloSSLv3。参考 FIPS 140-2

ssl.cipher_suites

支持的密码套件因使用的 Java 版本而异。例如,对于版本11,默认值为 TLS_AES_256_GCM_SHA384, TLS_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_GCM_SHA384, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA.

上面列出的默认密码套件包括 TLSv1.3 密码和需要 Java 加密扩展(JCE)无限强度权限策略文件进行256位 AES 加密的密码。 如果 TLSv1.3 不可用,则 TLSv1.3 密码 TLS_AES_256_GCM_SHA384TLS_AES_128_GCM_SHA256 不会包括在默认列表中。 如果 256-bit AES 不可用,则名字中有AES_256的密码不会包含在默认列表中。 最后,AES GCM 在 Java 11 之前的版本中存在已知的性能问题,只有在使用 Java 11 或更高版本时才会包含在默认列表中。

有关更多信息,请参见Oracle的 Java加密体系结构文档

负载均衡和失效 (load balancing and failover)

load_balance.type 设置可以有下面这些值:

  • failover:指定的 URL 按照指定的顺序使用。 可以连接到的第一台服务器将用于所有后续连接。 如果与该服务器的连接失败,则可以建立连接的下一个服务器将用于后续连接。
  • dns_failover:在这种操作模式下,只能指定一个 URL。 此 URL 必须包含一个 DNS 名称。 将向系统查询与此 DNS 名称对应的所有IP地址。 与A ctive Directory 或 LDAP 服务器的连接将始终按照检索的顺序进行尝试。 将始终按照检索到 Active Directory 或 LDAP 服务器的顺序尝试连接。 这与failover的不同之处在于,列表没有重新排序,并且 如果服务器在列表开始时出现故障,它仍会尝试进行后续连接。
  • round_robin: 连接将不断遍历提供的 URL 列表。 如果某一台服务器不可用,将继续遍历 URL 列表,直到成功连接。
  • dns_round_robin: 在这种操作模式下,只能指定一个URL。 此 URL 必须包含一个 DNS 名称。 将向系统查询与此 DNS 名称对应的所有IP地址。 连接将不断遍历地址列表。 如果某一台服务器不可用,将继续遍历 URL 列表,直到成功连接。

常规TLS设置

xpack.security.ssl.diagnose.trust
是否输出 SSL/TLS 信任失败的诊断消息。 如果设置为true(默认值),则每当 SSL 连接(传入或传出)由于无法建立信任而被拒绝时,就会在 Elasticsearch 日志中打印一条消息。 此诊断信息包含可用于确定故障原因并帮助解决问题的信息。 设置为 false 以禁用此消息。 注意:当 xpack.security.fips_mode.enabled 设置为 true 时,其默认值为 false
TLS/SSL密钥和可信证书设置

以下设置用于指定通过SSL/TLS连接进行通信时应使用的私钥、证书和可信证书。 如果未配置可信证书,JVM信任的默认证书将与同一上下文中与密钥关联的证书一起受信任。 对于需要客户端身份验证的连接,或者充当启用SSL的服务器时,必须准备好密钥和证书。

在 PKCS#12 文件中存储可信证书,虽然受支持,但在实际使用中并不常见。 elasticsearch-certutil 工具 以及 Java的keytool被设计用于生成 PKCS#12 文件,这些文件既可用作密钥库,也可用作信任库,但对于使用其他工具创建的容器文件,情况可能并非如此。 通常,PKCS#12 文件只包含机密和私有的信息。 要确认 PKCS#12 容器中包含可信证书("anchor")信息,请在 openssl pkcs12 -info 输出中查找 2.16.840.1.113894.746875.1.1: <Unsupported tag 6> ,或在 keytool -list 输出中查找 trustedCertEntry

HTTP TLS/SSL 设置

可以配置以下TLS/SSL设置。

xpack.security.http.ssl.enabled
用于启用或禁用 TLS/SSL。默认值为 false
xpack.security.http.ssl.supported_protocols

支持的协议版本。可用的协议包括:SSLv2HelloSSLv3TLSv1TLSv1.1TLSv1.2TLSv1.3。 如果 JVM 的 SSL 提供程序支持 TLSv1.3,则默认值为 TLSv1.3,TLSv1.2,TLSv1.1;否则,默认值为 TLSv1.2,TLSv1.1

如果 xpack.security.fips_mode.enabledtrue,则不能使用 SSLv2HelloSSLv3。参考 FIPS 140-2

xpack.security.http.ssl.client_authentication
控制服务器从客户端连接请求证书时的行为。 有效值为 requiredoptionalnonerequired强制客户端提供证书,而 optional 会向客户端请求证书,但不要求客户端提供证书。 默认值为 none
xpack.security.http.ssl.cipher_suites

支持的密码套件因使用的 Java 版本而异。 例如,对于版本11,默认值为 TLS_AES_256_GCM_SHA384, TLS_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_GCM_SHA384, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA.

上面列出的默认密码套件包括 TLSv1.3 密码和需要 Java 加密扩展(JCE)无限强度权限策略文件进行256位 AES 加密的密码。 如果 TLSv1.3 不可用,则 TLSv1.3 密码 TLS_AES_256_GCM_SHA384TLS_AES_128_GCM_SHA256 不会包括在默认列表中。 如果 256-bit AES 不可用,则名字中有AES_256的密码不会包含在默认列表中。 最后,AES GCM 在 Java 11 之前的版本中存在已知的性能问题,只有在使用 Java 11 或更高版本时才会包含在默认列表中。

有关更多信息,请参见Oracle的 Java加密体系结构文档

HTTP TLS/SSL 密钥和可信证书设置

以下设置用于指定通过SSL/TLS连接进行通信时应使用的私钥、证书和可信证书。 必须配置私钥和证书。

PEM 编码文件

使用 PEM 编码文件时,请使用以下设置:

xpack.security.http.ssl.key
包含私钥的 PEM 编码文件的路径。
xpack.security.http.ssl.key_passphrase
用于解密私钥的密码。由于密钥可能没有加密,因此该值是可选的。
xpack.security.http.ssl.secure_key_passphrase (安全)
用于解密私钥的密码。由于密钥可能没有加密,因此该值是可选的。
xpack.security.http.ssl.certificate
指定与密钥相关的 PEM 编码证书(或证书链)的路径。
xpack.security.http.ssl.certificate_authorities
应该受信任的 PEM 编码证书文件的路径列表。

Java 密钥库文件

使用包含私钥、证书和应该信任的证书的 Java 密钥库文件(JKS, Java keystore file)时,请使用以下设置:

xpack.security.http.ssl.keystore.path
包含私钥和证书的密钥库文件的路径。
xpack.security.http.ssl.keystore.password
密钥库的密码。
xpack.security.http.ssl.keystore.secure_password (安全)
密钥库的密码。
xpack.security.http.ssl.keystore.key_password
密钥库中密钥的密码。默认值是 密钥库密码(keystore password)
xpack.security.http.ssl.keystore.secure_key_password (安全)
密钥库中密钥的密码。默认值是 密钥库密码(keystore password)
xpack.security.http.ssl.truststore.path
包含要信任的证书的密钥库的路径。 它必须是 Java 密钥库(jks) 或 PKCS#12 文件。
xpack.security.http.ssl.truststore.password
信任库的密码。
xpack.security.http.ssl.truststore.secure_password (安全)
信任库的密码。

PKCS#12 文件

Elasticsearch可以配置为使用 PKCS#12 容器文件(.p12.pfx文件),它包含私钥、证书和应该被信任的证书。

PKCS#12 文件的配置方式与 Java 密钥库文件相同:

xpack.security.http.ssl.keystore.path
包含私钥和证书的密钥库文件的路径。
xpack.security.http.ssl.keystore.type
密钥库文件的格式,必须是 jksPKCS12。 如果秘钥库路径以 ".p12"、".pfx" 或 ".pkcs12" 结尾,则其默认值为 PKCS12;否则,默认值为 jks
xpack.security.http.ssl.keystore.password
密钥库的密码。
xpack.security.http.ssl.keystore.secure_password (安全)
密钥库的密码。
xpack.security.http.ssl.keystore.key_password
密钥库中密钥的密码。默认值是密钥库密码。
xpack.security.http.ssl.keystore.secure_key_password (安全)
密钥库中密钥的密码。默认值是密钥库密码。
xpack.security.http.ssl.truststore.path
包含要信任的证书的密钥库的路径。它必须是Java密钥库(jks) 或 PKCS#12 文件。
xpack.security.http.ssl.truststore.type
将此项设置为 PKCS12 ,以表明信任库是 PKCS#12 文件。
xpack.security.http.ssl.truststore.password
信任库的密码。
xpack.security.http.ssl.truststore.secure_password (安全)
信任库的密码。

PKCS#11 令牌

Elasticsearch 可以被配置为使用 PKCS#11 令牌,该令牌包含私钥、证书和应该被信任的证书。

PKCS#11 令牌需要在JVM级别进行额外配置,可以通过以下设置启用:

xpack.security.http.keystore.type
将此项设置为 PKCS11 ,以表明 PKCS#11 令牌应该被用作密钥库。
xpack.security.http.truststore.type
信任库文件的格式。 对于Java秘钥库格式,使用 jks。 对于 PKCS#12 文件,使用 PKCS12。 对于 PKCS#11 令牌, 使用 PKCS11。 默认值为 jks

在配置 PKCS#11 令牌(即 JVM 被配置为用作 Elasticsearch 的密钥库或信任库)时,可以通过在所配置的上下文中将适当的值设置为ssl.truststore.passwordssl.truststore.secure_password来配置令牌的PIN。 由于只能配置一个 PKCS#11 令牌,因此在 Elasticsearch 中只能配置一个密钥库和信任库。 这反过来意味着只有一个证书可用于传输层和http层的TLS。

传输层 TLS/SSL 设置

你可以配置以下TLS/SSL设置。

xpack.security.transport.ssl.enabled
用于启用或禁用 TLS/SSL。默认值为 false
xpack.security.transport.ssl.supported_protocols

支持的协议版本。可用的协议包括:SSLv2HelloSSLv3TLSv1TLSv1.1TLSv1.2TLSv1.3。 如果 JVM 的 SSL 提供程序支持 TLSv1.3,则默认值为 TLSv1.3,TLSv1.2,TLSv1.1;否则,默认值为 TLSv1.2,TLSv1.1

如果 xpack.security.fips_mode.enabledtrue,则不能使用 SSLv2HelloSSLv3。参考 FIPS 140-2

xpack.security.transport.ssl.client_authentication
控制服务器从客户端连接请求证书时的行为。 有效值为 requiredoptionalnonerequired强制客户端提供证书,而 optional 会向客户端请求证书,但不要求客户端提供证书。 默认值为 none
xpack.security.transport.ssl.verification_mode

控制证书的验证。 可用的值有:

  • full,用于验证所提供的证书是否由可信机构(CA)签名,还验证服务器的主机名(或IP地址)是否与证书中标识的名称匹配。
  • certificate,用于验证所提供的证书是否由可信机构(CA)签名,但不执行任何主机名验证。
  • none不验证服务器的证书。 这种模式禁用了 SSL/TLS 的许多安全优势,应该在非常谨慎的考虑之后才使用。 它主要用作尝试解决 TLS 错误时的临时诊断机制;强烈建议不要在生产集群上使用它。

    默认值为 full

xpack.security.transport.ssl.cipher_suites

支持的密码套件因使用的 Java 版本而异。例如,对于版本11,默认值为 TLS_AES_256_GCM_SHA384, TLS_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_GCM_SHA384, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA.

上面列出的默认密码套件包括 TLSv1.3 密码和需要 Java 加密扩展(JCE)无限强度权限策略文件进行256位 AES 加密的密码。 如果 TLSv1.3 不可用,则 TLSv1.3 密码 TLS_AES_256_GCM_SHA384TLS_AES_128_GCM_SHA256 不会包括在默认列表中。 如果 256-bit AES 不可用,则名字中有AES_256的密码不会包含在默认列表中。 最后,AES GCM 在 Java 11 之前的版本中存在已知的性能问题,只有在使用 Java 11 或更高版本时才会包含在默认列表中。

有关更多信息,请参见Oracle的 Java加密体系结构文档

传输时的 TLS/SSL 密钥和可信证书设置

以下设置用于指定通过SSL/TLS连接进行通信时应使用的私钥、证书和可信证书。 必须配置私钥和证书。

PEM 编码文件

使用 PEM 编码文件时,请使用以下设置:

xpack.security.transport.ssl.key
包含私钥的 PEM 编码文件的路径。
xpack.security.transport.ssl.key_passphrase
用于解密私钥的密码。由于密钥可能没有加密,因此该值是可选的。
xpack.security.transport.ssl.secure_key_passphrase (安全)
用于解密私钥的密码。由于密钥可能没有加密,因此该值是可选的。
xpack.security.transport.ssl.certificate
指定与密钥相关的 PEM 编码证书(或证书链)的路径。
xpack.security.transport.ssl.certificate_authorities
应该受信任的 PEM 编码证书文件的路径列表。

Java 密钥库文件

使用包含私钥、证书和应该信任的证书的 Java 密钥库文件(JKS, Java keystore file)时,请使用以下设置:

xpack.security.transport.ssl.keystore.path
包含私钥和证书的密钥库文件的路径。
xpack.security.transport.ssl.keystore.password
密钥库的密码。
xpack.security.transport.ssl.keystore.secure_password (安全)
密钥库的密码。
xpack.security.transport.ssl.keystore.key_password
密钥库中密钥的密码。默认值是密钥库密码。
xpack.security.transport.ssl.keystore.secure_key_password (安全)
密钥库中密钥的密码。默认值是密钥库密码。
xpack.security.transport.ssl.truststore.path
包含要信任的证书的密钥库的路径。它必须是Java密钥库(jks) 或 PKCS#12 文件。
xpack.security.transport.ssl.truststore.password
信任库的密码。
xpack.security.transport.ssl.truststore.secure_password (安全)
信任库的密码。

PKCS#12 文件

Elasticsearch可以配置为使用 PKCS#12 容器文件(.p12.pfx文件),它包含私钥、证书和应该被信任的证书。

PKCS#12 文件的配置方式与 Java 密钥库文件相同:

xpack.security.transport.ssl.keystore.path
包含私钥和证书的密钥库文件的路径。
xpack.security.transport.ssl.keystore.type
密钥库文件的格式,必须是 jksPKCS12。 如果秘钥库路径以 ".p12"、".pfx" 或 ".pkcs12" 结尾,则其默认值为 PKCS12;否则,默认值为 jks
xpack.security.transport.ssl.keystore.password
密钥库的密码。
xpack.security.transport.ssl.keystore.secure_password (安全)
密钥库的密码。
xpack.security.transport.ssl.keystore.key_password
密钥库中密钥的密码。默认值是密钥库密码。
xpack.security.transport.ssl.keystore.secure_key_password (安全)
密钥库中密钥的密码。默认值是密钥库密码。
xpack.security.transport.ssl.truststore.path
包含要信任的证书的密钥库的路径。它必须是Java密钥库(jks) 或 PKCS#12 文件。
xpack.security.transport.ssl.truststore.type
将此项设置为 PKCS12 ,以表明信任库是 PKCS#12 文件。
xpack.security.transport.ssl.truststore.password
信任库的密码。
xpack.security.transport.ssl.truststore.secure_password (安全)
信任库的密码。

PKCS#11 令牌

Elasticsearch 可以被配置为使用 PKCS#11 令牌,该令牌包含私钥、证书和应该被信任的证书。

PKCS#11 令牌需要在JVM级别进行额外配置,可以通过以下设置启用:

xpack.security.transport.keystore.type
将此项设置为 PKCS11,以表明 PKCS#11 令牌应该被用作密钥库。
xpack.security.transport.truststore.type
信任库文件的格式。 对于Java秘钥库格式,使用 jks。 对于 PKCS#12 文件,使用 PKCS12。 对于 PKCS#11 令牌, 使用 PKCS11。 默认值为 jks

在配置 PKCS#11 令牌(即 JVM 被配置为用作 Elasticsearch 的密钥库或信任库)时,可以通过在所配置的上下文中将适当的值设置为ssl.truststore.passwordssl.truststore.secure_password来配置令牌的PIN。 由于只能配置一个 PKCS#11 令牌,因此在 Elasticsearch 中只能配置一个密钥库和信任库。 这反过来意味着只有一个证书可用于传输层和http层的TLS。

传输配置(transport profile)的 TLS/SSL 设置
(这里的 "transport profile" 可能翻译的不对, 但是我暂时还未找到更合适的翻译. By: aben)

适用于默认传输机制(default transport)的设置也适用于每个 传输配置(transport profile)。 默认情况下,除非指定,否则 传输配置 的设置将与 默认传输机制 相同。

举个例子,让我们看看密钥设置。 对于 默认传输机制 来说,这个属性叫 xpack.security.transport.ssl.key。 为了在一个 传输配置 中使用此设置,使用前缀 transport.profiles.$PROFILE.xpack.security. 并在 xpack.security.transport. 后追加设置部分。 对于密钥设置,是 transport.profiles.$PROFILE.xpack.security.ssl.key

IP 过滤设置

可以为 IP 过滤配置下列设置。

xpack.security.transport.filter.allow
允许的IP地址列表。
xpack.security.transport.filter.deny
拒绝的IP地址列表。
xpack.security.http.filter.allow
只允许HTTP的IP地址列表。
xpack.security.http.filter.deny
仅针对HTTP拒绝的IP地址列表。
transport.profiles.$PROFILE.xpack.security.filter.allow
此 配置文件(profile) 允许的IP地址列表。
transport.profiles.$PROFILE.xpack.security.filter.deny
此 配置文件(profile) 拒绝的IP地址列表

用户缓存和密码哈希算法 (user cache and password hash algorithms)

某些领域将用户凭据存储在内存中。 为了减少凭据被盗的风险并减少凭据泄露,缓存仅在内存中存储用户凭据的哈希版本。 默认情况下,用户缓存使用加盐的sha-256哈希算法进行哈希处理。 通过将 cache.hash_algo 领域设置为下面的任意一个值以使用不同的哈希算法:

表 1. 缓存哈希算法

算法

描述

ssha256

使用一个加盐的 sha-256 算法 (默认值)。

md5

使用 MD5 算法。

sha1

使用 SHA1 算法。

bcrypt

使用 bcrypt 算法,对盐进行 1024 轮处理。

bcrypt4

使用 bcrypt 算法,盐是 16 轮处理后产生的。

bcrypt5

使用 bcrypt 算法,盐是 32 轮处理后产生的。。

bcrypt6

使用 bcrypt 算法,盐是 64 轮处理后产生的。。

bcrypt7

使用 bcrypt 算法,盐是 128 轮处理后产生的。。

bcrypt8

使用 bcrypt 算法,盐是 256 轮处理后产生的。

bcrypt9

使用 bcrypt 算法,盐是 512 轮处理后产生的。

pbkdf2

使用 PBKDF2 密钥派生函数,以 HMAC-SHA512 为伪随机函数,使用 10,000 次迭代。

pbkdf2_1000

使用 PBKDF2 密钥派生函数,以 HMAC-SHA512 为伪随机函数,使用 1000 次迭代。

pbkdf2_10000

使用 PBKDF2 密钥派生函数,以 HMAC-SHA512 为伪随机函数,使用 10,000 次迭代。

pbkdf2_50000

使用 PBKDF2 密钥派生函数,以 HMAC-SHA512 为伪随机函数,使用 50,000 次迭代。

pbkdf2_100000

使用 PBKDF2 密钥派生函数,以 HMAC-SHA512 为伪随机函数,使用 100,000 次迭代。

pbkdf2_500000

使用 PBKDF2 密钥派生函数,以 HMAC-SHA512 为伪随机函数,使用 500,000 次迭代。

pbkdf2_1000000

使用 PBKDF2 密钥派生函数,以 HMAC-SHA512 为伪随机函数,使用 1,000,000 次迭代。

noop,clear_text

不会对凭据进行哈希处理,而是以明文形式保存在内存中。 注意:保持明文被认为是不安全的,并且会在操作系统级别妥协(例如通过内存转储和使用ptrace)。

同样,存储密码的领域使用加密性强且特定于密码的盐对密码进行哈希处理。 通过将 xpack.security.authc.password_hashing.algorithm 设置为以下值之一,可以配置密码哈希算法:

表 2. 密码哈希算法

算法 描述

bcrypt

使用 bcrypt 算法,盐是 1024 轮处理后产生的。(默认值)

bcrypt4

使用 bcrypt 算法,盐是 16 轮处理后产生的。

bcrypt5

使用 bcrypt 算法,盐是 32 轮处理后产生的。

bcrypt6

使用 bcrypt 算法,盐是 64 轮处理后产生的。

bcrypt7

使用 bcrypt 算法,盐是 128 轮处理后产生的。

bcrypt8

使用 bcrypt 算法,盐是 256 轮处理后产生的。

bcrypt9

使用 bcrypt 算法,盐是 512 轮处理后产生的。

bcrypt10

使用 bcrypt 算法,盐是 1024 轮处理后产生的。

bcrypt11

使用 bcrypt 算法,盐是 2048 轮处理后产生的。

bcrypt12

使用 bcrypt 算法,盐是 4096 轮处理后产生的。

bcrypt13

使用 bcrypt 算法,盐是 8192 轮处理后产生的。

bcrypt14

使用 bcrypt 算法,盐是 16384 轮处理后产生的。

pbkdf2

使用 PBKDF2 密钥派生函数,以 HMAC-SHA512 为伪随机函数,使用 10,000 次迭代。

pbkdf2_1000

使用 PBKDF2 密钥派生函数,以 HMAC-SHA512 为伪随机函数,使用 1,000 次迭代。

pbkdf2_10000

使用 PBKDF2 密钥派生函数,以 HMAC-SHA512 为伪随机函数,使用 10,000 次迭代。

pbkdf2_50000

使用 PBKDF2 密钥派生函数,以 HMAC-SHA512 为伪随机函数,使用 50,000 次迭代。

pbkdf2_100000

使用 PBKDF2 密钥派生函数,以 HMAC-SHA512 为伪随机函数,使用 100,000 次迭代。

pbkdf2_500000

使用 PBKDF2 密钥派生函数,以 HMAC-SHA512 为伪随机函数,使用 500,000 次迭代。

pbkdf2_1000000

使用 PBKDF2 密钥派生函数,以 HMAC-SHA512 为伪随机函数,使用 1,000,000 次迭代。