【Elasticsearch7.0】之安全配置

  |   0 评论   |   181 浏览

默认情况下,当你拥有基本许可证或试用许可证时,将禁用Elasticsearch安全特性,使用xpack.security.enabled来开启安全配置,可以配置xpack.security为允许匿名访问、执行消息身份验证、建立文档和字段级别的安全性、配置服务器、使用SSL加密通信、审计的安全事件等相关配置。
所有这些配置都可以在elasticsearch.yml文件中进行配置,除了添加到Elasticsearch密钥存储库的安全设置之外。

普通的安全设置

xpack.security.enabled
设置为true来开启安全设置,如果设置为false,表示禁用安全设置。这个参数会影响其他连接到es上的实例,如:Kibana,

xpack.security.hide_settings
cluster nodes info接口的返回值会过滤掉该配置下的内容,该配置以逗号隔开的列表数据,或者可以使用通配符,如:xpack.security.authc.realms.active_directory.ad1.*,表示过滤了所有ad1的active_directory权限,由于信息的敏感性,该API已经过滤了所有ssl设置、bind_dn和bind_password。

xpack.security.fips_mode.enabled
启用fips操作模式。如果在FIPS 140-2可用的JVM中运行Elasticsearch实例,可以把该配置设置为true,默认是false。

默认密码安全设置

xpack.security.authc.accept_default_password
设置为false,表示不支持默认的密码,默认密码为:changeme

密码hash设置

xpack.security.authc.password_hashing.algorithm
指定用于安全用户凭据存储的哈希算法,默认是bcrypt。

匿名访问设置

可以在elasticsearch.yml里面配置匿名访问相关的设置:
xpack.security.authc.anonymous.username
匿名用户的用户名,默认是_es_anonymous_user。

xpack.security.authc.anonymous.roles
与匿名用户关联的角色,必须要设置。

xpack.security.authc.anonymous.authz_exception
设置为true时,如果匿名用户没有操作权限,那么会返回403,不会提示用户提供访问请求资源的凭据。设置为false时,会返回401,并且用户可以提供具有适当权限的凭据来获得访问权限,默认是true。

automata设置

在安全特性接受通配符模式的地方(例如角色中的索引模式、角色映射API中的组匹配),每个模式都被编译成一个自动机,以下设置可用于控制此行为:
xpack.security.automata.max_determinized_states
一个模式可以创建多少个自动状态是有上限的,这可以防止过于困难的模式(例如指数级困难),默认为100000。

xpack.security.automata.cache.enabled
是否缓存编译后的自动机,编译自动机可能是CPU密集型的,并且可能会减慢一些操作,缓存减少了需要编译自动机的频率。默认值为true。

xpack.security.automata.cache.size
保留在自动缓存项中的最大数目,默认为10000。

xpack.security.automata.cache.ttl
保留在自动缓存项中的时间长度(根据最近的使用情况),默认为48小时。

文档和属性等级安全设置

可以在elasticsearch.yml文件中配置:
xpack.security.dls_fls.enabled
设置false去关闭文档和属性等级安全配置,默认是true。

令牌服务设置

可以在elasticsearch.yml文件中配置:
xpack.security.authc.token.enabled
设置为false,关闭内置的令牌服务,默认为true,除非xpack.security.http.ssl.enabled设置为false,可以阻止http请求访问令牌服务。

xpack.security.authc.token.timeout
令牌的有效期,默认是20分钟,最大是1小时。

API密钥服务设置

xpack.security.authc.api_key.enabled
设置为false,表示禁用,默认是true,除非xpack.security.http.ssl.enabled设置为false,可以阻止http请求访问api密钥服务。

xpack.security.authc.api_key.hashing.algorithm
指定用于保护API密钥凭据的哈希算法,默认是pbkdf2。

xpack.security.authc.api_key.cache.ttl
api密钥的存活时间,在这段时间内缓存API密钥id及其散列,使用标准的Elasticsearch时间单位指定时间周期,默认是1天。

xpack.security.authc.api_key.cache.max_keys
在缓存时间里,可以存放的最大API密钥的数量,默认是10,000。

xpack.security.authc.api_key.cache.hash_algo
(高级设置)用于内存缓存API密钥凭据的哈希算法,默认是ssha256。

