目录
以上就是OpenDistro for Elasticsearch 安全模块教程,具体elasticsearch使用openDistro插件添加kerberos安装配置,请跳转到此页面
前言
Open Distro for Elasticsearch是Elasticsearch的增值发行版,它是100%开源(Apache 2.0许可)并受AWS支持。用于Elasticsearch的Open Distro利用Elasticsearch和Kibana的开源代码。
除了Elasticsearch和Kibana之外,该版本还包含一组高级安全性,事件监视和警报,性能分析以及SQL查询功能。除了源代码存储块之外,Open Distro for Elasticsearch和Kibana还可以作为RPM,Debian软件包和Docker容器使用,并且可以分别下载SQL JDBC和PerfTop CLI。您可以在笔记本电脑,数据中心或云中运行此代码。 ------来自amazon的官方介绍
为什么使用opendistro???
elasticsearch 要用kerberos最少要白金版啊,破解自己玩玩儿还行,一个大公司可不能这么用。 这种100%开源的插件最符合,像search-guard也要企业版才能用kerberos功能。。。。。
有很多版本,我这次安装的是最新版本,es也选择的7.10.2 ,opendistro-security 1.13.1.0
- 安装方式有docker、rpm、自己下载zip包,我选择自己下载插件zip包
安装
下载zip包
安装插件
[root@henghe-052 elasticsearch]# bin/elasticsearch-plugin install file:///opt/opendistro-security-1.13.1.0.zip
进入到plugin,就能看到了
[root@henghe-052 elasticsearch]# cd plugins/
配置
后端配置
confg.xml有三个主要的部分
opendistro_security dynamic: http: ... authc: ... authz ...
config.xml位置
- HTTP
anonymous_auth_enabled: true #为true代表开启匿名身份验证,开启后authc,也就是配置的authc下面的不起作用了
-
Authentication
http_enabled: true transport_enabled: true order: 0
该
authc
部分中的条目称为身份验证域。它指定从何处获取用户凭证以及应针对哪个后端对其进行身份验证。您可以使用多个身份验证域。每个身份验证域都有一个名称(例如
basic_auth_internal
),enabled
标志和一个order
。该顺序使将身份验证域链接在一起成为可能。安全插件将按照您提供的顺序使用它们。如果用户成功通过一个域进行身份验证,则安全插件将跳过其余域。
http_authenticator
指定要在HTTP层上使用的身份验证方法。这是在HTTP层上定义身份验证器的语法:
http_authenticator: type: <type> challenge: <true|false> config: ...
这些是以下允许的值
type
:
basic
:HTTP基本身份验证。无需其他配置。kerberos
:Kerberos身份验证。需要其他特定于kerberos的配置。- jwt:JSON Web令牌认证。需要其他腾定于JWT的配置。
clientcert
:通过客户端TLS证书进行身份验证。节点的信任库中的根CA必须信任此证书。
- Authorization
authc: <name>: http_enabled: <true|false> transport_enabled: <true|false> authentication_backend: type: <type> config: ...
这些是以下各项的可能值
type
:
noop
:完全跳过此步骤。ldap
:从LDAP服务器获取其他角色。此设置需要其他特定于LDAP的配置设置
- Kerberos
1.要在elasticsearch.yml中添加krb5文件位、keytab位置、principal
opendistro_security.kerberos.krb5_filepath: '/etc/krb5.conf' opendistro_security.kerberos.acceptor_keytab_filepath: 'http.keytab' opendistro_security.kerberos.acceptor_principal: 'HTTP/henghe-052'
2.修改config.yml
authc: kerberos_auth_domain: http_enabled: true transport_enabled: true order: 0 http_authenticator: type: kerberos challenge: true config: # If true a lot of kerberos/security related debugging output will be logged to standard out krb_debug: true # If true then the realm will be stripped from the user name strip_realm_from_principal: true authentication_backend: type: noop
其中challenge设置为true,设置为false,安全插件没有办法在请求中获取凭证
由于Kerberos / SPNEGO在HTTP级别上对用户进行身份验证,因此不需要其他
authentication_backend
操作。将此值设置为noop
。
- JSON web token
暂时没研究
TLS配置
X.509 PEM证书和PKCS#8密钥
Transport layer TLS
生成证书
- centOS上,使用yum
sudo yum install openssl
- 样例脚本
# Root CA
openssl genrsa -out root-ca-key.pem 2048
openssl req -new -x509 -sha256 -key root-ca-key.pem -out root-ca.pem -days 30
# Admin cert
openssl genrsa -out admin-key-temp.pem 2048
openssl pkcs8 -inform PEM -outform PEM -in admin-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out admin-key.pem
openssl req -new -key admin-key.pem -out admin.csr
openssl x509 -req -in admin.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem -days 30
# Node cert
openssl genrsa -out node-key-temp.pem 2048
openssl pkcs8 -inform PEM -outform PEM -in node-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out node-key.pem
openssl req -new -key node-key.pem -out node.csr
openssl x509 -req -in node.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node.pem -days 30
#Client cert
openssl genrsa -out client-key-temp.pem 2048
openssl pkcs8 -inform PEM -outform PEM -in client-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out client-key.pem
openssl req -new -key client-key.pem -out client.csr
openssl x509 -req -in client.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out client.pem -days 30
# Cleanup
rm admin-key-temp.pem
rm admin.csr
rm node-key-temp.pem
rm node.csr
rm client-key-temp.pem
rm client.csr
如果创建了管理证书和节点证书,则必须elasticsearch.yml
在所有节点上指定其专有名称(DN):
opendistro_security.authcz.admin_dn:
- 'CN=ADMIN,OU=UNIT,O=ORG,L=TORONTO,ST=ONTARIO,C=CA'
opendistro_security.nodes_dn:
- 'CN=node1.example.com,OU=UNIT,O=ORG,L=TORONTO,ST=ONTARIO,C=CA'
- 'CN=node2.example.com,OU=UNIT,O=ORG,L=TORONTO,ST=ONTARIO,C=CA'
但是,如果subject
在创建证书后查看证书的,则可能会看到不同的格式:
subject=/C=CA/ST=ONTARIO/L=TORONTO/O=ORG/OU=UNIT/CN=node1.example.com
如果将此字符串与elasticsearch.yml
上面的字符串进行比较,可以看到需要反转元素的顺序并使用逗号而不是斜杠。输入以下命令以获取正确的字符串:
openssl x509 -subject -nameopt RFC2253 -noout -in node.pem
然后,您可以将输出复制并粘贴到elasticsearch.yml
:
subject= CN=node1.example.com,OU=UNIT,O=ORG,L=TORONTO,ST=ONTARIO,C=CA
使用securityadmin.sh应用配置更改
官网写的很详细Apply Changes with securityadmin.sh - Open Distro Documentation