Cassandra JMX 认证和授权:创建用户
Apache Cassandra 和 Datastax enterprise 中有两种安全类型。
- 内部身份验证
- 授权
什么是内部身份验证和授权
内部身份验证基本上是验证用户连接。用户使用登录名和密码进行身份验证。所有用户账户都在 Cassandra 内部管理。
内部授权处理用户权限。它处理用户可以执行的操作。例如,我们可以授予用户权限,例如哪个用户只有数据读取权限,哪个用户有数据写入权限,哪个用户有数据删除权限。
但是,身份验证也可以通过 **Kerberos**(Kerberos 用于安全地管理凭据)和 LDAP(LDAP 用于保存有关账户的权威信息,例如允许他们访问什么)进行外部控制。
外部身份验证是通过 Kerberos 和 LDAP 支持的身份验证。Apache Cassandra 不支持外部身份验证。
只有 Datastax enterprise 支持 Kerberos 和 LDAP 的外部身份验证。而 Apache Cassandra 和 Datastax enterprise 都支持内部身份验证。
配置身份验证和授权
在 Cassandra 中,默认情况下身份验证和授权选项是禁用的。您需要配置 Cassandra.yaml 文件以启用身份验证和授权。
打开 Cassandra.yaml 文件并取消注释处理内部身份验证和授权的行。
- 在 Cassandra.yaml 文件中,默认情况下,authenticator 的值为 'AllowAllAuthenticator'。将此 authenticator 值从 'AllowAllAuthenticator' 更改为 'com.datastax.bdp.cassandra.auth.PasswordAuthenticator'。
- 同样,在 Cassandra.yaml 文件中,默认情况下,authorizer 的值为 'AllowAllAuthorizor'。将此 authorizer 值从 'AllowAllAuthorizor' 更改为 'com.datastax.bdp.cassandra.auth.CassandraAuthorizer'。
登录
现在启用了身份验证,如果您尝试访问任何 keyspace,Cassandra 将返回错误。
默认情况下,Cassandra 提供超级用户账户,用户名为“cassandra”,密码为“cassandra”。通过登录“Cassandra”账户,您可以做任何您想做的事情。
请看下面的截图,如果您没有使用默认的 Cassandra“用户名”和“密码”,它将不允许您登录。
现在,在第二个截图中,您可以看到在使用 Cassandra 默认登录凭据后,您就可以登录了。
您还可以使用此账户创建另一个用户。建议更改默认密码。以下是登录 Cassandra 用户并更改默认密码的示例。
alter user cassandra with password 'newpassword';
创建新用户
可以使用“Cassandra”账户创建新账户。
创建新用户时,密码会与用户是否为超级用户一起指定。只有超级用户才能创建新用户。
create user robin with password 'manager' superuser; create user robin with password 'newhire';
您可以使用以下语法获取所有用户的列表。
list users;
可以使用以下语法删除用户。
drop user laura;
授权
授权是为用户分配权限,即特定用户可以执行的操作。
这是为用户分配权限的通用语法。
GRANT permission ON resource TO user
可以授予用户的权限类型如下:
- 全部
- ALTER
- 授权
- CREATE
- DROP
- 修改
- SELECT
以下是为用户分配权限的示例。
Create user laura with password 'newhire'; grant all on dev.emp to laura; revoke all on dev.emp to laura; grant select on dev.emp to laura;
创建了一个新用户“laura”,密码为“newhire”。
这是用户“laura”尝试访问 emp_bonus 表的示例。Laura 只有访问 dev.emp 的权限,而没有访问 dev.emp_bonus 这个表的权限,因此返回了错误。
select* form emp_bonus;
您可以获取分配给用户的用户的所有权限列表。以下是获取权限信息的示例。
list all permissions of laura;
您还可以列出资源上的所有权限。以下是从表中获取权限的示例。
list all permissions on dev.emp;
配置防火墙
如果防火墙正在运行,必须打开以下端口以实现节点之间的通信,包括一些 Cassandra 端口。如果 Cassandra 端口未打开,Cassandra 节点将充当独立的数据库服务器,而不是加入数据库集群。
Cassandra 客户端端口
端口号 | 描述 |
---|---|
9042 | Cassandra 客户端端口 |
9160 | Cassandra 客户端端口 Thrift |
Cassandra 节点间端口
端口号 | 描述 |
---|---|
7000 | Cassandra 节点间集群通信 |
7001 | Cassandra SSL 节点间集群通信 |
7199 | Cassandra JMX 监控端口 |
公共端口
端口号 | 描述 |
---|---|
22 | SSH 端口 |
8888 | OpsCenter 网站。浏览器 HTTP 请求。 |
Cassandra OpsCenter 端口
端口号 | 描述 |
---|---|
61620 | OpsCenter 监控端口。 |
61621 | Opscenter 代理端口 |
启用 JMX 身份验证
使用 Cassandra 的默认设置,JMX 只能从 localhost 访问。如果您想远程访问 JMX,请在 Cassandra-env.sh 中更改 LOCAL_JMX 设置并启用身份验证或 SSL。
启用 JMX 身份验证后,请确保 OpsCenter 和 nodetool 已配置为使用身份验证。
过程
以下是启用 JMX 身份验证的步骤:
- 在 cassandra-env.sh 文件中,添加或更新以下行。
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.authenticate=true" JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.password.file=/etc/cassandra/jmxremote.password"
另外,在 Cassandra-env.sh 中更改 LOCAL_JMX 设置。
LOCAL_JMX=no
- 将 jmxremote.password.template 文件从 /jdk_install_location/lib/management/ 复制到 /etc/cassandra/ 并将其重命名为 jmxremote.password。
cp />jdk_install_dir/lib/management/jmxremote.password.template /etc/cassandra/jmxremote.password
- 将 jmxremote.password 的所有权更改为您运行 Cassandra 的用户,并将权限更改为只读。
chown cassandra:cassandra /etc/cassandra/jmxremote.password chmod 400 /etc/cassandra/jmxremote.password
- 编辑 jmxremote.password 并为 JMX 兼容的实用程序添加用户和密码。
monitorRole QED controlRole R&D cassandra cassandrapassword
- 将具有读写权限的 Cassandra 用户添加到 /jdk_install_location/lib/management/jmxremote.access。
monitorRole readonly cassandra readwrite controlRole readwrite \ create javax.management.monitor.,javax.management.timer. \ unregister
- 重启 Cassandra
- 使用 Cassandra 用户和密码运行 nodetool。
$ nodetool status -u cassandra -pw cassandra
摘要
本教程解释了 Cassandra 中的安全问题以及为启用安全而配置 Cassandra.yaml 文件。除此之外,它还解释了如何创建新用户账户,分配权限,配置防火墙等。