Cassandra JMX 身份验证和授权:创建用户

有两种类型的安全性 Apache Cassandra 和Datastax企业。

  • 内部身份验证
  • 授权

什么是内部身份验证和授权

内部身份验证基本上是验证用户连接。用户通过登录名和密码进行身份验证。所有用户帐户均在 Cassandra 内部。

内部授权处理用户的权限。它处理用户可以执行哪些操作。例如,我们可以授予用户权限,例如哪个用户只有数据读取权限,哪个用户有数据写入权限,哪个用户有数据删除权限。

但是,身份验证也可以通过以下方式从外部控制: Kerberos的 (Kerberos 用于安全地管理凭证)和 LDAP(LDAP 用于保存有关帐户的权威信息,例如允许他们访问的内容)。

外部身份验证是 Kerberos 和 LDAP 支持的身份验证。 Apache Cassandra 不支持外部身份验证。

只有 datastax enterprise 支持使用 Kerberos 和 LDAP 进行外部身份验证。而内部身份验证在 Apache Cassandra 以及Datastax企业。

配置身份验证和授权

In Cassandra默认情况下,身份验证和授权选项被禁用。您必须配置 Cassandra用于启用身份验证和授权的 .yaml 文件。

可选 Cassandra.yaml 文件并取消注释处理内部身份验证和授权的行。

配置身份验证和授权

  • In Cassandra.yaml 文件中,默认情况下,身份验证器值为“AllowAllAuthenticator”。将此身份验证器值从“AllowAllAuthenticator”更改为“com.datastax.bdp.cassandra.auth.PasswordAuthenticator”。
  • 同样,在 Cassandra.yaml 文件,默认情况下,授权者值将为“AllowAllAuthorizo​​r”。将此授权者值从“AllowAllAuthorizo​​r”更改为“com.datastax.bdp.cassandra.auth”。Cassandra授權人”。

登录

现在身份验证已启用,如果您尝试访问任何密钥空间, 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

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

  1. 全部
  2. 改变
  3. 授權
  4. CREATE
  5. 下降
  6. 调整
  7. 选择

以下是向用户分配权限的示例。

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 只能从本地主机访问。如果要远程访问 JMX,请更改 中的 LOCAL_JMX 设置 Cassandra-env.sh 并启用身份验证或 SSL。

启用 JMX 身份验证后,确保 操作中心 和 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"

另外,更改 LOCAL_JMX 设置 Cassandra环境变量

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. 使用以下代码运行 nodetool Cassandra 用户和密码。
$ nodetool status -u cassandra -pw cassandra

结语

本教程介绍了 Cassandra 并配置 Cassandra.yaml 文件用于启用安全性。除此之外,它还解释了如何创建新用户帐户、分配权限、配置防火墙等。