realm(区域)设置

可以在elasticsearch.yml文件中使用xpack.security.authc.realms前缀来配置realm设置,如:

xpack.security.authc.realms:
    native.realm1:
        order: 0
        ...
    ldap.realm2:
        order: 1
        ...
    active_directory.realm3:
        order: 2
        ...
    ...

所有realm共有的配置

type
可以配置以下几个值:native,ldapactive_directorypki, 或者file`,该配置是必须的。

order
优先级,order越小优先级越高,虽然不是必须的,但是如果配置了多个realm,最好设置该值,默认值为Integer.MAX_VALUE。

enabled
realm是否开启,可以通过该参数来禁用realm配置,配置信息还是继续保留,默认是true。

本机realm配置

type必须设置为native,除了共有的配置外,还可以配置以下属性:
cache.ttl
用户信息缓存的存活时间,在这段时间内缓存一个用户及其凭证的散列,使用标准的Elasticsearch时间单位指定时间周期,默认20分钟。

cache.max_users
缓存中可以设置最大的用户数,默认是100,000。

cache.hash_algo
(高级设置)用于内存中缓存的用户凭据的哈希算法,默认是ssha256。

authentication.enabled
如果设置为false,则禁用此域中的身份验证支持,只支持查询功能,默认是true。

文件realm配置

cache.ttl
type必须设置为file,除了共有的配置外,还可以配置以下属性:

用户信息缓存的存活时间,在这段时间内缓存一个用户及其凭证的散列,使用标准的Elasticsearch时间单位指定时间周期,默认20分钟。

cache.max_users
缓存中可以设置最大的用户数,默认是100,000。

cache.hash_algo
(高级设置)用于内存中缓存的用户凭据的哈希算法,默认是ssha256。

authentication.enabled
如果设置为false,则禁用此域中的身份验证支持,只支持查询功能,默认是true。

LDAP realm配置

type设置为ldap,除了共有的配置外,还可以配置以下属性:

url
可以配置1个或者多个地址,格式为:ldap[s]://<server>:<port>,这个配置是必须的,示例如:[“ldap://server1:636”, “ldap://server2:636”]、“ldap://server1:636, ldap://server2:636”。虽然支持ldap和ldaps,但是配置里面不能混合配置。错误的配置:“ldap://server1:636, ldaps://server2:636”。

load_balance.type
定义多个LDAP url时使用的行为,支持配置的值为:failover、dns_failover、round_robin、dns_round_robin。默认是failover。

load_balance.cache_ttl
当load_balance.type配置为dns_failover或者dns_round_robin时该设置控制缓存DNS查找的时间量,默认为1小时。

bind_dn
用于绑定到LDAP并执行搜索的用户的DN,只适用于用户搜索模式,如果没有指定,将尝试匿名绑定,默认为空。由于其潜在的安全影响,bind_dn没有通过节点信息API公开。

bind_password
在6.3已经弃用了,使用secure_bind_password来替换。用于绑定到LDAP目录的用户的密码,默认为空,由于潜在的安全影响,bind_password没有通过节点信息API公开。

secure_bind_password
用于绑定到LDAP目录的用户的密码。默认为空。

user_dn_templates
用字符串{0}替换用户名的DN模板,可以设置多个值,可以指定多个用户上下文,需要在用户模板模式下操作,如果user_search.base_dn参数被指定,那么该配置就会无效。注意任何user_search被设置,user_dn_templates配置将被忽略。

authorization_realms
应该为委托授权咨询的realm的名称,如果使用此设置,则LDAP realm不执行角色映射,而是从列出的realm加载用户,参考的realm按照列表中定义它们的顺序进行查询。

user_group_attribute
指定要检查用户是否为组成员的属性,如果指定了任何group_search设置,那么该配置将被忽略,默认是memberOf。

user_search.base_dn
指定用于搜索用户的容器DN,需要在用户搜索模式下操作,如果指定user_dn_templates,则此设置无效。

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中弃用,用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
作为健康检查的一部分检索的专有名称。如果存在,默认值为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中定义的user属性替换。

group_search.user_attribute
指定获取并作为参数提供给过滤器的用户属性。如果没有设置,则将用户DN传递到过滤器中。默认为空。

unmapped_groups_as_roles
如果设置为true,则使用任何未映射LDAP组的名称作为角色名称,并将其分配给用户。如果在角色映射文件中没有引用组,则认为该组未映射。不考虑基于api的角色映射。默认值为false。

files.role_mapping
YAML角色映射配置文件的位置。默认为ES_PATH_CONF / role_mapping.yml

follow_referrals
指定Elasticsearch是否应该遵循LDAP服务器返回的引用。引用是服务器返回的url,用于继续LDAP操作(例如,搜索)。默认值为true。

metadata
应该从LDAP服务器加载并存储在经过身份验证的用户的元数据字段中的附加LDAP属性列表。

timeout.tcp_connect
用于建立LDAP连接的TCP连接超时时间。末尾的s表示秒,ms表示毫秒。默认为5s。

timeout.tcp_read
建立LDAP连接后的TCP读取超时时间。末尾的s表示秒,ms表示毫秒。默认是5s。

timeout.ldap_search
LDAP服务器强制LDAP搜索超时。末尾的s表示秒,ms表示毫秒。默认是5s。

ssl.key
包含私钥的PEM编码文件的路径,如果LDAP服务器需要客户端身份验证,则使用私钥。ssl.keyssl.keystore.path不能同时使用。

ssl.key_passphrase
用于解密私钥的口令。此值是可选的,因为密钥可能没有加密。

ssl.secure_key_passphrase
用于解密私钥的口令。

ssl.certificate
指向包含证书(或证书链)的PEM编码文件的路径,该文件将在客户端连接时显示给客户端。

ssl.certificate_authorities
应受信任的PEM编码证书文件的路径列表。ssl.certificate_authoritiesssl.truststore.path不能同时使用。

ssl.keystore.path
包含私钥和证书的Java密钥存储文件的路径。ssl.keyssl.keystore.path不能同时使用。

ssl.keystore.type
密钥存储文件的格式。应该是jks使用Java密钥存储格式,PKCS12使用PKCS#12文件,或者PKCS11使用PKCS#11令牌。默认是jks。

ssl.keystore.password
密钥存储库的密码

ssl.keystore.secure_password
密钥存储库的密码。

ssl.keystore.key_password
密钥存储库中密钥的密码。默认为密钥存储库密码。

ssl.keystore.secure_key_password
密钥存储库中密钥的密码。默认为密钥存储库密码。

ssl.truststore.path
包含要信任的证书的Java密钥存储文件的路径。ssl.certificate_authoritiesssl.truststore.path不能同时使用。

ssl.truststore.password
信任存储库的密码。

ssl.truststore.secure_password
信任存储库的密码。

ssl.truststore.type
密钥存储文件的格式。应该是jks使用Java密钥存储格式,PKCS12使用PKCS#12文件,或者PKCS11使用PKCS#11令牌。缺省值是jks。

ssl.verification_mode
指示使用ldaps防止中间人攻击和伪造证书时的验证类型。值为none、certificate和full。默认为full。

ssl.supported_protocols
支持TLS/SSL协议(带有版本)。如果JVM支持TLSv1.3,则默认为TLSv1.3、TLSv1.2、TLSv1.1,否则为TLSv1.2、TLSv1.1。

ssl.cipher_suites
指定与LDAP服务器通信时应该支持的密码套件。

cache.ttl
指定缓存用户信息的生存时间。在这段时间内缓存一个用户及其凭证的散列。使用标准的弹性搜索时间单位。默认为20分钟。

cache.max_users
指定缓存可以包含的用户信息的最大数量。默认为100000。

cache.hash_algo
(高级设置)指定用于内存缓存用户凭据的哈希算法。默认为ssha256。

authentication.enabled
如果设置为false,则禁用此域中的身份验证支持,只支持用户查找。默认为true。

活动目录realm配置

type必须设置为active_directory,处理共有配置之外,还支持一下配置:
url
可以配置1个或者多个地址,格式为:ldap[s]://<server>:<port>,这个配置是必须的,示例如:[“ldap://server1:636”, “ldap://server2:636”]、“ldap://server1:636, ldap://server2:636”。虽然支持ldap和ldaps,但是配置里面不能混合配置。错误的配置:“ldap://server1:636, ldaps://server2:636”。

load_balance.type
定义多个LDAP url时使用的行为,支持配置的值为:failover、dns_failover、round_robin、dns_round_robin。默认是failover。

load_balance.cache_ttl
当load_balance.type配置为dns_failover或者dns_round_robin时该设置控制缓存DNS查找的时间量,默认为1小时。

domain_name
活动目录的域名。如果未指定url和user_search_dn设置,则集群可以从该设置派生这些值。必需的。

bind_dn
用于绑定到LDAP并执行搜索的用户的DN,只适用于用户搜索模式,如果没有指定,将尝试匿名绑定,默认为空。由于其潜在的安全影响,bind_dn没有通过节点信息API公开。

bind_password
在6.3已经弃用了,使用secure_bind_password来替换。用于绑定到LDAP目录的用户的密码,默认为空,由于潜在的安全影响,bind_password没有通过节点信息API公开。

secure_bind_password
用于绑定到LDAP目录的用户的密码。默认为空。

unmapped_groups_as_roles
如果设置为true,则使用任何未映射LDAP组的名称作为角色名称,并将其分配给用户。如果在角色映射文件中没有引用组,则认为该组未映射。不考虑基于api的角色映射。默认值为false。

files.role_mapping
YAML角色映射配置文件的位置。默认为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查找用户对象。如果指定,这必须是一个有效的LDAP用户搜索过滤器。例如(& (objectClass =用户)(sAMAccountName = {0}))。

user_search.upn_filter
指定用于查找给定用户主体名称的用户过滤器。默认过滤器使用匹配的userPrincipalName查找用户对象。如果指定,这必须是一个有效的LDAP用户搜索过滤器。例如,(& (objectClass =用户)(userPrincipalName = {1}))。{1}是用户提供的完整用户主体名称。

user_search.down_level_filter
指定用于查找给定下一级登录名(域\user)的用户的过滤器。默认过滤器在提供的域中查找具有匹配sAMAccountName的用户对象。如果指定,这必须是一个有效的LDAP用户搜索过滤器。例如(& (objectClass =用户)(sAMAccountName = {0}))。

user_search.pool.enabled
启用或禁用用户搜索的连接池。当禁用时,将为每个搜索创建一个新连接。当提供bind_dn时,默认值为true。

user_search.pool.size
连接池中允许的到Active Directory服务器的最大连接数。默认为20。

user_search.pool.initial_size
启动时要创建到Active Directory服务器的初始连接数。默认值为0。如果LDAP服务器关闭,大于0的值可能导致启动失败。

user_search.pool.health_check.enabled
启用或禁用连接池中活动目录连接的健康检查。连接在指定的时间间隔在后台检查。默认值为true。

user_search.pool.health_check.dn
要作为健康检查的一部分检索的专有名称。如果存在该设置,则默认值为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。

timeout.tcp_read
建立LDAP连接后的TCP读取超时时间。末尾的s表示秒,ms表示毫秒。默认是5s。

timeout.ldap_search
LDAP服务器强制LDAP搜索超时。末尾的s表示秒,ms表示毫秒。默认是5s。

ssl.certificate
指向包含证书(或证书链)的PEM编码文件的路径,该文件将在客户端连接时显示给客户端。

ssl.certificate_authorities
应受信任的PEM编码证书文件的路径列表。ssl.certificate_authoritiesssl.truststore.path不能同时使用。

ssl.key
包含私钥的PEM编码文件的路径,当Active Directory服务器需要客户端身份验证时使用私钥。ssl.keyssl.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
包含私钥和证书的Java密钥存储文件的路径。ssl.key和ssl.keystore.path不能同时使用。

ssl.keystore.type
密钥存储文件的格式。应该是jks使用Java密钥存储格式,PKCS12使用PKCS#12文件,或者PKCS11使用PKCS#11令牌。缺省值是jks。

ssl.truststore.password
信任存储库的密码。

ssl.truststore.secure_password (Secure)
信任存储库的密码。

ssl.truststore.path
包含要信任的证书的Java密钥存储文件的路径。ssl.certificate_authorities和ssl.truststore.path不能同时使用。

ssl.truststore.type
信任存储文件的格式。应该是jks使用Java密钥存储格式,PKCS12使用PKCS#12文件,或者PKCS11使用PKCS#11令牌。缺省值是jks。

ssl.verification_mode
指示使用ldaps防止中间人攻击和伪造证书时的验证类型。值为none、certificate和full。默认为full。

ssl.supported_protocols
支持TLS/SSL协议(带有版本)。如果JVM支持TLSv1.3,则默认为TLSv1.3、TLSv1.2、TLSv1.1,否则为TLSv1.2、TLSv1.1。

ssl.cipher_suites
指定与Active Directory服务器通信时应支持的密码套件。

cache.ttl
指定缓存用户信息的生存时间。在此配置期间缓存用户及其凭据的散列。使用标准的弹性搜索时间单位,默认是20分钟。

cache.max_users
指定缓存可以包含的用户信息的最大数量。默认为100000。

cache.hash_algo
(高级设置)指定用于内存缓存用户凭据的哈希算法。默认为ssha256。

authentication.enabled
如果设置为false,则禁用此域中的身份验证支持,只支持用户查找。默认为true。

follow_referrals
如果设置为true, Elasticsearch将遵循LDAP服务器返回的引用。引用是服务器返回的url,用于继续LDAP操作(例如搜索),默认数true。

PKI realm配置

type设置为pki。处理公共的配置外,还支持一下配置:
username_pattern
用于从证书DN中提取用户名的正则表达式模式。第一个匹配组用作用户名。默认为CN = (. * ?) (?: \ | $)。

certificate_authorities
应用于将用户证书认证为可信的PEM证书文件的路径列表。为SSL配置的受信任证书的缺省值。此设置不能与truststore.path一起使用。

truststore.algorithm
信任存储的算法。默认为SunX509。

truststore.password
信任存储库的密码。如果truststore.path设置了,那么该值必须要设置。

truststore.secure_password
信任存储库的密码。

truststore.path
要使用的信任存储库的路径。为SSL配置的受信任证书的缺省值。此设置不能与certificate_authority一起使用。

files.role_mapping
指定YAML角色映射配置文件的位置。默认为ES_PATH_CONF/role_mapping.yml。

authorization_realms
应该为委托授权咨询的领域的名称。如果使用此设置,则PKI领域不执行角色映射,而是从列出的领域加载用户。

cache.ttl
指定缓存用户信息的生存时间。在这段时间内缓存一个用户及其凭证的散列。使用标准的弹性搜索时间单位)。默认为20分钟。

cache.max_users
指定缓存可以包含的用户信息的最大数量。默认为100000。

SMAL realm配置

type设置为saml,处理公共的配置外还支持以下配置:
idp.entity_id
SAML标识提供程序的实体ID。实体ID是一个最大长度为1024个字符的URI。它可以是URL (https://idp.example.com/)或URN (URN:example.com:idp),可以在标识提供者的配置或SAML元数据中找到它。

idp.metadata.path
描述标识提供者的功能和配置的SAML 2.0元数据文件的路径(推荐)或URL。如果提供了路径,那么它将相对于Elasticsearch配置目录进行解析。如果提供了URL,那么它必须是文件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
指示是否使用标识提供者的单个注销服务(如果IdP元数据文件中存在此服务)。默认值为true。

sp.entity_id
此SAML服务提供者要使用的实体ID。这应该作为URI输入。我们建议您使用Kibana实例的基本URL。例如https://kibana.example.com/。

sp.acs
Kibana中的断言使用者服务的URL。通常,这是您的Kibana服务器的“api/security/v1/saml”端点。例如https://kibana.example.com/api/security/v1/saml。

sp.logout
Kibana中单个注销服务的URL。通常,这是您的Kibana服务器的“注销”端点。例如https://kibana.example.com/logout。

attributes.principal
包含用户主体(用户名)的SAML属性的名称。

attributes.groups
包含用户组的SAML属性的名称。

attributes.name
包含用户全名的SAML属性的名称。

attributes.mail
包含用户电子邮件地址的SAML属性的名称。

attributes.dn
包含用户的X.50专有名称的SAML属性的名称。

attribute_patterns.principal
根据java正则来提取用户名信息,例如^([^@]+)@example\\.com$匹配邮件地址为example.com结尾的属性。

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格式。默认为请求临时名称(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节点时钟之间可以容忍的最大偏移量。默认为3分钟。

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

SAML realm签名配置

如果配置了签名密钥(signing.key或者signing.keystore.path将被配置),那么es会对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编码证书(或证书链)的路径。此证书还必须包含在服务提供者元数据中,或者在IdP中手动配置,以允许签名验证。只有signing.key配置了才能使用该配置。

signing.keystore.path
包含私钥和证书的密钥存储库的路径。必须是Java密钥存储库(jks)或PKCS#12文件。signing.key和signing.keystore.path不能同时配置。

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 realm加密配置

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

encryption.key
指定用于SAML消息解密的PEM编码私钥的路径。encryption.key和encryption.keystore.path不能同时配置。

encryption.secure_key_passphrase
指定用于解密已加密的PEM编码私钥的口令。

encryption.certificate
指定与encryption.key关联的PEM编码证书(或证书链)的路径。此证书还必须包含在服务提供者元数据中,或者在IdP中手动配置以启用消息加密。该配置只有设置了encryption.key才有效。

encryption.keystore.path
包含私钥和证书的密钥存储库的路径,必须是Java密钥存储库(jks)或PKCS#12文件。encryption.key和encryption.keystore.path不能同时配置。

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 realm SSL配置

如果你正在通过SSL/TLS加载IdP元数据(idp.metadata.path使用了https协议)可以使用以下设置配置SSL。如果没有指定这些设置,则使用缺省SSL设置。

ssl.key
指定用于http客户机身份验证的PEM编码私钥的路径(如果需要),ssl.key和ssl.keystore.path不能同时配置。

ssl.key_passphrase
指定用于解密已加密的PEM编码私钥(ssl.key)的口令。不能与ssl.secure_key_passphrase一起使用。

ssl.secure_key_passphrase
指定用于解密已加密的PEM编码私钥(ssl.key)的口令。不能与ssl.key_passphrase一起使用。

ssl.certificate
指定与密钥(ssl.key)关联的PEM编码证书(或证书链)的路径。只有配置了ssl.key那么该配置才生效。

ssl.certificate_authorities
指定到应受信任的PEM编码的证书颁发机构证书的路径。ssl.certificate_authorities和ssl.truststore.path不能同时配置。

ssl.keystore.path
指定包含私钥和证书的密钥存储库的路径。必须是Java密钥存储库(jks)或PKCS#12文件。ssl.key和ssl.keystore.path不能同时配置。

ssl.keystore.type
密钥存储库的类型(ssl.keystore.path)。必须是jks或PKCS12。如果密钥存储库路径以".p12", ".pfx"或者"pkcs12"结果,那么默认配置为PKCS12,否则为jks。

ssl.keystore.password
密钥存储库的密码(ssl.keystore.path)。此设置不能与ssl.keystore.secure_password一起使用。

ssl.keystore.secure_password
密钥存储库的密码(ssl.keystore.path)。此设置不能与ssl.keystore.password一起使用。

ssl.keystore.key_password
密钥存储库(ssl.keystore.path)中密钥的密码。默认为密钥存储库密码。此设置不能与ssl.keystore.secure_key_password一起使用。

ssl.keystore.secure_key_password
密钥存储库(ssl.keystore.path)中密钥的密码。默认为密钥存储库密码。此设置不能与ssl.keystore.key_password一起使用。

ssl.truststore.path
包含要信任的证书的密钥存储库的路径。必须是Java密钥存储库(jks)或PKCS#12文件。ssl.certificate_authorities和ssl.truststore.path不能同时配置。

ssl.truststore.type
信任存储库的类型(ssl.truststore.path)。必须是jks或PKCS12。信任存储库路径以".p12", ".pfx"或者"pkcs12"结尾,那么配置默认为PKCS12,否则为jks。

ssl.truststore.password
信任存储库的密码(ssl.truststore.path)。此设置不能与ssl.truststore.secure_password一起使用。

ssl.truststore.secure_password
信任存储库的密码(ssl.truststore.path)。此设置不能与ssl.truststore.password一起使用。

ssl.verification_mode
一个是full(验证主机名和证书路径)、certificate(验证证书路径,但不验证主机名)或none(不执行验证)。默认为full。

ssl.supported_protocols
指定TLS/SSL支持的协议。如果JVM支持TLSv1.3,则默认为TLSv1.3、TLSv1.2、TLSv1.1,否则为TLSv1.2、TLSv1.1。

ssl.cipher_suites
指定应该支持的密码套件。

kerberos realm配置

对于Kerberos领域,必须将类型设置为Kerberos。除了公共设置外,您还可以指定以下设置:

keytab.path
指定Kerberos keytab文件的路径,该文件包含这个Elasticsearch节点使用的服务主体。这必须是Elasticsearch配置目录中的一个位置,并且文件必须具有读取权限。必需的。

remove_realm_name
设置为true以删除主体名称的领域部分。如果此选项为真,则用户名中将不包含领域部分(@REALM)。默认值为false。

krb.debug
设置为true,以便为提供Kerberos身份验证支持的Java登录模块启用调试日志。默认值为false。

cache.ttl
缓存用户信息的生存时间,在这段时间内缓存一个用户,使用标准的Elasticsearch时间单位指定时间周期,默认为20分钟。

cache.max_users
在任何给定时间,缓存中可以存在的最大用户信息数,默认为100000。

authorization_realms
应该为委托授权咨询的领域的名称,如果使用此设置,则Kerberos领域不执行角色映射,而是从列出的领域加载用户。

加载均衡和故障转移

load_balance.type有以下这些值:

failover: 指定的url按指定的顺序使用,可以连接到的第一个服务器将用于所有后续连接,如果到该服务器的连接失败,则可以建立连接的下一个服务器将用于后续连接。

dns_failover: 在这种操作模式下,只能指定一个URL,此URL必须包含DNS名称,系统将查询与此DNS名称对应的所有IP地址,到Active Directory或LDAP服务器的连接将始终按照检索它们的顺序进行尝试,这与failover的不同之处在于,没有对列表进行重新排序,如果在列表开始时服务器发生故障,则仍然会对后续的每个连接进行尝试。

round_robin: 连接将不断迭代所提供的url列表,如果服务器不可用,则将继续遍历url列表,直到成功连接为止。

dns_round_robin: 在这种操作模式下,只能指定一个URL,此URL必须包含DNS名称,系统将查询与此DNS名称对应的所有IP地址,连接将不断地遍历地址列表,如果服务器不可用,则将继续遍历url列表,直到成功连接为止。

HTTP TLS/SSL配置

您可以配置以下TLS/SSL设置。如果没有配置这些设置,则使用默认的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支持TLSv1.3,则默认为TLSv1.3、TLSv1.2、TLSv1.1,否则为TLSv1.2、TLSv1.1。

xpack.security.http.ssl.client_authentication
控制与从客户端连接请求证书有关的服务器行为。有效值是required, optional和none,required强制客户机提供证书,而optional请求客户机证书,但客户机不需要提供证书,默认为none。

xpack.security.http.ssl.cipher_suites
可以在Oracle’s Java Cryptography Architecture documentation文档中找到,默认是''。

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

以下设置用于指定在SSL/TLS连接上通信时应该使用的私钥、证书和可信证书。必须配置私钥和证书。如果没有指定下面的设置,则使用默认的TLS/SSL设置。

PEM编码的文件

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

xpack.security.http.ssl.key
用于解密私钥的口令。这个值是可选的,因为密钥可能没有加密。

xpack.security.http.ssl.key_passphrase
用于解密私钥的口令。这个值是可选的,因为密钥可能没有加密。

xpack.security.http.ssl.secure_key_passphrase (Secure)
用于解密私钥的口令。这个值是可选的,因为密钥可能没有加密。

xpack.security.http.ssl.certificate
指向PEM编码文件的路径,该文件包含将在请求时显示的证书(或证书链)。

xpack.security.http.ssl.certificate_authorities
应受信任的PEM编码证书文件的路径列表。

Java Keystore文件

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

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
密钥存储库中私钥的密码。默认值与xpack.security.http.ssl.keystore.password相同。

xpack.security.http.ssl.keystore.secure_key_password
密钥存储库中私钥的密码。

xpack.security.http.ssl.truststore.path
到信任存储文件的路径。

xpack.security.http.ssl.truststore.password
信任存储区的密码。

xpack.security.http.ssl.truststore.secure_password
信任存储区的密码。

PKCS#12文件

可以将Elasticsearch配置为使用PKCS#12容器文件(.p12或者.pfx文件),其中包含私钥、证书和应该信任的证书。
PKCS#12文件的配置方式与Java Keystore文件相同:

xpack.security.http.ssl.keystore.path
包含私钥和证书的PKCS#12文件的路径。

xpack.security.http.ssl.keystore.type
将此设置为PKCS12,以指示密钥存储库是PKCS#12文件。

xpack.security.http.ssl.keystore.password
PKCS#12文件的密码。

xpack.security.http.ssl.keystore.secure_password
PKCS#12文件的密码。

xpack.security.http.ssl.keystore.key_password
存储在PKCS#12文件中的私钥的密码。默认值与xpack.security.http.ssl.keystore.password相同。

xpack.security.http.ssl.keystore.secure_key_password
存储在PKCS#12文件中的私钥的密码。

xpack.security.http.ssl.truststore.path
包含要信任的证书的PKCS#12文件的路径。

xpack.security.http.ssl.truststore.type
将此设置为PKCS12,以指示信任存储是PKCS#12文件。

xpack.security.http.ssl.truststore.password
PKCS#12文件的密码。

xpack.security.http.ssl.truststore.secure_password
PKCS#12文件的密码。

PKCS#11令牌

可以将Elasticsearch配置为使用PKCS#11令牌,该令牌包含私钥、证书和应该信任的证书。
PKCS#11令牌需要JVM级别的额外配置,可以通过以下设置启用:

xpack.security.http.keystore.type
将其设置为PKCS11,以指示应该将PKCS#11令牌用作密钥存储库。

xpack.security.http.truststore.type
将此设置为PKCS11,以指示应该将PKCS#11令牌用作信任存储。

传输TLS/SSL配置

您可以配置以下TLS/SSL设置。如果没有配置这些设置,则使用默认的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支持TLSv1.3,则默认为TLSv1.3、TLSv1.2、TLSv1.1,否则为TLSv1.2、TLSv1.1。

xpack.security.transport.ssl.client_authentication
控制与从客户端连接请求证书有关的服务器行为。有效值是required, optional, none。required强制客户机提供证书,而optional请求客户机证书,但客户机不需要提供证书。默认为none。

xpack.security.transport.ssl.verification_mode
控制证书的验证。有效值是none、certificate和full。默认为full。

xpack.security.transport.ssl.cipher_suites
支持的密码套件可以在Oracle的Java密码体系结构文档中找到。默认为’ ’。

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
允许此配置文件的IP地址列表

transport.profiles.$PROFILE.xpack.security.filter.deny
要拒绝此配置文件的IP地址列表。

用户缓存和密码哈希算法

某些领域将用户凭证存储在内存中。为了限制对凭证盗窃的暴露,并减少凭证泄露,缓存只在内存中存储用户凭证的散列版本。默认情况下,用户缓存使用带盐的sha-256哈希算法进行哈希。通过设置缓存,可以使用不同的哈希算法。hash_algo域设置为以下任何值:
ssha256,md5,sha1,bcrypt,bcrypt4,bcrypt5,bcrypt6,bcrypt7,bcrypt8,bcrypt9,pbkdf2,pbkdf2_1000,pbkdf2_10000,pbkdf2_50000,pbkdf2_100000,pbkdf2_500000,pbkdf2_1000000,noop,clear_text。

同样,存储密码的域使用加密的强密码和特定于密码的salt值对它们进行散列。您可以通过设置xpack.security.authc.password_hash来配置密码散列算法。算法设置为:
bcrypt,bcrypt4,bcrypt5,bcrypt6,bcrypt7,bcrypt8,bcrypt9,bcrypt10,bcrypt11,bcrypt12,bcrypt13,bcrypt14,pbkdf2,pbkdf2_1000,pbkdf2_10000,pbkdf2_50000,pbkdf2_100000,pbkdf2_500000,pbkdf2_1000000。

也可以关注我的公众号:程序之声
图片
关注公众号,领取更多资源

本文为博主原创文章,未经博主允许不得转载。

评论

发表评论