ElasticSearch7.10 Security
再官网的指导下,我们一起看看怎么配置密码、TLS/SSL等安全操作。
一、Security settings in Elasticsearch(x-pack)
默认安装时,Elasticsearch 的安全特性是被禁用的,你只有基本的或者试用的证书。为了能够试用安全特性,需要配置xpack.security.enabled
属性。
进入config目录,编辑elasticsearch.yml文件,下面都是通常的安全设置:
1. General security settings
xpack.security.enabled
默认为false,没有开启;设置为ture,Elasticsearch在这个节点上就有了安全特性。
- 若为false,默认使用基本且试用的证书,安全特性被禁用。它也能影响所有的Kibana实例去连接这个Elasticsearch实例;你不需要去禁用在kibana.yml文件中的安全特性。如果要了解更多去禁用在指定的Kibana 实例正的安全特性,可以看Kibana security settings: https://www.elastic.co/guide/en/kibana/7.10/security-settings-kb.html
xpack.security.hide_settings
定义一个逗号分隔的配置清单,过滤掉从集群节点信息API的结果。也可以使用通配符去设置包含多个配置的清单,如下:
xpack.security.authc.realms.active_directory.ad1.*.
由于信息的敏感性,这个API过滤掉所有的ssl、bind_dn、bind_password
xpack.security.fips_mode.enabled
默认false。fips操作启动模式,若在FIPS 140-2 JVM中启动,则需要设置为true。
2.Password hashing settings
指定用于安全用户凭据存储的散列算法。默认bcrypt
进行加密。
- bcrypt特点
- 米一次HASH出来的值不一样
- 计算非常缓慢
对于攻击者来说,需要不断计算,让攻击变得不太可能。
3.Anonymous access settings
可以在elasticsearch.yml
中根据以下的匿名访问配置。更多详情访问:
https://www.elastic.co/guide/en/elasticsearch/reference/current/anonymous-access.html
xpack.security.authc.aonymous.username
匿名用户的姓名默认 _es_anonymous_user。更多详情访问:
xpack.security.authc.anonymous.roles
要与匿名用户关联角色。是必须的。
xpack.security.authc.anonymous.acthz_exception
默认值为false
- ture
如果匿名用户没有请求操作的适当权限,则返回HTTP 403响应,且不会提示用户提供凭证来访问所请求的资源。 - false
将返回一个HttP 401响应,用户可以提供具有适当权限的凭据以获得访问权限。
4.Token service settings
xpack.security.authc.token.enabled
设置为false以禁用内置的token 服务。默认为ture,除非xpack.security.http.ssl.enabled
为false,没有启动。这可以防止通过一个http连接获取toekn。
xpack.security.authc.token.timeout
这个token有效时间长度。默认值为20m
或者20 minutes
。这个最大值为1个小时。
HTTPP TLS/SSL settings
来到了重点。当xpack.security.enabled
为true之后。http连接,可以设置TLS/SSL.
xpack.security.http.ssl.enabled
默认为false。设置ture,开启TLS/SSL安全连接。
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
、 - JVN不支持TLSv1.3,默认
TLSv1.2,TLSv1.1
** 注意
如果xpack.security.fips_mode.enabled
为true,你必须使用SSLv2Hello 或者SSLv3
xpack.security.http.ssl.client_authentication
控制服务器从客户端连接请求证书的行为。有效值是required,optional,none
。
- required
强制一个客户端提供证书 - optional
要求客户端证书,但不要求客户端提供证书。 - none
xpack.security.http.ssl.cipher_suites
所支持的密码组取决于你使用java的版本。例如,对于版本12,默认值为:
TLS_AES_256_GCM_SHA384, TLS_AES_128_GCM_SHA256, TLS_CHACHA20_POLY1305_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_CHACHA20_POLY1305_SHA256, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_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
5.Java keystore files
当使用Java
密钥存储库文件时,其中包含私钥,证书和受信任的证书,使用如下的设置
xpack.security.http.ssl.keystore.path
包含私钥和证书的密钥存储库的路径。
它必须也是一个Java密钥存储库或者PKCS#12的文件。如elastic-statck-ca.p12
。在同时使用这个配置和ss1.key
。
xpack.security.http.ssl.keystore.password
密钥存储库的密码
xpack.security.http.ssl.keystore.secure_password
密钥存储库的密码。
在elasticsearch的bin目录下:
./elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
可以设置密码
xpack.security.http.ssl.keystore.secure_key_password
密钥存储库的面膜,默认时这个密钥库的密码
xpack.security.http.ssl.truststore.path
包含可信任证书的密钥存储库的路径。它必须也是一个Java
密钥存储库或者PKCS#12文件。
你不能同时使用这个设置和ssl.certificate_authorities
。
xpack.security.http.ssl.truststore.password
可信任库的密码。
你不能同时使用这个设置和ssl.trustore.secure_password
xpack.security.http.ssl.truststore.secure_password
信任库的密码