本地英文版地址: ../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_dn
和bind_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.yml
的 xpack.security.authc.realms
命名空间下配置领域设置。
比如:
xpack.security.authc.realms: native.realm1: order: 0 ... ldap.realm2: order: 1 ... active_directory.realm3: order: 2 ... ...
有效设置因领域类型而异。 更多信息请参考 用户身份验证。
对所有领域有效的设置
-
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"
)。虽然两者都受支持,但是不能混合使用
ldap
和ldaps
协议。 -
load_balance.type
-
定义了多个 LDAP url地址时使用的行为。
关于支持的值,请参考 负载均衡和故障转移类型。
默认值为
failover
。 -
load_balance.cache_ttl
-
当负载均衡的类型为
dns_failover
或dns_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_tree
、one_level
、base
。one_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_tree
、one_level
还是base
。one_level
搜索直接包含在base_dn
中的对象。sub_tree
搜索base_dn
中的所有对象。base
指定base_dn
是组对象,并且是唯一被考虑的组。 默认值为sub_tree
。 -
group_search.filter
-
指定用于查找组的筛选器。
如果未设置,领域将使用属性
member
、memberOf
或memberUid
搜索group
、groupOfNames
、groupOfUniqueNames
或posixGroup
。 筛选器中的任何{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
-
密钥库文件的格式,必须是
jks
或PKCS12
。 如果秘钥库路径以 ".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
-
支持的协议版本。可用的协议包括:
SSLv2Hello
,SSLv3
,TLSv1
,TLSv1.1
,TLSv1.2
,TLSv1.3
。 如果 JVM 的 SSL 提供程序支持 TLSv1.3,则默认值为TLSv1.3,TLSv1.2,TLSv1.1
;否则,默认值为TLSv1.2,TLSv1.1
如果
xpack.security.fips_mode.enabled
为true
,则不能使用SSLv2Hello
或SSLv3
。参考 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_SHA384
和TLS_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"
)。虽然两者都受支持,但是不能混合使用
ldap
和ldaps
协议。如果 URL 未指定,Elasticsearch 会使用默认值
ldap://<domain_name>:389
。 此默认值使用domain_name
的值,并假设到端口 389 的连接未加密。 -
load_balance.type
-
定义了多个 LDAP url地址时使用的行为。
关于支持的值,请参考 负载均衡和故障转移类型。
默认值为
failover
-
load_balance.cache_ttl
-
当负载均衡的类型为
dns_failover
或dns_round_robin
时,这个设置用来控制 DNS 查找缓存的时间。 默认值为1h
-
domain_name
-
Active Directory 的 域名(domain name)。
如果
url
和user_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_tree
、one_level
还是base
。one_level
搜索直接包含在base_dn
中的用户。sub_tree
搜索base_dn
中的所有对象。base
指定base_dn
是用户对象,并且是唯一被考虑的用户。 默认值为sub_tree
-
user_search.filter
-
指定用于查找给定用户名的用户的筛选器。
默认筛选器使用
sAMAccountName
或userPrincipalName
查找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_tree
、one_level
还是base
。one_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
-
密钥库文件的格式,必须是
jks
或PKCS12
。 如果秘钥库路径以 ".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
-
支持的协议版本。可用的协议包括:
SSLv2Hello
,SSLv3
,TLSv1
,TLSv1.1
,TLSv1.2
,TLSv1.3
。 如果 JVM 的 SSL 提供程序支持 TLSv1.3,则默认值为TLSv1.3,TLSv1.2,TLSv1.1
;否则,默认值为TLSv1.2,TLSv1.1
如果
xpack.security.fips_mode.enabled
为true
,则不能使用SSLv2Hello
或SSLv3
。参考 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_SHA384
和TLS_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.path
或certificate_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.key
或signing.keystore.path
),那么 Elasticsearch 会对传出的 SAML 消息进行签名。
可以使用以下设置来配置签名:
-
signing.saml_messages
-
应签名的SAML消息类型列表,或使用
*
表示对所有消息进行签名。 列表中的每个元素都应该是SAML XML元素的本地名称。 支持的元素类型有AuthnRequest
、LogoutRequest
及LogoutResponse
。 还必须同时指定了signing.key
或signing.keystore.path
才有效。 默认值为*
-
signing.key
-
指定用于SAML消息签名的PEM编码私钥的路径。
signing.key
和signing.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
中的密钥库的类型,必须是jks
或PKCS12
。 如果秘钥库路径以 ".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.key
或 encryption.keystore.path
),那么 Elasticsearch 会在生成元数据时发布加密证书,并尝试解密传入的 SAML 内容。
可以使用以下设置来配置加密:
-
encryption.key
-
用于SAML消息解密的PEM编码私钥的路径。
encryption.key
和encryption.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
-
密钥库文件的格式,必须是
jks
或PKCS12
。 如果秘钥库路径以 ".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
-
信任库文件的格式,必须是
jks
或PKCS12
。 如果秘钥库路径以 ".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
-
支持的协议版本。可用的协议包括:
SSLv2Hello
,SSLv3
,TLSv1
,TLSv1.1
,TLSv1.2
,TLSv1.3
。 如果 JVM 的 SSL 提供程序支持 TLSv1.3,则默认值为TLSv1.3,TLSv1.2,TLSv1.1
;否则,默认值为TLSv1.2,TLSv1.1
如果
xpack.security.fips_mode.enabled
为true
,则不能使用SSLv2Hello
或SSLv3
。参考 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_SHA384
和TLS_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_token
、id_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
-
密钥库文件的格式,必须是
jks
或PKCS12
。 如果秘钥库路径以 ".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
-
密钥库文件的格式,必须是
jks
或PKCS12
。 如果秘钥库路径以 ".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
-
支持的协议版本。可用的协议包括:
SSLv2Hello
,SSLv3
,TLSv1
,TLSv1.1
,TLSv1.2
,TLSv1.3
。 如果 JVM 的 SSL 提供程序支持 TLSv1.3,则默认值为TLSv1.3,TLSv1.2,TLSv1.1
;否则,默认值为TLSv1.2,TLSv1.1
如果
xpack.security.fips_mode.enabled
为true
,则不能使用SSLv2Hello
或SSLv3
。参考 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_SHA384
和TLS_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
可以配置以下TLS/SSL设置。
-
xpack.security.http.ssl.enabled
-
用于启用或禁用 TLS/SSL。默认值为
false
-
xpack.security.http.ssl.supported_protocols
-
支持的协议版本。可用的协议包括:
SSLv2Hello
,SSLv3
,TLSv1
,TLSv1.1
,TLSv1.2
,TLSv1.3
。 如果 JVM 的 SSL 提供程序支持 TLSv1.3,则默认值为TLSv1.3,TLSv1.2,TLSv1.1
;否则,默认值为TLSv1.2,TLSv1.1
如果
xpack.security.fips_mode.enabled
为true
,则不能使用SSLv2Hello
或SSLv3
。参考 FIPS 140-2。 -
xpack.security.http.ssl.client_authentication
-
控制服务器从客户端连接请求证书时的行为。
有效值为
required
、optional
及none
。required
强制客户端提供证书,而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_SHA384
和TLS_AES_128_GCM_SHA256
不会包括在默认列表中。 如果 256-bit AES 不可用,则名字中有AES_256
的密码不会包含在默认列表中。 最后,AES GCM 在 Java 11 之前的版本中存在已知的性能问题,只有在使用 Java 11 或更高版本时才会包含在默认列表中。有关更多信息,请参见Oracle的 Java加密体系结构文档 。
使用 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 密钥库文件(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
(安全) - 信任库的密码。
Elasticsearch可以配置为使用 PKCS#12 容器文件(.p12
或 .pfx
文件),它包含私钥、证书和应该被信任的证书。
PKCS#12 文件的配置方式与 Java 密钥库文件相同:
-
xpack.security.http.ssl.keystore.path
- 包含私钥和证书的密钥库文件的路径。
-
xpack.security.http.ssl.keystore.type
-
密钥库文件的格式,必须是
jks
或PKCS12
。 如果秘钥库路径以 ".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
(安全) - 信任库的密码。
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.password
或 ssl.truststore.secure_password
来配置令牌的PIN。
由于只能配置一个 PKCS#11 令牌,因此在 Elasticsearch 中只能配置一个密钥库和信任库。
这反过来意味着只有一个证书可用于传输层和http层的TLS。
你可以配置以下TLS/SSL设置。
-
xpack.security.transport.ssl.enabled
-
用于启用或禁用 TLS/SSL。默认值为
false
-
xpack.security.transport.ssl.supported_protocols
-
支持的协议版本。可用的协议包括:
SSLv2Hello
,SSLv3
,TLSv1
,TLSv1.1
,TLSv1.2
,TLSv1.3
。 如果 JVM 的 SSL 提供程序支持 TLSv1.3,则默认值为TLSv1.3,TLSv1.2,TLSv1.1
;否则,默认值为TLSv1.2,TLSv1.1
如果
xpack.security.fips_mode.enabled
为true
,则不能使用SSLv2Hello
或SSLv3
。参考 FIPS 140-2。 -
xpack.security.transport.ssl.client_authentication
-
控制服务器从客户端连接请求证书时的行为。
有效值为
required
、optional
及none
。required
强制客户端提供证书,而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_SHA384
和TLS_AES_128_GCM_SHA256
不会包括在默认列表中。 如果 256-bit AES 不可用,则名字中有AES_256
的密码不会包含在默认列表中。 最后,AES GCM 在 Java 11 之前的版本中存在已知的性能问题,只有在使用 Java 11 或更高版本时才会包含在默认列表中。有关更多信息,请参见Oracle的 Java加密体系结构文档 。
使用 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 密钥库文件(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
(安全) - 信任库的密码。
Elasticsearch可以配置为使用 PKCS#12 容器文件(.p12
或 .pfx
文件),它包含私钥、证书和应该被信任的证书。
PKCS#12 文件的配置方式与 Java 密钥库文件相同:
-
xpack.security.transport.ssl.keystore.path
- 包含私钥和证书的密钥库文件的路径。
-
xpack.security.transport.ssl.keystore.type
-
密钥库文件的格式,必须是
jks
或PKCS12
。 如果秘钥库路径以 ".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
(安全) - 信任库的密码。
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.password
或 ssl.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. 缓存哈希算法
算法 |
描述 |
||
|
使用一个加盐的 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
不会对凭据进行哈希处理,而是以明文形式保存在内存中。
注意:保持明文被认为是不安全的,并且会在操作系统级别妥协(例如通过内存转储和使用 |
同样,存储密码的领域使用加密性强且特定于密码的盐对密码进行哈希处理。
通过将 xpack.security.authc.password_hashing.algorithm
设置为以下值之一,可以配置密码哈希算法:
表 2. 密码哈希算法
算法 | 描述 | ||
---|---|---|---|
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |
||
|
使用 |