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

⚡ 智能摘要

Cassandra 安全机制依赖于内部身份验证、角色权限、防火墙规则和 JMX 访问控制。本页将介绍如何启用每一层安全防护、创建用户、授予权限以及保护远程 nodetool 访问。

  • 🔐 两层: 身份验证证明用户身份;授权决定用户可以执行哪些操作。
  • ⚙️ 启用它: 默认情况下两者均处于关闭状态,可通过身份验证器和授权器设置打开。
  • 👤 默认账户: 内置的 Cassandra 超级用户会创建其他所有帐户,因此请立即更改其密码。
  • ???? 资助模式: SELECT、MODIFY 和 ALTER 等权限是通过 GRANT 为每个资源授予的。
  • 📡 端口控制: 打开节点间的 7000、7001、7199 和 9042 端口,并保持 JMX 认证。

Cassandra JMX 身份验证和授权

有两种类型的安全性 Apache Cassandra 以及 DataStax Enterprise。

  • 内部身份验证
  • 授权

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

内部身份验证本质上是验证用户连接。用户通过登录名和密码进行身份验证。所有用户帐户都由内部管理系统管理。 Cassandra 内部。

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

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

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

只有 DataStax Enterprise 支持使用 Kerberos 和 LDAP 进行外部身份验证,而内部身份验证则同时支持这两种方式。 Apache Cassandra 以及 DataStax Enterprise。

配置身份验证和授权

In Cassandra默认情况下,身份验证和授权选项处于禁用状态。您需要配置 cassandra.yaml 文件以启用身份验证和授权。

打开 cassandra.yaml 文件,取消注释处理内部身份验证和授权的行,如下所示。

cassandra.yaml 文件中身份验证器和授权器行已取消注释

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

这两个类名是 DataStax Enterprise 的值。在开源软件中 Apache Cassandra 相同的设置 PasswordAuthenticator 和 CassandraAuthorizer凭证随后会保存在 system_auth 键空间,其复制因子应提高到 1 以上。

登录

现在身份验证已启用,如果您尝试访问任何密钥空间, Cassandra 将返回错误。

默认情况下, Cassandra 提供用户名“cassandra”和密码“cassandra”的超级账户。登录“cassandra”账户后,您可以执行任何操作。

让我们看看下面的截图,如果你不使用默认设置,它将不允许您登录 Cassandra “用户名和密码”。

当未使用默认凭据时,cqlsh 登录被拒绝。

现在,在第二张截图中,你可以看到使用后的效果 Cassandra 默认登录凭证,您就可以登录。

使用默认 Cassandra 凭据成功通过 cqlsh 登录

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

alter user cassandra with password 'newpassword';

创建新用户

可以使用“cassandra”帐户创建新帐户。

创建新用户时,需要指定登录名和密码,以及该用户是否为超级用户。只有超级用户才能创建新用户。

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

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

list users;

输出结果列出了每个账户及其超级用户标志。

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 表的权限,因此返回了错误。

当 Laura 未经许可查询 emp_bonus 表时返回错误

select* form emp_bonus;

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

列出 Laura 的所有权限

list all permissions of laura;

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

列出 dev.emp 上的所有权限的输出结果

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 代理端口

当前驱动程序仅使用 9042 端口;9160 端口用于传统的 Thrift 接口,在新集群上可以保持关闭状态。

启用 JMX 身份验证

使用默认设置 CassandraJMX 只能从本地主机访问。如果要远程访问 JMX,请修改 cassandra-env.sh 文件中的 LOCAL_JMX 设置,并启用身份验证或 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"

    另外,请更改 cassandra-env.sh 中的 LOCAL_JMX 设置。

    LOCAL_JMX=no
  2. 将 /jdk_install_location/lib/management/ 中的 jmxremote.password.template 复制到 /etc/cassandra/ 并将其重命名为 jmxremote.password。
    cp /jdk_install_dir/lib/management/jmxremote.password.template /etc/cassandra/jmxremote.password
  3. 将 jmxremote.password 的所有权更改为您运行的用户 Cassandra 并更改权限为只读。
    chown cassandra:cassandra /etc/cassandra/jmxremote.password 
    chmod 400 /etc/cassandra/jmxremote.password
  4. 编辑 jmxremote.password 并添加 JMX 兼容实用程序的用户和密码:
    monitorRole QED 
    controlRole R&D 
    cassandra cassandrapassword
  5. 添加 Cassandra 对 /jdk_install_location/lib/management/jmxremote.access 具有读写权限的用户
    monitorRole readonly
    cassandra readwrite
    controlRole readwrite \
    create javax.management.monitor.,javax.management.timer. \ 
    unregister
  6. 重新启动 Cassandra.
  7. 使用以下代码运行 nodetool Cassandra 用户和密码。
    $ nodetool status -u cassandra -pw cassandra

常见问题

两者都位于 system_auth 键空间中的 roles 和 role_permissions 表中。由于 system_auth 的副本丢失会导致所有用户无法访问,因此在生产环境中启用身份验证之前,请提高其副本因子。

CQL角色取代了旧版的用户语法。角色拥有权限,并且可以授予其他角色,因此在当前版本中,CREATE ROLE 取代了 CREATE USER,而用户命令则保留为别名。

不。身份验证仅用于验证身份;除非启用了 client_encryption_options,否则密码仍然以明文形式在网络中传输。请分别针对客户端到节点和节点到节点的流量启用 TLS。

创建一个专用的超级用户,然后更改内置的 Cassandra 密码或删除该帐户。保持文档中记录的 Cassandra/Cas​​sandra 对处于活动状态是最常见的做法。 Cassandra 错误配置。

权限会被缓存。更改只有在权限有效期过后才会生效,因此在测试授予或撤销权限时,请缩短 cassandra.yaml 中的设置或重启节点。

未经身份验证的 JMX 在端口 7199 上允许完全控制节点,包括停用。 Cassandra 因此,它只能在本地绑定,只有在设置了密码文件或 SSL 的情况下才能打开远程访问。

机器学习模型会分析每个角色的正常查询结构、登录时间和源地址,然后标记异常情况,例如应用程序帐户读取不相关的键空间。这样就能发现静态规则遗漏的凭据滥用问题。

Copilot 可以根据注释快速生成 CREATE ROLE 和 GRANT 语句,但它往往会建议授予较宽泛的权限。 Rev在对生产环境运行任何已生成的授权请求之前,请根据最小权限原则审查每个已生成的授权请求。 簇.

总结一下这篇文章: