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 文件并取消注释处理内部身份验证和授权的行。

Configure Authentication and Authorization

  • 在 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“用户名”和“密码”,它将不允许您登录。

Logging in

现在,在第二个截图中,您可以看到在使用 Cassandra 默认登录凭据后,您就可以登录了。

您还可以使用此账户创建另一个用户。建议更改默认密码。以下是登录 Cassandra 用户并更改默认密码的示例。

Logging in

alter user cassandra with password 'newpassword';

创建新用户

可以使用“Cassandra”账户创建新账户。

创建新用户时,密码会与用户是否为超级用户一起指定。只有超级用户才能创建新用户。

create user robin with password 'manager' superuser;
create user robin with password 'newhire';

您可以使用以下语法获取所有用户的列表。

list users;

Create New User

可以使用以下语法删除用户。

drop user laura;

授权

授权是为用户分配权限,即特定用户可以执行的操作。

这是为用户分配权限的通用语法。

GRANT permission ON resource TO user

可以授予用户的权限类型如下:

  1. 全部
  2. ALTER
  3. 授权
  4. CREATE
  5. DROP
  6. 修改
  7. 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 这个表的权限,因此返回了错误。

Authorization

select* form emp_bonus;

您可以获取分配给用户的用户的所有权限列表。以下是获取权限信息的示例。

Authorization

list all permissions of laura;

您还可以列出资源上的所有权限。以下是从表中获取权限的示例。

Authorization

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 身份验证的步骤:

  1. 在 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
  1. 将 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
  1. 将 jmxremote.password 的所有权更改为您运行 Cassandra 的用户,并将权限更改为只读。
chown cassandra:cassandra /etc/cassandra/jmxremote.password 
chmod 400 /etc/cassandra/jmxremote.password
  1. 编辑 jmxremote.password 并为 JMX 兼容的实用程序添加用户和密码。
monitorRole QED 
controlRole R&D 
cassandra cassandrapassword
  1. 将具有读写权限的 Cassandra 用户添加到 /jdk_install_location/lib/management/jmxremote.access。
monitorRole readonly
cassandra readwrite
controlRole readwrite \
create javax.management.monitor.,javax.management.timer. \ 
unregister
  1. 重启 Cassandra
  2. 使用 Cassandra 用户和密码运行 nodetool。
$ nodetool status -u cassandra -pw cassandra

摘要

本教程解释了 Cassandra 中的安全问题以及为启用安全而配置 Cassandra.yaml 文件。除此之外,它还解释了如何创建新用户账户,分配权限,配置防火墙等。