cassandra权威指南读书笔记--安全

认证和授权
driver,JMX和cassandra服务器支持SSL/TLS,cassandra节点间也支持SSL/TLS.
密码认证器
cassandra还支持自定义,可插拔的认证机制。
默认的认证器:org.apache.cassandra.auth.AllowAllAuthenticator
密码认证:org.apache.cassandra.auth.PasswordAuthenticator
配置在cassandra.yaml 的authenticator,cassandra 2.2及以后的版本,就得带上CassandraRoleManager.
Cassandra还通过IInternodeAuthenticator接口实现节点之间的可插拔认证机制(默认是AllowAllInternodeAuthenticator,不需要任何认证)

配置cqlsh自动登录
在安装主目录下创建一个名为.cqlshrc的文件。通过以下类似代码输入登录凭证:
;Sample ~/.cqlshrc file.
[authentication]
username = xxxxx
password = xxxxx
确保文件安全
可以在cqlsh中使用login切换用户
cassandra@cqlsh> login username 'password'
username@cqlsh>
也可不输入密码,shell会提示,然后隐藏输入。所有的输入都会保存在.cassandra/cqlsh_history

客户端驱动认证
客户端认证需要实现com.datastax.driver.core.AuthProvider接口。默认实现是PlainTextAuthProvider。调用Cluster.Builder.withCredentials()时会注册PlainTextAuthProvider的实例。

授权
默认授权:org.apache.cassandra.auth.AllowAllAuthorizer
基于角色的访问控制:org.apache.cassandra.auth.CassandraAuthorizer
配置在cassandra.yaml 的authorizer
同样是可插拔的
cassandra支持给某个用户赋予另一个用户的所有权限:grant xxx to xxx
cassandra把用户和角色存储在system_auth中.

加密
3.0开始,才支持客户端与服务器的加密,以及服务器之间的加密来保护数据安全。
cassandra使用TLS(Transport Layer Security)对传输数据加密。TLS是一种加密协议,保护通信安全,防窃听和篡改。TLS使用非对称加密(公钥私钥,密钥交换算法)。
客户端发送自己支持的密码套件,服务器选择一个生成对称密钥,用于通信。
可以自签名证书配置在服务器客户端(公私钥)。
cassandra提供密钥库和密钥对的密码配置,还提供LDAP(LightWeight Directory Access Protocol)
一般默认安全的配置就够了,有需要看官方文档。

JMX安全性
默认只开启本机访问。
修改cassandra-env.sh,把LOCAL_JMX设置为yes,添加
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT"
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT"
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl=false"
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.authenticate=true"
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.password.file=xxx"
jmxremote.access 可以配置权限,比如读写MBean权限
xxx readonly
xxx readwrite \
create javax.management.monitor.*,javax.management.timer.* \
修改完重启cassandra
SSL配置
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl=true"
JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.keyStore=xxx"
JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.keyStorePassword=xxx"
JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.trustStore=xxx"
JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.trustStorePassword=xxx"
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl.need.client.auth=true"

PermissionsCacheMBean
默认,cassandra会缓存角色和权限相关信息。缓存配置在cassandra.yaml 的permission_validity_in_ms,默认2秒。PermissionsCacheMBean允许你覆盖这个值,另外还提供一个命令取消缓存中的所有权限(当改变集群中的权限时,想要立即生效,就可以这样清除缓存)

posted @ 2020-08-21 00:56  DevinDC  阅读(294)  评论(0编辑  收藏  举报