Securing Cassandra
Cassandra向开源社区提供了4种安全机制:
内部认证 (Internal authentication)
认证配置:若想要配置Cassandra的内部认证机制,需要修改Cassandra.yaml文档的authenticator属性设置并且增加system_auth keyspace的replication factor,如下所述:使用默认的用户名密码(cassandra/cassandra)启动Cassandra,创建一个新的超级用户。(单点安装的话不需要修改复制因子的个数)
- authenticator: PasswordAuthenticator
- 重启Cassandra
- 用默认的用户名密码登录
- 为system_auth增加replication factor数,如果是多数据中心,确保使用NetworkTopologyStrategy,ALTER KEYSPACE “system_auth” WITH REPLICATION = {‘class’ : ‘NetworkTopologyStrategy’, ‘dc1’ : 3,’dc2’ : 2};注意:当认证默认Cassandra用户是,system_auth keyspace 使用 QUORUM 一致性,而对于其他用户,认证时都是使用 LOCAL ONE一致性水平。
- nodetool repair system_auth ,保证修改在节点间进行传播
- 重启Cassandra
- 使用默认用户名密码登录cqlsh
- 创建新的超级用户:CREATE ROLE WITH PASSWORD=’’ AND SUPERUSER = true AND LOGIN = true;
- 使用新用户登录
- 因为默认的Cassandra用户是没办法删除的,所以我们需要修改其密码和权限以避免安全隐患。
- 现在你可以给你的角色授予访问数据库对象的权限了。
- 读取角色权限是一个花费内存的操作,roles可以被缓存从而降低内存负担。调整一下属性:roles_validity_in_ms: 2000
- roles caches的定期刷新:roles_update_interval_in_ms: 2000
- 读取 credentials authentication也是损耗内存:validity_in_ms: 2000
- credentials_update_interval_in_ms: 2000
using cqlsh with authentication:平时我们登录时都需要使用 -u-p ,配置一下内容,可以直接登录 - 创建或者修改cqlshrc文件:[authentication] username = fred
password = !!bang!! - 保存文件至home.cassandra directory and name it cqlshrc,where home is set by the user’s HOME/USERPROFILE environmental variable。
- 为该文件设置权限避免密码被修改:C:>chmod 440 home.cassandra\cqlshrc
- 检查 home.cassandra\cqlshrc_history确保密码是否可以被修改(compromised).
内部授权(internal authorization)
使用Cassandra的内部授权可以指定一下对象的权限:
- keyspace
- table
- function
- aggregate
- roles
- MBeans
配置内部授权: - authorizer:CassandraAuthorizer
- 增加system_auth keyspace的replication factor数
- 修改配置:permissions_validity_in_ms: 2000
- permissions_update_interval_in_ms: 2000
JMX Authentication and Authorization
TODO
SSL encryption
TODO
Configuring firewall port access
必须开放以下端口来允许节点间的双向沟通:
Table: Public port
Port number Description
22 SSH port
Table: Cassandra inter-node ports
Port number Description
7000 Cassandra inter-node cluster communication.
7001 Cassandra SSL inter-node cluster communication.
7199 Cassandra JMX monitoring port.
Table: Cassandra client ports
Port number Description
9042 Cassandra client port.
9160 Cassandra client port (Thrift).
9142 Default for native_transport_port_ssl, useful when both encrypted and unencrypted connections a
Configuring gossip settings
TODO
Configuring the heap dump directory
TODO
Configuring virtual nodes
TODO
Using multiple network interfaces
TODO
Configuring the snitch for multiple networks
TODO
Configuring the snitch for cross-region communication in cloud inplementations
TODO
Configuring logging
TODO
Commitlog archive configuration
TODO
Generating tokens
TODO
Hadoop support
TODO