简单说明 Solr 认证配置相关配置
Solr包含一些开箱即用的插件,通过这些插件能够完成Solr的认证、授权等功能。
默认情况下Solr中的所有认证、授权配置保存在security.json文件中。Standlone模式下,Security.json文件保存在$SOLR_HOME目录下,SolrCloud模式时该文件保存在ZK中。
security.json文件示例:
1 | { |
使用CDH时以下命令可以将security.json文件upload到zk中:
1 |
|
认证插件
当前Solr提供了以下几种认证插件:
插件名称 | 官方参考 | |
---|---|---|
Kerberos | 参考 | |
Basic | 参考 | |
Hadoop | 参考 |
Solr还支持PKIAuthenticationPlugin插件,该插件用来处理Solr内部请求的安全认证。需要注意的是PKIAuthenticationPlugin的加密原理对时间敏感,Solr节点间需要保证5s以内的时间同步。通过pkiauth.ttl参数可以控制密钥失效时间。
Basic 插件
Basic 插件基于用户名/密码进行认证。
下面的配置,同时启用了baseAuthPlugin和授权插件。
1 | { |
参数含义如下:
- class:实现的插件类
- credentials:定义了solr用户和该用户的密码(密码带盐值的sha256密文)
编辑插件的配置可以参考官方文档,Solr本身也有API可以进行用户管理。
Hadoop 插件
此插件将所有功能委派给Hadoop authentication library。
由于Hadoop支持simple和Kerberos两种认证方式,所以使用这个插件实际上能够实现Kerberos认证。官方提供了Kerberos、Simple两种配置的security.json样例。
该插件有ConfigurableInternodeAuthHadoopPlugin和HadoopAuthPlugin两种实现类区别在于:前者同时处理内部认证和外部认证,后者只处理内部认证。
Kerberos 插件
Solr集成Kerberos插件后,Solr可以实现以下效果:
- 使用principal和keytab在Zookeeper上完成认证;
- Solr集群内部完成节点的相互认证;
- Admin UI和其他客户端需要认证后访问solr;
官方文档比较详细的说明了该插件的配置方法,并且简要说明了如何进行Delegation Tokens配置,以及使用SolrJ完成Kerberos认证。
Znode节点添加ACLs
默认情况下,Solr启用认证后只对本身API生效。Solr存储在Zookeeper上配置依然是open-unsafe配置。
Solr在ZK上的权限管理,取决于以下两个配置:
zkCredentialsProvider:ZK的凭证管理类,用于获取在ZooKeeper中执行操作的权限。按照个人理解,这个配置当ZK使用digest认证时才有用,Kerberos认证时只需配置默认值即可。该配置的默认值是DefaultZkCredentialsProvider,另一个配置是VMParamsSingleSetCredentialsDigestZkCredentialsProvider。使用后者时,涉及到的配置项还有zkDigestPassword、zkDigestUsername。
zkACLProvider :这个配置控制solr在ZK上创建ZNode时,Znode的权限。
zkACLProvider包括以下配置(org.apache.solr.common.cloud.xxx):
- DefaultZkACLProvider: 默认配置创建的ZNode是所有人都可以访问的。
- VMParamsAllAndReadonlyDigestZkACLProvider:ZK使用Digest认证时使用这个配置。
- SaslZkACLProvider:ZK使用Kerberos认证时使用这个配置。
通常情况下,需要在将上面提及的配置添加到环境变量SOLR_ZK_CREDS_AND_ACLS,并在solr.in.sh和zkcli.sh中引入这两个配置。
Cloudera中配置Solr认证
自定义security.json
CDH默认使用 Hadoop 插件作为Solr的认证工具,在parcels包的solr/clusterconfig/目录下有security.json的模板文件。
每次Cloudera启动Solr都会加载security.json模板文件,并覆盖Zookeeper上的配置文件。如果要自定义solr授权、认证方案,需要修改/opt/cloudera/cm-agent/service/solr/solr.sh文件。
1 | 379 if [ $CDH_VERSION -ge 6 ]; then |
使用下面的命令可以上传security.json到ZK(前提是配置好zkcli.sh中的Kerberos认证信息),需要注意是每次修改security.json之后需要重启Solr。
1 | /opt/cloudera/parcels/CDH/lib/solr/bin/zkcli.sh -cmd putfile /solr/security.json ./security.json -z bdnode1:2181,bdnode2:2181,bdnode3:2181 |
Znode启用ACLs
当在已有CDH中开启Kerberos时,Cloudera不会将原有Znode配置ACLs。用户需要修改zkcli.sh文件,执行以下命令将之前创建的ZNode修改ACLs配置:
1 |
|
参考以下方式修改zkcli.sh中的SOLR_ZK_CREDS_AND_ACLS变量:
1 | Settings for ZK ACL |