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 文件,默认情况下,授权者值将为“AllowAllAuthorizor”。将此授权者值从“AllowAllAuthorizor”更改为“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
可以授予用户以下类型的权限。
- 全部
- 改变
- 授權
- CREATE
- 下降
- 调整
- 选择
以下是向用户分配权限的示例。
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 身份验证的步骤如下。
- 在 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
- 将 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
- 使用以下代码运行 nodetool Cassandra 用户和密码。
$ nodetool status -u cassandra -pw cassandra
结语
本教程介绍了 Cassandra 并配置 Cassandra.yaml 文件用于启用安全性。除此之外,它还解释了如何创建新用户帐户、分配权限、配置防火墙等。